PHP:将透明PNG添加到具有不透明度的JPEG

时间:2012-03-11 15:14:28

标签: php png jpeg gd watermark

这似乎是一个常见问题,但我发现,尝试所有组合后,它仍然不适合我。

我的PNG水印是透明的,我希望用这个水印覆盖原始JPG,并为水印添加50%的不透明度。

添加水印并创建不透明度,但PNG的透明度呈现为不透明的白色。

我见过使用imagecopy()的示例,但该函数没有添加不透明度的选项。

我的代码如下:

<?php
$file = 'orgCar.jpg';
$newfile = 'newCar.jpg';

if (!copy($file, $newfile)) {
    echo "failed to copy $file...\n";
}
$tempIMG = imagecreatefromjpeg($newfile);
$wmkIMG = imagecreatefrompng('wmark.png');
imagealphablending($wmkIMG,true);

imagecopymerge($tempIMG, $wmkIMG, 755, 864, 0, 0, 465, 36, 50);

// Save the image to file and free memory
imagejpeg($tempIMG,'newWM.jpg');
imagedestroy($orgIMG);
imagedestroy($wmkIMG);

echo '<h3>Testing of Watermarking</h3>';
echo '<div>';
echo '<img width="160" src="orgCar.jpg" title="original" alt"" />';
echo '<img width="160" src="newCar.jpg" title="copy" alt"" />';
echo '<img width="240" src="wmark.png" title="watermark" alt"" /><br>';
echo '<img width="640" src="newWM.jpg" title="New with Watermark" alt"" />';
echo '</div>';
?>

如果有一个简单的答案,我忽略了,那么如果有人能指出我,我将非常感激。

1 个答案:

答案 0 :(得分:5)

问题是您传递给imagecopymerge()的透明度是使用而不是图像Alpha通道,而不是添加到它。

您有两种选择:

1)修改PNG,使其包含50%的不透明度,然后使用imagecopy()(我测试了它并且工作正常)。请记住,真彩色PNG可以使用完整的Alpha通道,因此您可以在图像中包含半透明度。

2)使用类似于此处描述的解决方法:

<强> imagecopymerge_alpha