使用GD来改变一个彩色图形的颜色在透明背景上,同时保持透明度(Using GD to change

2019-09-28 04:08发布

我有一个PNG即在透明背景上的一组白色的形状。 我想同时保留透明背景更改为形状的颜色。 我一直在尝试用低于不改变颜色,而是导致了黑色背景的代码。 我认为imagetruecolortopalette原因造成的问题,但如果我删除line.Any建议的颜色没有变化?

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

?>

Answer 1:

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

我觉得这个工作,因为imagecolortransparent使给定的颜色(您放置$ XXXX)透明的,在这种情况下$ XXXX不包含任何值。 那么,什么是由透明都是不包含颜色值的像素。



Answer 2:

一件事是,使用工作,我不能让imagetruecolortopalette无论是。 不太清楚,如果你可以使用imagefill你的情况函数(你需要知道从哪里开始填充,如果你有白色的区域它的工作原理),但是这是我用过的东西。

另一件事是,它好像你需要调用imagesavealpha您保存任何Alpha信息的PNG图像之前,否则就失去了。 很难说,我为什么不是一个默认设置。

总而言之,我的做法是:

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


文章来源: Using GD to change the color of a one color shape on a transparent background while preserving transparency