PHP imagecopy 函数根据主图像的高度和宽度改变图章大小
Posted
技术标签:
【中文标题】PHP imagecopy 函数根据主图像的高度和宽度改变图章大小【英文标题】:PHP imagecopy function changing stamp size according to the main image height and width 【发布时间】:2019-03-30 14:45:00 【问题描述】:我正在尝试为每个上传到网站的图片添加水印(徽标)。
所以,我使用 imagecopy php 函数将水印(png 图像)添加到主图像(jpg 图像),但问题是徽标大小会根据主图像大小(高度和宽度)而变化,那就是意思是如果我上传一张 4000x2000 的图片,则徽标的大小类似于 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 图像中都是真实尺寸
谢谢
【问题讨论】:
编写一个以原始图像大小为参数的函数,然后使用它来调整水印的大小,然后输出水印以与源图像合并。然后你的源图像的大小根本不会改变(除非你当然想要它)。 @Difster 你能给我一个例子吗? @GhadeerR.Majeed 我不明白逻辑,如果主图像更大,印章会更小?您可以上传一些带有图片的工作示例吗? @PaulRM 我更新了帖子,请立即查看。谢谢。 我得到了 403 并把邮票的链接也放了。 ;-) 【参考方案1】:我使用了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);
【讨论】:
以上是关于PHP imagecopy 函数根据主图像的高度和宽度改变图章大小的主要内容,如果未能解决你的问题,请参考以下文章
PHP GD 方法 imagecopy 比原始图像更大的图像文件