我的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);
?>
答案 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);