1

我有一个看起来像这样的代码:

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

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

4

2 回答 2

2

看起来您正在将图像输出为 GIF,而不是 PNG。尝试imagepng()代替imagegif().

imagepng($dest);
于 2013-04-01T23:11:27.473 回答
0

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

另一种是imagecolortransparent()将单一颜色设置为透明。这意味着只有具有该颜色的像素才会透明。如果您需要平滑过渡,您可能需要自己实现实际的每像素真彩色透明度。

于 2013-04-01T23:17:52.123 回答