我正在尝试添加一个水印(徽标)到每个上传到网站的图像。
所以,我使用imagecopy PHP函数在主图像( jpg图像)上添加了一个水印( png图像),但问题是logo的大小是根据主图像的大小(高度和宽度)而变化的,这意味着如果我上传一张4000x2000的图像,logo的大小大概是100x100,如果主图像的大小是1000x500,那么图章就会比真实的大小(546x537)大。
图片示例:
https://crkemlak.com/appimg/199f8486d7d77007771f2f450dffca4d.jpeg
https://crkemlak.com/appimg/d6f9fd02999eced76eac9a6995df904f.jpeg
https://crkemlak.com/img/stamp.png
我使用以下代码将水印添加到图像中:
$im = imagecreatefromjpeg('../appimg/'.$filenamerand);
$originalWidth= imagesx($im);
$originalHeight = imagesy($im);
$stamp = imagecreatefrompng('../img/stamp.png');
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
imagecopy($im, $stamp, ($originalWidth-$sx)/2, ($originalHeight-$sy)/2, 0, 0, imagesx($stamp), imagesy($stamp));
我需要你的帮助来解决这个问题,我需要使水印是在它的实际大小在任何大小的主要jpg图像
谢谢
发布于 2019-09-03 07:51:00
我使用了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);
https://stackoverflow.com/questions/52998567
复制