gpt4 book ai didi

php - 如何在 PHP Laravel 中添加不同位置的水印图像?

转载 作者:行者123 更新时间:2023-12-04 12:43:39 24 4
gpt4 key购买 nike

您好,我想添加具有不同位置的水印图像,例如

左上角,
右上,
左下,
右下,
中心

Admin 在 setting 选项卡中选择上述位置之一。我正在使用 Orakuploader 插件,在该插件中,水印出现在上传图片的中心

下面是center位置的watermark image代码:

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 and 右下)?

非常感谢您的帮助。谢谢

最佳答案

嘿,伙计,尝试用 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));

关于php - 如何在 PHP Laravel 中添加不同位置的水印图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54759476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com