如何使用ImageMagick将GIF图像中的颜色设置为透明?

5

我曾经费尽心思地想知道如何在使用ImageMagick时将一个颜色(在我这里是黑色)设置为GIF的透明色。我该如何对一组现有的GIF图像进行操作呢?

我曾尝试过以下选项,但似乎没有任何作用:

mogrify -transparent-color black -transparent black *.gif

我已经通读了这篇文章,但是对于GIF格式中的颜色如何变成透明色还是有些困惑:http://www.imagemagick.org/Usage/formats/#boolean_trans

例如:

请注意,设置“-transparent-color”不会给GIF图像添加任何透明度,也不会将指定的颜色转换为透明色。所有这个选项所做的只是指定应该放置什么颜色在颜色表中,以表示GIF图像中使用的透明颜色的颜色索引。

如果您想要将特定(精确)颜色变为透明,则使用“-transparent”颜色替换运算符。

但是...

使用+transparent反转匹配的像素,即使所有不匹配的颜色变成透明色。

-opaque运算符与-transparent完全相同,但用当前的-fill颜色设置替换匹配的颜色,而不是透明色。但是,-transparent运算符还确保启用了alpha通道,按照“-alpha set”的方式,并且不需要修改-channel以启用alpha通道处理。

请注意,这并不定义颜色为被用于颜色映射图像格式(如GIF)的“透明色”。要使用-transparent-color进行定义。


你的图片最初是GIF格式还是你通过重命名创建的? - Jigar Pandya
这些图片最初是PNG格式的,但现在我已经全部转换成了GIF格式。 - Matthew Lock
你用哪个命令行来做这件事? - Jigar Pandya
2个回答

9
我想警告您不要使用mogrifymogrify通过覆盖原始图像来转换图像。如果出现任何问题,您的图片将会丢失。
相反,请使用convert。在确保转换正确后,您可以随时删除原始图片。
要使黑色像素透明,请使用以下代码:
convert orig.gif -transparent black transp.gif

对我来说完美无缺。

我的IM版本是:ImageMagick 6.7.8-0 2012-07-04 Q16。你的是什么?

如果它仍然不能为您工作,则您GIF中的“黑色”可能并非真正的黑色,而只是非常深的灰色。 ImageMagick还具有枚举GIF中所有颜色的工具。 在这种情况下,以下两个命令可能会对您有所帮助:

 identify \
   -format "%f: - Uniq Colors: %k - Image transparency channel enabled: %A - Image Depth: %z %c\n" \
    *.gif

并且

 convert \
     *.gif \
    -format "%f :\n%c\n\n" \
     histogram:info:  

黑色可以用名称“black”、RGB值“(0, 0, 0)”以及十六进制值“#000000”来识别。因此纯黑色应该在最后一条命令的输出中显示为类似以下的内容:

 5000: (  0,  0,  0) #000000 black

例如,深灰色可能是:

  100: ( 14, 14, 14,255) #0E0E0E srgba(14,14,14,1)
 2100: (  1,  1,  1,255) #010101 srgba(1,1,1,1)

如果您的GIF启用了透明度,则最后一个命令应该为每种颜色显示一个包含4个值的元组,最后一个值代表Alpha通道。您以前的黑色将出现在输出中,类似于:

 5000: (  0,  0,  0,  0) #00000000 none

请注意,在Windows中,您可能应该指定convert.exe的完整路径,否则将执行不同的命令 ;): CONVERT 卷 /FS:NTFS [/V] [/CvtArea:文件名] [/NoSecurity] [/X] - thdoan
请注意,在Windows中,您可能需要指定convert.exe的完整路径,否则您将执行不同的命令😉:CONVERT 卷 /FS:NTFS [/V] [/CvtArea:文件名] [/NoSecurity] [/X] - undefined
显然,我的“绿屏”并不纯净。根据 https://imagemagick.org/discourse-server/viewtopic.php?t=29615 和 http://www.imagemagick.org/discourse-server/viewtopic.php?t=29224 我必须这样做,但结果出现了严重的伪影: convert mess.gif -fuzz 40% -transparent "#3f793f" disaster7.gif - Shawn Eary

-3

抱歉,您能给我一个使用该功能的示例吗? - Matthew Lock
“-background color” 如何使颜色透明?在您提供的链接中并没有说明。 - Matthew Lock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接