2013-04-01 31 views
1

透明度,我有一个看起来像这样的代码:更好的质量与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); 
?> 

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

回答

2

它看起来像你输出的图像作为GIF,而不是PNG。尝试imagepng()而不是imagegif()

imagepng($dest); 
+0

嗯,我试过了,但它使图像上的所有黑色轮廓/形状都是透明的。 – user2154729

0

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

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