php - 如何在 PHP Laravel 中添加不同位置的水印图片?
问题描述
嗨,我想添加具有不同位置的水印图像,例如
top-left
,
top-right
,
bottom-left
,
bottom-right
,
center
.
管理员在选项卡中选择上述位置之一setting
。我正在使用该Orakuploader
插件,在该插件中,水印出现在上传图像的中心。
这是位置水印图像的代码center
:
function addWatermark($watermark, $imageDirectory, $imageName, $x = 0, $y = 0)
{
if(file_exists($watermark))
{
$marge_right = 0;
$marge_bottom = 0;
$stamp = imagecreatefrompng($watermark);
$image_extension = @end(explode(".", $imageName));
switch($image_extension)
{
case "jpg":
$im = imagecreatefromjpeg("$imageDirectory/$imageName");
break;
case "jpeg":
$im = imagecreatefromjpeg("$imageDirectory/$imageName");
break;
case "png":
$im = imagecreatefrompng("$imageDirectory/$imageName");
break;
}
$imageSize = getimagesize("$imageDirectory/$imageName");
$watermark_o_width = imagesx($stamp);
$watermark_o_height = imagesy($stamp);
$newWatermarkWidth = $imageSize[0];
$newWatermarkHeight = $watermark_o_height * $newWatermarkWidth / $watermark_o_width;
if((int)$x <= 0)
$x = $imageSize[0]/2 - $newWatermarkWidth/2;
if((int)$y <= 0)
$y = $imageSize[1]/2 - $newWatermarkHeight/2;
imagecopyresized($im, $stamp, $x, $y, 0, 0, $newWatermarkWidth, $newWatermarkHeight, imagesx($stamp), imagesy($stamp));
switch($image_extension)
{
case "jpg":
header('Content-type: image/jpeg');
imagejpeg($im, "$imageDirectory/$imageName", 100);
break;
case "jpeg":
header('Content-type: image/jpeg');
imagejpeg($im, "$imageDirectory/$imageName", 100);
break;
case "png":
header('Content-type: image/png');
imagepng($im, "$imageDirectory/$imageName");
break;
}
}
}
如何在 ( top-left
, top-right
,bottom-left
和bottom-right
) 等其他位置添加水印?
非常感谢您的帮助。谢谢
解决方案
嘿,伙计,尝试用 函数替换此代码。imagecopyresized
我希望它可以为你工作。谢谢。
$sx = imagesx($stamp);
$sy = imagesy($stamp);
// top-left
imagecopy($im, $stamp, -45, -5, 0, 0, imagesx($stamp), imagesy($stamp));
// top-right
imagecopy($im, $stamp, imagesx($im) - $sx + 45, -5, 0, 0, imagesx($stamp), imagesy($stamp));
// bottom-left
imagecopy($im, $stamp, -45, imagesy($im) - $sy + 5, 0, 0, imagesx($stamp), imagesy($stamp));
// bottom-right
imagecopy($im, $stamp, imagesx($im) - $sx + 45, imagesy($im) - $sy + 5, 0, 0, imagesx($stamp), imagesy($stamp));
// center
imagecopy($im, $stamp, (imagesx($im) - $sx)/2, (imagesy($im) - $sy)/2, 0, 0, imagesx($stamp), imagesy($stamp));
推荐阅读
- git - 无法从 bitbucket 管道 yml 脚本中签出 git 分支
- opentbs - 我可以为带有分组或子块的 DOCX 文件使用平面数据源吗?
- python - 根据另一个数组的唯一元素计算numpy数组的平均值
- java - 匿名类是内部类吗?
- rabbitmq - RabbitMQ:让 Basic.ConsumeOk 回复乱序
- docker - 如何在 Wildfly Docker 映像上设置时区和语言环境?
- c# - 如何捕获异常以使其不会中断?
- jetbrains-ide - DotTrace,是否可以在不终止分析会话的情况下更改分析类型,即从采样到跟踪?
- java - 如何在列表列表中查找元素
- eclipse - 无法在 GoClipse 中构建 Go 应用程序