我有一个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);
?>
@ imagecolortransparent($im, $xxxx); //not sure why this works
我觉得这个工作,因为imagecolortransparent
使给定的颜色(您放置$ XXXX)透明的,在这种情况下$ XXXX不包含任何值。 那么,什么是由透明都是不包含颜色值的像素。
一件事是,使用工作,我不能让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