18

我有一个批处理脚本,可以将我的 PNG-24(带透明度)图像转换为 50% 和 25% 大小(用于移动开发)。通常这些图像中有颜色,但现在我正在尝试转换没有颜色的图像,并且 ImageMagick 不断将颜色空间配置文件更改为“灰色”,这在我正在使用的 3d 引擎(Unity)中弄乱了我的图像。

我曾尝试强制它使用 TrueColor 类型、色彩空间 sRGB 和 sRGB.icc 配置文件(OSX 中包含的配置文件),但它似乎并不在意。它仍然将其更改为灰色。

> 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 中查看图像时,它说它使用的是灰色颜色配置文件。该图像在视觉上看起来也有很大不同。

这是我正在使用的图像: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: 即可解决问题。

4

2 回答 2

11

将灰度 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.

于 2019-03-17T21:54:37.483 回答
3

您可以通过-set colorspace:auto-grayscale offconvert 来禁用 RGB 通道到单个灰度通道的自动转换。

在您提出问题时,此解决方案尚不可用,但在 2015 年的 6.9.2 版本中推出:

2015-07-25 6.9.2-0 Dirk Lemstra <dirk@lem.....org>
添加-set colorspace:auto-grayscale=false了这将防止在支持灰度的编码器中自动转换为灰度。

于 2019-03-17T21:28:10.717 回答