2012-03-11 95 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