如何强制Imagemagick以RGB格式输出灰度图像?

时间:2016-09-26 23:15:34

标签: imagemagick png

之前已经问过这个问题,但批准的答案对我不起作用:

Prevent ImageMagick converting to grayscale

ImageMagick: convert keeps changing the colorspace to Gray. How to preserve sRGB colorspace?

示例图片:

convert.exe logo: -type grayscalealpha png32:-|convert - -define png:color-type=6 png32:-|identify -verbose -

迫使我想要的唯一方法是在可见区域的某处绘制颜色。这完成了我想要做的事情:

convert.exe logo: -type grayscalealpha png32:-|convert - -fill #11000000 -draw "rectangle 0,0 0,0" -|identify -verbose -

但是,我不想改变图像。我已经在Win7的以下版本中尝试了上述内容:

ImageMagick 7.0.3-1 Q16 x64 2016-09-20
ImageMagick 6.9.0-10 Q16 x64 2015-02-28

谢谢!

编辑:刚刚意识到我在顶部画了一个清晰的像素,所以图像不应该改变,但它仍然可以工作。尽管如此,仍然感觉像是一个黑客。

更新

在这个工作了几个小时之后,我意识到我的问题并不清楚,因为我不清楚如何存储PNG。

问题:当给ImageMagick一个只有灰色的图像(R = G = B)时,我认为它只用一个通道(灰色)存储图像。

我说"我想"因为识别打印出类型为" GrayscaleAlpha"并且只列出" Gray"和#34; Alpha"渠道。第二个命令的输出将类型列为" PaletteAlpha"并列出红色,绿色,蓝色和Alpha。但是,属性" png:IHDR.color-type"两者都是6。所以我想我可能会误解" Type"和"基本类型"由ImageMagick使用。

(另外,ImageMagick V6和V7似乎对此有不同的行为。例如,v6将alpha通道列为1位,即使它是8位。)

1 个答案:

答案 0 :(得分:1)

我不确定实际的问题/问题是什么。我假设您想要一个Type:GrayscaleColorspace:sRGB的输出图像,您可以从这个问题标题中得到这样的结果:

convert logo: -colorspace gray -define png:-color-type=6 a.png; identify -verbose a.png | grep -E "Type:|Colorspace:"

<强>输出

Type: Grayscale
Colorspace: sRGB

实际上,您使用PNG32:覆盖灰度并将其强制为GrayscaleAlpha:

convert logo: -colorspace gray -define png:-color-type=6 PNG32:a.png; identify -verbose a.png | grep -E "Type:|Colorspace:"

<强>输出

Type: GrayscaleAlpha
Colorspace: sRGB