我有这个代码用于在照片上放置透明的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);
答案 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);