PHP和GD:PNG-24透明度问题

时间:2011-04-06 20:22:16

标签: php gd

我有这个代码用于在照片上放置透明的PNG图像水印。只要水印img是PNG-8(但看起来很难看到抗锯齿图像),它工作正常。如果我使用PNG-24,水印图像看起来很好,但会失去透明度。有什么办法解决吗?感谢。

CODE:

header('content-type: image/jpeg');  

$watermark = imagecreatefrompng('wm1.png');  
$watermark_width = imagesx($watermark);  
$watermark_height = imagesy($watermark); 

imagealphablending($watermark, true);
imagesavealpha($watermark, true);
$image = imagecreatetruecolor($watermark_width, $watermark_height);  

$image = imagecreatefromjpeg('image1.jpg');  
$size = getimagesize('image1.jpg');  
$dest_x = $size[0] - $watermark_width - 5;  
$dest_y = $size[1] - $watermark_height - 5;  


imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);  
imagejpeg($image, null, 95);  
imagedestroy($image);  
imagedestroy($watermark);  

1 个答案:

答案 0 :(得分:4)

PNG 24没有透明层,只有3个字节代表红绿和蓝。如果可能,您应该使用PNG 32,因为它具有您想要的alpha层。

点击此链接查看我的意思:http://www.deepbluesky.com/blog/-/the-difference-between-png24-and-png32_49/

作为旁注,你的程序中的这行代码没有做任何事,因为$image在下一行被破坏了:

$image = imagecreatetruecolor($watermark_width, $watermark_height);