Imagemagick替换颜色但保持透明度
我想用另一种颜色替换PNG徽标中的所有黑色实例。我试过:Imagemagick替换颜色但保持透明度,imagemagick,Imagemagick,我想用另一种颜色替换PNG徽标中的所有黑色实例。我试过: convert source.png -fill #123456 -opaque black out.png 但是徽标有一些未转换的透明黑色像素。如何更改每个黑色像素,但保持每个像素的透明度?您可以尝试以下方法: convert source.png -channel RGB -fuzz 99% -fill blue -opaque black dest.png 但只有当你的徽标是单色的(就像iOS图标一样,只有一种颜色和透明度)时,
convert source.png -fill #123456 -opaque black out.png
但是徽标有一些未转换的透明黑色像素。如何更改每个黑色像素,但保持每个像素的透明度?您可以尝试以下方法:
convert source.png -channel RGB -fuzz 99% -fill blue -opaque black dest.png
但只有当你的徽标是单色的(就像iOS图标一样,只有一种颜色和透明度)时,它才会起作用。我意识到这是一个老问题,但我花了令人难以置信的时间,没有找到答案。但我终于明白了 注意:我的图像是全黑的,使用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
这里发生了什么事?
alpha off
这意味着,如果图像没有alpha通道,则
没有任何变化,如果您的图像具有alpha通道,则后续
运营部门会假装它不在那里.png
后缀保存图像时,imagemagick将决定使用最有效的格式,即索引。我不知道为什么,但它认为我的图像是1位可表示的:完全透明/完全不透明颜色,我失去了alpha通道的所有更精细的细节。也许有其他解决方案,但我的surefire way在文件名上使用了“.png32”后缀。这意味着图像必须以8bit-8bit-8bit-8bit-8bit RGBA格式保存- 使用gimp打开图像
- 在窗口的顶部栏上,您应该看到
,或者其他内容,如…索引颜色…
。如果您看到…RGB颜色…
,可能您的管道已经运行良好,只是它以错误的格式保存索引颜色
版本:ImageMagick 6.8.9-9 Q16 x86_64 2017-07-31
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。根据我的经验,以前的答复对我的意见有一个缺点:如果您的绘图有软边(由于alpha通道),您将丢失它们,并且您的结果只有锐边。 使用此命令,将保留软边:
magick in_file.png -fill "#6696DC" -colorize 100% out_file.png32
正如Zoltan提到的,我需要使用png32后缀来强制png 32位编码。然后,只需在生成文件后重命名该文件(删除32位后缀),就可以得到扩展名正确的工作文件
注意:我使用的是ImageMagick 7.0.8-24 Q16 x64
convert in.png xc:"#ff0000" -channel RGB -clut out.png
这就可以了。如果in.png有一个alpha通道,那么in.png中的RGB通道将被替换为红色(#ff0000),同时保持alpha通道不变
这里发生了什么?
in.png是第一个输入图像。xc:“#ff0000”是第二个输入图像(xc:special文件被ImageMagick解释为一个全部填充了给定颜色的图像)。clut选项(“颜色查找表”)将第二个图像解释为查找表,并将其应用于第一个图像中的值。由于第二个图像是单色的,因此在本例中,第一个图像中的每种颜色都映射为红色。最后一个文件名(out.png)被解释为输出文件
为什么-clut不影响alpha通道?
好的,您可以使用-channel选项设置受影响的频道。它必须在-clut之前。RGB是我们在这里想要的。您是否设法找到了问题的解决方案?也许可以尝试在命令开头附近设置
-channel RGBA
?我知道这一问题提出已经有一段时间了,但是有一个示例文件会非常有用pful正确回答这个问题。在Imagemagick 7中,使用magick,而不是magick convert和not convert。使用-colorize将使用该颜色对整个图像进行着色。这似乎不是OP想要的。抱歉,如果我误解了,但原始问题是关于“使用其他颜色的PNG徽标中的所有黑色实例”。其他回复也认为目标是单色图片,用alpha灰度。无论如何,你是对的,colorize命令是单色的。是的,我更正了IM7命令删除convert。谢谢。