如何使用 GD 将 png 24 alpha 透明图像中的一种颜色替换为另一种颜色
我尝试过:
$index = imagecolorresolve ( $im, 0,0,0 ); // get black
imagecolorset($im, $index, 255, 0, 255); // SET NEW COLOR
这似乎适用于 png 8,但不适用于 24,如果我使用 8 进行此操作,由于抗锯齿,结果会很奇怪。
这是我正在使用的完整测试代码。 (这只是测试代码,所以要温柔)。
function LoadPNG($imgname, $color = false)
{
$im = @imagecreatefrompng($imgname);
imagealphablending($im, false);
if($color) {
$index = imagecolorresolve ( $im, 0,0,0 ); // get black
imagecolorset($im, $index, 255, 0, 255); // SET NEW COLOR
}
imageAlphaBlending($im, true);
imageSaveAlpha($im, true);
return $im;
}
header('Content-Type: image/png');
$img = LoadPNG("head.png", "red");
imagepng($img);
imagedestroy($img);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
基于inti的解决方案,我制作了一个有效的脚本:
我想要一种优化它的方法,因为它很慢
Based on the solution of inti, i made a script that works:
I'd like a way to optimize it, because it is quite slow
您可以尝试以下操作:
代码:
希望这有帮助!
You can try the following:
Code:
Hope this helps!
此函数将替换 1 种或所有颜色为 1 种新颜色,同时保持透明度级别(否则,如果使用部分透明度来绘制边框,则边框可能看起来很糟糕)。
类似帖子的完整答案
this function will replace either 1 or all colors for 1 new color, maintaining transparency levels (otherwise borders will probably look awful, if PARTIAL transparency was used to draw borders).
COMPLETE ANSWER TO SIMILAR POST
一个好方法是使用paintOpaqueImage(),它也允许使用颜色容差
您可以在 http://www.imagemagick.org/script/command-line-options.php#fuzz
A good way to doing it is using paintOpaqueImage(), which also permit using color tolerance
You can see the tolenrance doc in http://www.imagemagick.org/script/command-line-options.php#fuzz
这个功能就像一个魅力:
This function work like a charm :