2010-07-28 80 views
5

我有两个PNG文件,“red.png”和“blue.png”;它们都是透明的,但在不同的地方有几个像素的红色或蓝色斑点。PHP + GD:imagecopymerge不保留PNG透明胶片

我想做一个PHP脚本来合并这两个;它应该像这样简单:

$original = getPNG('red.png'); 
$overlay = getPNG('blue.png'); 

imagecopymerge($original, $overlay, 0,0, 0,0, imagesx($original), imagesy($original), 100); 
header('Content-Type: image/png'); 
imagepng($original); 

当我运行这个脚本时,我得到的只是蓝色的点 - 透明度丢失了。我看到我应该添加下列内容:

imagealphablending($original, false); 
imagesavealpha($original, true); 

(在原始和覆盖?上)这似乎没有任何帮助。

我看见有几个解决方法上PHP.net,东西的调子:

$throwAway = imagecreatefrompng($filename); 
imagealphablending($throwAway, false); 
imagesavealpha($throwAway, true); 
$dstImage = imagecreatetruecolor(imagesx($throwAway), imagesy($throwAway)); 
imagecopyresampled($dstImage, $throwAway,0,0,0,0, imagesx($throwAway),  imagesy($throwAway),   imagesx($throwAway), imagesy($throwAway)); 

,这应该PNG转换为“真彩色”图像并保留透明度。它似乎这样做,但现在我看到的只是黑色背景上的蓝色。

我该怎么办?

回答

6

这完美的作品对我来说:

$img1 = imagecreatefrompng('red.png'); 
$img2 = imagecreatefrompng('blue.png'); 

$x1 = imagesx($img1); 
$y1 = imagesy($img1); 
$x2 = imagesx($img2); 
$y2 = imagesy($img2); 

imagecopyresampled(
    $img1, $img2, 
    0, 0, 0, 0, 
    $x1, $y1, 
    $x2, $y2); 

imagepng($img1, 'merged.png', 0); 

PHP版本5.3.2
GD 2.0版
的libpng版本1.2.42

您是否尝试过将图像保存到一个文件,并检查?

+0

完全合作。非常感谢!我仍然必须使用imagealphablending和imagesavealpha。 – 2010-07-28 19:38:29