2012-03-11 124 views
2

这似乎是一个常见问题,但尝试所有组合,我发现,它仍然不适合我。PHP:添加透明PNG到不透明度的JPEG

我的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>'; 
?> 

如果有一个简单的答案,我都忽略了,那我会很感激,如果有人可以点我给它。

+2

是[此](http://uk3.php.net/manual/en/image.examples-watermark。 PHP)的任何好处? – halfer 2012-03-11 15:18:24

+0

我试过这个选项,但是它不会为水印创建不透明度。 – mcl 2012-03-11 16:15:25

回答

5

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

你有两个选择:

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

2)使用一种变通方法像这里所描述的一个:

imagecopymerge_alpha

+0

我尝试了使用Fireworks的优秀创意来减少我的水印的不透明度。它减少了水印的强度,但是当我做了'imagecopy()'外部的透明工作,但主要水印没有任何不透明性。我需要在执行'imagecopy()'之前将任何GD命令应用于我的水印,还是需要使用不同的程序来创建不透明效果? – mcl 2012-03-11 20:16:29

+0

对于测试,我使用你的代码,并用imagecopy()首先替换imagecopymerge(),然后用imagecopymerge_alpha()替换(两种方法产生相同的可视结果)。也许Fireworks将PNG保存为8位(256色)?对于完整的Alpha通道,您需要将图像保存为32位,否则PNG就像GIF图像一样工作。您可以使用Irfanview检查图像的PNG格式:http://www.irfanview.com/(图像 - >信息)。 – 2012-03-13 22:21:14

+0

选项2为我工作,谢谢。 – 2012-04-15 22:09:39