使用GD在透明背景上更改单色形状的颜色,同时保持透明度

时间:2011-03-11 18:37:15

标签: php colors gd transparent

我的png是透明背景上的一组白色形状。我正在尝试改变形状的颜色,同时保留透明背景。我一直在尝试下面的代码,它确实改变了颜色但导致黑色背景。我认为imagetruecolortopalette导致问题,但如果我删除该行,颜色不会改变。任何建议?

<?php
$imgname = "whiteim.png"; 
$im = imagecreatefrompng ($imgname);

imagetruecolortopalette($im,false, 255);

$index = imagecolorclosest ( $im,  255,255,255 ); // get White COlor
imagecolorset($im,$index,255,0,0); // SET NEW COLOR

$imgname = "result.png";
imagepng($im, $imgname ); // save image as png
imagedestroy($im);

?>

2 个答案:

答案 0 :(得分:1)

@ imagecolortransparent($im, $xxxx); //not sure why this works

我认为这项工作是因为imagecolortransparent使给定的颜色(放置$ xxxx的位置)透明,在这种情况下$ xxxx不包含任何值。因此,透明的是所有不包含颜色值的像素。

答案 1 :(得分:0)

有一件事是我无法使用imagetruecolortopalette使其工作。不太确定你是否可以在你的情况下使用imagefill功能(你需要知道从哪里开始填充,如果你有一个白色的区域它可以工作),但这是我用过的。

另一件事是你似乎需要在将任何alpha信息保存到png图像之前调用imagesavealpha,否则它会丢失。很难告诉我为什么它不是默认设置。

总而言之,我的方法是:

$imgname = "whiteim.png";.                                                                                                                                
$im = imagecreatefrompng ($imgname);                                                                                                                    

imagefill($im, 0,0, imagecolorallocate($im, 255,0,0));                                                                                                  

$imgname = "result.png";                                                                                                                                
imagesavealpha($im, True);                                                                                                                              
imagepng($im, $imgname ); // save image as png                                                                                                          
imagedestroy($im);