PHP imagecopy函数根据主图像的高度和宽度更改图章大小

时间:2018-10-25 21:47:21

标签: php php-gd

我正在尝试为每个上传到网站的图像添加水印(徽标)。

因此,我使用imagecopy PHP函数向主图像(jpg图像)添加水印(png图像),但是问题是徽标大小根据主图像尺寸(高度和宽度)而变化,意思是如果我上传一个4000x2000的图片,则徽标的外观应为100x100,如果主图片的尺寸为1000x500,则该图章将大于实际尺寸(546x537)。

图像样本:

endSize-startSize

我使用以下代码在图像上添加了水印:

wf.write(str(int(line)+1))

我需要您的帮助以解决此问题,我需要使水印在jpg主图像中的任何实际尺寸中都有效

谢谢

1 个答案:

答案 0 :(得分:0)

我使用了imagecopyresized,以便可以将水印缩放为在任何输入图像上看起来都一样,而不论其大小。可能更好的方法。我不确定在缩放具有透明背景的图像时的质量如何。这里是git

$watermark = imagecreatefrompng('watermark.png');
$image = imagecreatefromjpeg('main-image.jpg');

$wm_x = imagesx($watermark);
$wm_y = imagesy($watermark);
$img_x = imagesx($image);
$img_y = imagesy($image);

// calculate watermark size
$wm_scale = 19; // set size in relation to image
$wm_w = $img_x/$wm_scale;
$wm_aspect = $wm_y/$wm_x;
$wm_h = (int) ($wm_aspect * $wm_w);

// calculate margin
$margin_scale = 6; // set margin in relation to new watermark size
$margin_right = $wm_w/$margin_scale;
$margin_bottom = $wm_h/$margin_scale;

// calculate watermark destination
$dst_x = $img_x - $wm_w - $margin_right;
$dst_y = $img_y - $wm_h - $margin_bottom;

imagecopyresized ($image, $watermark, $dst_x, $dst_y, 0, 0, $wm_w, $wm_h, $wm_x, $wm_y);

// Output and free memory
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
相关问题