2011-07-21 80 views
1

我试图复制一个具有阴影(即alpha通道)和透明背景的PNG图像。但是,生成的图像以黑色绘制阴影和透明背景。我尝试了imagecopyimagecopymerge;没有得到有效的结果,这与原始图像不一样。复制带阴影和透明背景的图像

Preview of the images.

$src = imagecreatefrompng('img_box3-bg.png'); 

/* Using imagecopy. */ 
$dest = imagecreatetruecolor(116, 100); 
imagecopy($dest, $src, 0, 0, 0, 0, 116, 100); 
imagepng($dest, 'img_box3-bg.imagecopy.png'); 
imagedestroy($dest); 

/* Using imagecopymerge. */ 
$dest2 = imagecreatetruecolor(116, 100); 
imagecopymerge($dest2, $src, 0, 0, 0, 0, 116, 100, 100); 
imagepng($dest2, 'img_box3-bg.imagecopymerge.png'); 
imagedestroy($dest2); 

imagedestroy($src); 

帮助?事先感谢。

回答

3

事情是这样的:

$src = imagecreatefrompng('img_box3-bg.png'); 

/* Using imagecopy. */ 
$dest = imagecreatetruecolor(116, 100); 

// this is new 
imagesavealpha($dest, true); 
$transparent = imagecolorallocatealpha($dest, 0, 0, 0, 127); 
imagefill($dest, 0, 0, $transparent); 

imagecopy($dest, $src, 0, 0, 0, 0, 116, 100); 

header('Content-Type: image/png'); 
imagepng($dest); 
imagedestroy($dest); 
+0

我认为你的意思'$ dest',而不是在上面的代码片段'$ img'。这不幸的是并没有做到这一点。再看一下链接/预览页面:我已经添加了使用建议的方法完成的新图像。 – moey

+0

@ Siku-Siku.Com改变了这个例子,这是在我的测试机器上工作。希望能帮助到你! – Yoshi

+0

灿烂!它像一个魅力。非常感谢。 – moey