我的代码如下:
<?php
$imgl = "test/white.png";
$img2 = "test/1.png";
$dest = imagecreatefrompng($imgl);
$src = imagecreatefrompng($img2);
imagecolortransparent($src, imagecolorat($src, 0, 0));
imagecolortransparent($dest, imagecolorat($dest, 0, 0));
$src_x = imagesx($src);
$src_y = imagesy($src);
imagecopymerge($dest, $src, 0, 0, 0, 0, $src_x, $src_y, 100);
// Output and free from memory
header('Content-Type: image/png');
imagegif($dest);
imagedestroy($dest);
imagedestroy($src);
?>
此代码将图像合并在一起,同时保持其透明度。但是,此代码使图像的透明度非常低,边缘看起来非常粗糙。我想知道,有没有一种方法可以保持图像的透明度,但质量更好?但是,我仍然希望这个脚本能够完成相同的功能。
答案 0 :(得分:2)
看起来您将图像输出为GIF,而不是PNG。请尝试使用imagepng()
代替imagegif()
。
imagepng($dest);
答案 1 :(得分:0)
GIF只有1位alpha通道,这意味着它无法表示部分透明度。每个像素都是完全透明或完全不透明的。这是您的代码的第一个潜在问题。
另一个是imagecolortransparent()
将单一颜色设置为透明。这意味着只有完全该颜色的像素才是透明的。如果需要平滑过渡,您可能需要自己实现实际的真彩色每像素透明度。