【问题标题】:ImageMagick: convert keeps changing the colorspace to Gray. How to preserve sRGB colorspace?ImageMagick: convert 不断将色彩空间更改为灰色。如何保留 sRGB 色彩空间?
【发布时间】:2013-01-19 17:48:41
【问题描述】:

我有一个批处理脚本,可以将我的 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 

edit- 在阅读了答案之一中指定的 ImageMagick 论坛后,看起来只是在输出文件中添加 PNG32: 或 PNG24: 即可解决问题。

【问题讨论】:

  • 我会查看 Imagemagick 论坛;这里有一个帖子可能会有所帮助。 imagemagick.org/discourse-server/… 我对 png 图像没有做任何特别的事情,但据我所知,有很多不同类型的 png。

标签: imagemagick color-space


【解决方案1】:

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

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

2015-07-25 6.9.2-0 德克·莱姆斯特拉
添加了-set colorspace:auto-grayscale=false,这将阻止在支持灰度的编码器中自动转换为灰度。

【讨论】:

  • 这是错误的语法。它是 -define colorspace:auto-grayscale=false-set colorspace:auto-grayscale false 以及 -type tricolor。但这些不适用于PNG。 PNG的正确方法是使用PNG24:output.png
  • Ahhh ffs... 我正在处理 TIFF 文件,并没有仔细检查这是否也适用于 PNG。 Imagemagick 和它的不一致......虽然语法与 TIFF 完美配合
  • 正确。该语法适用于大多数其他格式(例如 JPG、TIFF 等)。 PNG 是一种例外。
  • 在我上面关于语法的评论中,应该说-type truecolor而不是-type tricolor。我的拼写检查器一直在尝试更改我输入的内容,但我没有及时注意到。 Stacker 对使用 -define colorspace:auto-grayscale=false 的其他格式是正确的。 Dirk Lemstra 打错了语法。见imagemagick.org/script/command-line-options.php#define
  • 哇,这个答案很难找到。我在文档中找不到任何提及此语法的内容。谁能详细说明我应该如何知道我需要在输出文件名中添加前缀?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多