调整相对于父图像的水印并保持抗锯齿

时间:2016-02-26 18:52:53

标签: php watermark antialiasing

我见过其他答案,但没有解决这个问题,我有这个代码

$stamp = imagecreatefrompng('w.png');
$im = imagecreatefromjpeg('image.jpg');
$stw = imagesx($im)/4;
$marge_bottom = 10;  
$marge_right = 10;

$sx = imagesx($stamp);
$sy = imagesy($stamp);
imagecopyresized($im, $stamp, $marge_right, $marge_bottom, 0, 0, $stw, $stw, imagesx($stamp), imagesy($stamp));


header("Content-Type: image/jpeg");
imagejpeg($im,NULL,100);

这可行,但水印(图章)在调整大小enter image description here

后呈锯齿状

水印应如下所示:

enter image description here

修改 这是针对此问题的任何人的解决方案,请将imagecopyresized()函数替换为imagecopyresampled()

imagecopyresampled($im, $stamp, $marge_right, $marge_bottom, 0, 0, $stw, $stw, imagesx($stamp), imagesy($stamp));

2 个答案:

答案 0 :(得分:3)

尝试使用imagecopyresampled代替imagecopyresized

imagecopyresampled($im, $stamp, $marge_right, $marge_bottom, 0, 0, $stw, $stw, imagesx($stamp), imagesy($stamp));

从手册:

  

imagecopyresampled()将一个图像的矩形部分复制到另一个图像,平滑地插入像素值,这样,特别是减小图像的大小仍然保持很大的清晰度。

答案 1 :(得分:0)

我不知道你在这里的代码的所有细节。但是,我知道任何缩小的图像都必须保持其纵横比,以便在较小的尺寸下显示相同。如果在缩小时使用绝对值来定义图像的宽度和高度,则图像中锯齿状边缘的可能性会更高,因为图像不会将其纵横比保持在较小的尺寸。因此,不要定义绝对值,而是使用动态值。因此,例如,而不是使用像10px或转换为百分比(%)的东西。