ImageMagick:转换会将颜色空间更改为灰色。如何保留sRGB颜色空间?

23

我有一个批处理脚本,用于将我的PNG-24(带透明度)图像转换为50%和25%的大小(用于移动开发)。通常这些图像中有颜色,但现在我正在尝试转换一张没有颜色的图像,但是ImageMagick会将颜色空间配置文件更改为“Gray”,这会破坏我在使用的3D引擎(Unity)中的图像。

我已经尝试强制它使用TrueColor类型,颜色空间sRGB以及sRGB.icc文件配置文件(包含在OSX中),但它似乎并不关心。它仍然将其更改为Gray。

> convert old.png -profile srgb.icc -colorspace sRGB -type TrueColor new.png
> identify *.png
  old.png PNG 140x140 140x140+0+0 8-bit sRGB 3.68KB 0.000u 0:00.000
  new.png PNG 140x140 140x140+0+0 8-bit sRGB 256c 2.33KB 0.000u 0:00.000

ImageMagick仍将其识别为8位sRGB图像,但在其后加上"256c",我认为这意味着它已将其减少到256种颜色,而我也不想要。当我在OSX的Preview.app中查看图像时,它显示使用了Gray色彩配置文件。该图像的外观也明显有很大变化。

我正在使用以下图片:https://dl.dropbox.com/u/59304/old.png

这里有一个重复的问题,ImageMagick Reduces Colorspace to Gray,但是答案对我无效,而且我没有足够的声望来评论他的答案,不幸的是。我想我的情况与他不同,因为我使用的是PNG而不是JPG。

Version: ImageMagick 6.8.0-7 2013-01-02 Q16 http://www.imagemagick.org
Features:  OpenCL 

编辑- 在阅读了其中一个答案中指定的ImageMagick论坛后,看起来只需要在输出文件前面加上PNG32:或PNG24:就可以解决问题。


我会去看看Imagemagick论坛;这里有一篇帖子可能会有所帮助。 http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=22654&p=94555&hilit=sRGB+png#p94555 我对png图像没有做任何特殊处理,但从我所看到的来看,有很多不同类型的png。 - Bonzo
2个回答

14

将灰度PNG保存为RGB格式的正确方法是使用PNG24:result.png

输入:

输入图像描述

convert lena.png -colorspace gray PNG24:lenag_rgb.png

identify -verbose lenag_rgb.png

Image: lenag_rgb.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: DirectClass
  Geometry: 256x256+0+0
  Units: Undefined
  Colorspace: sRGB
  Type: Grayscale
因此,如上所示,颜色空间为RGB,而类型为灰度。

输入图像描述

对于其他图像格式,如JPG和TIFF,请使用-define colorspace:auto-grayscale=false以及-type truecolor


4
你可以使用-set colorspace:auto-grayscale off参数来禁用RGB通道自动转换为单个灰度通道的功能。
这个解决方案在你提问时还不可用,但它是在2015年版本6.9.2中引入的:
2015-07-25 6.9.2-0 Dirk Lemstra 添加了-set colorspace:auto-grayscale=false选项,它将防止支持灰度的编码器自动转换为灰度。

3
这是错误的语法。正确的语法应该是 -define colorspace:auto-grayscale=false 或者 -set colorspace:auto-grayscale false,并且加上 -type tricolor。但是这些语法不适用于 PNG 格式。PNG 格式的正确语法是使用 PNG24:output.png - fmw42
啊,真烦人...我一直在处理TIFF文件,却没有仔细检查它是否也适用于PNG。Imagemagick和它的不一致性...不过这个语法在TIFF上运行得非常完美。 - Stacker
正确。那种语法对大多数其他格式(例如JPG、TIFF等)都能正常工作。PNG有点例外。 - fmw42
在我之前对语法的评论中,应该写成-type truecolor 而不是 -type tricolor。我的拼写检查器一直试图更改我打的内容,而我没有及时注意到。Stacker 在使用 -define colorspace:auto-grayscale=false 对于其他格式是正确的。Dirk Lemstra 打错了语法。请参见 https://imagemagick.org/script/command-line-options.php#define。 - fmw42
1
哇,这个答案真难找。我在文档中找不到任何关于这个语法的提及。有人能详细说明一下我怎么知道需要在输出文件名前添加前缀吗? - TalL

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