Imagemagick替换颜色但保持透明度

时间:2013-02-27 19:59:28

标签: imagemagick

我想用另一种颜色替换PNG徽标中的所有黑色实例。我试过了:

convert source.png -fill #123456 -opaque black out.png

但徽标有一些未转换的透明黑色像素。如何更改每个黑色像素,但保持每个像素的透明度?

5 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

convert source.png -channel RGB -fuzz 99% -fill blue -opaque black dest.png

但只有当您的徽标是单色时(例如iOS图标 - 只有一种颜色和透明度),它才会起作用。

答案 1 :(得分:0)

我意识到这是一个古老的问题,但我度过了令人难以置信的长时间,并没有找到答案。但最后我明白了。

注意:我的图片是全黑的,使其成为带有alpha的灰度。 (即我的所有像素看起来像:R = 0,G = 0,B = 0,A = X。你的像素可以是其他任何东西,我想你可以调整我的答案。

convert in_file.png -alpha off -fuzz 100% -fill blue -opaque '#000000' -alpha on -format png32 out_file.png32

这里发生了什么?

  1. alpha off这意味着,如果图片没有alpha通道,那么 如果您的图像确实有alpha通道,则不会发生任何变化 操作将假装它不存在。
  2. 不幸的是,当使用.png后缀保存图像时,imagemagick将决定使用索引最有效的格式。我不知道,为什么,但它认为我的图像是1位可表示的:完全透明/完全不透明的颜色,我松散了alpha通道的所有细节。也许还有其他解决方案,但我的确定方法是使用' .png32'文件名后缀。这意味着,图像必须以8bit-8bit-8bit-8bit RGBA格式保存。
  3. 无论如何,如果您尝试调试,为什么您的图片管道无法使用透明度:

    • 使用gimp

    • 打开图像
    • 在窗口的顶部栏中,您应该看到...Indexed color...或其他内容,例如...RGB color...。如果你看到Indexed color,也许你的管道已经运行良好,只能以错误的格式保存!

    是的,这是一个双重错误......关于其中一个错误,你可能已经对它进行了数十次正确的猜测...当我在无数的谷歌搜索和尝试之后发现这一点时,猜猜我在想什么。 ..

    版本:ImageMagick 6.8.9-9 Q16 x86_64 2017-07-31 http://www.imagemagick.org

答案 2 :(得分:0)

如果您有透明度,请在ImageMagick中尝试

convert source.png -alpha off -fuzz XX% -fill "#123456" -opaque black -alpha on out.png


其中XX是接近黑色的百分之一,您可能想要包括。如果您只想更改纯黑色,则可以设置XX = 0。

请注意,上面的代码会将所有黑色像素更改为新颜色,包括透明度下的任何黑色。

如果您只想将完全不透明的黑色更改为新颜色而不是透明度下的任何黑色,请在颜色中包含Alpha值。所以试试

convert source.png  -fuzz XX% -fill "#123456FF" -opaque "graya(0)" -alpha on out.png


如果使用IM 7,则将转换为magick。

答案 3 :(得分:0)

根据我的经验,以前的答复对我来说有一个缺点:如果您的图形具有柔和的边缘(由于alpha通道),则会丢失它们,而结果只有锐利的边缘。 使用此命令可以保留柔和的边缘:

magick in_file.png -fill "#6696DC" -colorize 100% out_file.png32

如Zoltan所述,我需要使用png32 sufix来实现png 32位编码。然后,只需在生成文件后重命名文件(删除32个文件),即可得到具有正确扩展名的工作文件。

注意:我正在使用ImageMagick 7.0.8-24 Q16 x64。

答案 4 :(得分:0)

convert in.png xc:"#ff0000" -clut  out.png

这将完成工作。假设in.png具有Alpha通道,则in.png中的RGB通道将被替换为红色(#ff0000),同时保持Alpha通道不变。

这里发生了什么? in.png是第一个输入图像。 xc:“#ff0000”是第二个输入图像(xc:特殊文件由ImageMagick解释为全部填充有给定颜色的图像)。 -clut选项(“颜色查找表”)将第二张图像解释为查找表,并将其应用于第一张图像中的值。由于第二个图像是单色的,因此在此示例中,第一个图像中的每种颜色都映射为红色。最后一个文件名(out.png)被解释为输出文件。

-clut为什么不影响alpha通道? 好了,您可以使用-channel选项设置受影响的频道。它必须在-clut之前。但是,默认-channel是RGB。由于我们省略了-channel选项,因此假设使用RGB(不包括A)。