更好的质量PNG透明度与PHP



我有一个像这样的代码:

<?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);
?>

此代码将图像合并在一起,同时保持它们的透明度。然而,这段代码使图像的透明度质量很低,边缘看起来很粗糙。我想知道,有没有一种方法可以保持图像的透明度,但质量更好?但是,我仍然希望这个脚本完成相同的功能。

看起来您要以GIF格式输出图像,而不是PNG格式。用imagepng()代替imagegif()

imagepng($dest);

gif只有1位alpha通道,这意味着它无法表示部分透明度。每个像素不是完全透明就是完全不透明。这是代码的第一个潜在问题。

另一个是imagecolortransparent()设置单一颜色被解释为透明。这意味着只有正好是颜色的像素才是透明的。如果你需要平滑的过渡,你可能需要自己实现真实的彩色每像素透明度。

最新更新