防止 ImageMagick 转换为灰度
Prevent ImageMagick converting to grayscale
我在 Windows 上使用 ImageMagick-6.9.1 调整 PNG 文件的大小,然后再使用其他工具对其进行处理。源文件是 RGBA,但图像数据是灰度(所有像素的 R、G 和 B 值都相同)。似乎 ImageMagick 正在检测到这一点,并将输出转换为灰度,即使我像这样指定格式和色彩空间也是如此:
convert.exe src.png -format PNG32 -colorspace sRGB -background transparent -resize 830x540 out.png
我已经在几个不同的应用程序(包括 Photoshop)中验证了生成的输出格式是 8 位灰度。这是一个问题,因为后面的处理步骤无法处理灰度格式,并崩溃。向源添加色调可以使过程成功完成,但我们需要能够处理未着色的原件。
如何强制 ImageMagick 输出 RGB 格式的图像,即使它检测到源是灰度图像?
更长的日志:(注意 IHDR 中从 color_type 6 到 color_type 4 的转换)
>.\ImageMagick-6.9.1-2\identify.exe -verbose rgba_src.png
Image: rgba_src.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
Geometry: 884x747+0+0
Resolution: 28.35x28.35
Print size: 31.1817x26.3492
Units: PixelsPerCentimeter
Type: GrayscaleAlpha
Base type: GrayscaleAlpha
Endianess: Undefined
Colorspace: Gray
Depth: 8-bit
Channel depth:
gray: 8-bit
alpha: 8-bit
Channel statistics:
Pixels: 660348
Gray:
min: 0 (0)
max: 255 (1)
mean: 234.605 (0.920019)
standard deviation: 56.1418 (0.220164)
kurtosis: 11.312
skewness: -3.45486
entropy: 0.271262
Alpha:
min: 0 (0)
max: 247 (0.968627)
mean: 23.5875 (0.0924999)
standard deviation: 53.3361 (0.209161)
kurtosis: 2.71621
skewness: -2.02496
entropy: 0.206267
Alpha: graya(255,0) #FFFFFF00
Rendering intent: Perceptual
Gamma: 0.454545
Chromaticity:
red primary: (0.63999,0.33001)
green primary: (0.3,0.6)
blue primary: (0.15,0.05999)
white point: (0.31269,0.32899)
Background color: graya(255,1)
Border color: graya(223,1)
Matte color: graya(189,1)
Transparent color: graya(0,0)
Interlace: None
Intensity: Undefined
Compose: Over
Page geometry: 884x747+0+0
Dispose: Undefined
Iterations: 0
Compression: Zip
Orientation: Undefined
Properties:
date:create: 2015-04-21T11:15:21-07:00
date:modify: 2015-04-21T11:15:28-07:00
png:cHRM: chunk was found (see Chromaticity, above)
png:IHDR.bit-depth-orig: 8
png:IHDR.bit_depth: 8
png:IHDR.color-type-orig: 6
png:IHDR.color_type: 6 (RGBA)
png:IHDR.interlace_method: 0 (Not interlaced)
png:IHDR.width,height: 884, 747
png:pHYs: x_res=2835, y_res=2835, units=1
png:sRGB: intent=0 (Perceptual Intent)
signature: b30c82674d8ed7b50afbfd0eb86d37346164378ae92ef305b0ab61325e741f52
Artifacts:
filename: rgba_src.png
verbose: true
Tainted: False
Filesize: 207KB
Number pixels: 660K
Pixels per second: 34.76MB
User time: 0.016u
Elapsed time: 0:01.018
Version: ImageMagick 6.9.1-2 Q16 x86 2015-04-14 http://www.imagemagick.org
>.\ImageMagick-6.9.1-2\convert.exe rgba_src.png -verbose -format PNG32 -colorspace srgb -background transparent -resize 830x540 out.png
rgba_src.png=>out.png PNG 884x747=>639x540 639x540+0+0 8-bit sRGB 62.8KB 0.406u0:00.107
>.\ImageMagick-6.9.1-2\identify.exe -verbose out.png
Image: out.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
Geometry: 639x540+0+0
Resolution: 28.35x28.35
Print size: 22.5397x19.0476
Units: PixelsPerCentimeter
Type: GrayscaleAlpha
Base type: Grayscale
Endianess: Undefined
Colorspace: Gray
Depth: 8-bit
Channel depth:
gray: 8-bit
alpha: 8-bit
Channel statistics:
Pixels: 345060
Gray:
min: 0 (0)
max: 255 (1)
mean: 34.1198 (0.133803)
standard deviation: 77.4794 (0.303841)
kurtosis: 1.68768
skewness: 1.88484
entropy: 0.220331
Alpha:
min: 0 (0)
max: 237 (0.929412)
mean: 23.5888 (0.092505)
standard deviation: 53.2132 (0.208679)
kurtosis: 2.60073
skewness: -2.00769
entropy: 0.208417
Alpha: graya(0,0) #00000000
Rendering intent: Undefined
Gamma: 0.45455
Chromaticity:
red primary: (0.63999,0.33001)
green primary: (0.3,0.6)
blue primary: (0.15,0.05999)
white point: (0.31269,0.32899)
Background color: graya(0,1)
Border color: graya(223,1)
Matte color: graya(189,1)
Transparent color: graya(0,0)
Interlace: None
Intensity: Undefined
Compose: Over
Page geometry: 639x540+0+0
Dispose: Undefined
Iterations: 0
Compression: Zip
Orientation: Undefined
Properties:
date:create: 2015-04-21T11:41:45-07:00
date:modify: 2015-04-21T12:24:05-07:00
png:bKGD: chunk was found (see Background color, above)
png:cHRM: chunk was found (see Chromaticity, above)
png:gAMA: gamma=0.45455 (See Gamma, above)
png:IHDR.bit-depth-orig: 8
png:IHDR.bit_depth: 8
png:IHDR.color-type-orig: 4
png:IHDR.color_type: 4 (GrayAlpha)
png:IHDR.interlace_method: 0 (Not interlaced)
png:IHDR.width,height: 639, 540
png:pHYs: x_res=2835, y_res=2835, units=1
png:text: 2 tEXt/zTXt/iTXt chunks were found
png:tIME: 2015-04-21T11:15:28Z
signature: 3d4b5050f182dac93631d9119d76324d43f9a659ea035523a8e359b7434bdb5b
Artifacts:
filename: out.png
verbose: true
Tainted: False
Filesize: 62.8KB
Number pixels: 345K
Pixels per second: 57.51MB
User time: 0.000u
Elapsed time: 0:01.006
Version: ImageMagick 6.9.1-2 Q16 x86 2015-04-14 http://www.imagemagick.org
您可以尝试使用 -define
强制输出图像类型为 PNG Color-Type 6
,如下所示:
convert input.png ... -define png:color-type=6 output.png
我在 Windows 上使用 ImageMagick-6.9.1 调整 PNG 文件的大小,然后再使用其他工具对其进行处理。源文件是 RGBA,但图像数据是灰度(所有像素的 R、G 和 B 值都相同)。似乎 ImageMagick 正在检测到这一点,并将输出转换为灰度,即使我像这样指定格式和色彩空间也是如此:
convert.exe src.png -format PNG32 -colorspace sRGB -background transparent -resize 830x540 out.png
我已经在几个不同的应用程序(包括 Photoshop)中验证了生成的输出格式是 8 位灰度。这是一个问题,因为后面的处理步骤无法处理灰度格式,并崩溃。向源添加色调可以使过程成功完成,但我们需要能够处理未着色的原件。
如何强制 ImageMagick 输出 RGB 格式的图像,即使它检测到源是灰度图像?
更长的日志:(注意 IHDR 中从 color_type 6 到 color_type 4 的转换)
>.\ImageMagick-6.9.1-2\identify.exe -verbose rgba_src.png
Image: rgba_src.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
Geometry: 884x747+0+0
Resolution: 28.35x28.35
Print size: 31.1817x26.3492
Units: PixelsPerCentimeter
Type: GrayscaleAlpha
Base type: GrayscaleAlpha
Endianess: Undefined
Colorspace: Gray
Depth: 8-bit
Channel depth:
gray: 8-bit
alpha: 8-bit
Channel statistics:
Pixels: 660348
Gray:
min: 0 (0)
max: 255 (1)
mean: 234.605 (0.920019)
standard deviation: 56.1418 (0.220164)
kurtosis: 11.312
skewness: -3.45486
entropy: 0.271262
Alpha:
min: 0 (0)
max: 247 (0.968627)
mean: 23.5875 (0.0924999)
standard deviation: 53.3361 (0.209161)
kurtosis: 2.71621
skewness: -2.02496
entropy: 0.206267
Alpha: graya(255,0) #FFFFFF00
Rendering intent: Perceptual
Gamma: 0.454545
Chromaticity:
red primary: (0.63999,0.33001)
green primary: (0.3,0.6)
blue primary: (0.15,0.05999)
white point: (0.31269,0.32899)
Background color: graya(255,1)
Border color: graya(223,1)
Matte color: graya(189,1)
Transparent color: graya(0,0)
Interlace: None
Intensity: Undefined
Compose: Over
Page geometry: 884x747+0+0
Dispose: Undefined
Iterations: 0
Compression: Zip
Orientation: Undefined
Properties:
date:create: 2015-04-21T11:15:21-07:00
date:modify: 2015-04-21T11:15:28-07:00
png:cHRM: chunk was found (see Chromaticity, above)
png:IHDR.bit-depth-orig: 8
png:IHDR.bit_depth: 8
png:IHDR.color-type-orig: 6
png:IHDR.color_type: 6 (RGBA)
png:IHDR.interlace_method: 0 (Not interlaced)
png:IHDR.width,height: 884, 747
png:pHYs: x_res=2835, y_res=2835, units=1
png:sRGB: intent=0 (Perceptual Intent)
signature: b30c82674d8ed7b50afbfd0eb86d37346164378ae92ef305b0ab61325e741f52
Artifacts:
filename: rgba_src.png
verbose: true
Tainted: False
Filesize: 207KB
Number pixels: 660K
Pixels per second: 34.76MB
User time: 0.016u
Elapsed time: 0:01.018
Version: ImageMagick 6.9.1-2 Q16 x86 2015-04-14 http://www.imagemagick.org
>.\ImageMagick-6.9.1-2\convert.exe rgba_src.png -verbose -format PNG32 -colorspace srgb -background transparent -resize 830x540 out.png
rgba_src.png=>out.png PNG 884x747=>639x540 639x540+0+0 8-bit sRGB 62.8KB 0.406u0:00.107
>.\ImageMagick-6.9.1-2\identify.exe -verbose out.png
Image: out.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
Geometry: 639x540+0+0
Resolution: 28.35x28.35
Print size: 22.5397x19.0476
Units: PixelsPerCentimeter
Type: GrayscaleAlpha
Base type: Grayscale
Endianess: Undefined
Colorspace: Gray
Depth: 8-bit
Channel depth:
gray: 8-bit
alpha: 8-bit
Channel statistics:
Pixels: 345060
Gray:
min: 0 (0)
max: 255 (1)
mean: 34.1198 (0.133803)
standard deviation: 77.4794 (0.303841)
kurtosis: 1.68768
skewness: 1.88484
entropy: 0.220331
Alpha:
min: 0 (0)
max: 237 (0.929412)
mean: 23.5888 (0.092505)
standard deviation: 53.2132 (0.208679)
kurtosis: 2.60073
skewness: -2.00769
entropy: 0.208417
Alpha: graya(0,0) #00000000
Rendering intent: Undefined
Gamma: 0.45455
Chromaticity:
red primary: (0.63999,0.33001)
green primary: (0.3,0.6)
blue primary: (0.15,0.05999)
white point: (0.31269,0.32899)
Background color: graya(0,1)
Border color: graya(223,1)
Matte color: graya(189,1)
Transparent color: graya(0,0)
Interlace: None
Intensity: Undefined
Compose: Over
Page geometry: 639x540+0+0
Dispose: Undefined
Iterations: 0
Compression: Zip
Orientation: Undefined
Properties:
date:create: 2015-04-21T11:41:45-07:00
date:modify: 2015-04-21T12:24:05-07:00
png:bKGD: chunk was found (see Background color, above)
png:cHRM: chunk was found (see Chromaticity, above)
png:gAMA: gamma=0.45455 (See Gamma, above)
png:IHDR.bit-depth-orig: 8
png:IHDR.bit_depth: 8
png:IHDR.color-type-orig: 4
png:IHDR.color_type: 4 (GrayAlpha)
png:IHDR.interlace_method: 0 (Not interlaced)
png:IHDR.width,height: 639, 540
png:pHYs: x_res=2835, y_res=2835, units=1
png:text: 2 tEXt/zTXt/iTXt chunks were found
png:tIME: 2015-04-21T11:15:28Z
signature: 3d4b5050f182dac93631d9119d76324d43f9a659ea035523a8e359b7434bdb5b
Artifacts:
filename: out.png
verbose: true
Tainted: False
Filesize: 62.8KB
Number pixels: 345K
Pixels per second: 57.51MB
User time: 0.000u
Elapsed time: 0:01.006
Version: ImageMagick 6.9.1-2 Q16 x86 2015-04-14 http://www.imagemagick.org
您可以尝试使用 -define
强制输出图像类型为 PNG Color-Type 6
,如下所示:
convert input.png ... -define png:color-type=6 output.png