使用 imagemagick 将 JPG 图像从灰度转换为 RGB

Convert JPG image from grayscale to RGB using imagemagick

我正在尝试使用 imagemagick command-line tools.

将灰度图像转换为 RGB

它适用于 PNG 图像,使用:

convert image.png -define png:color-type=2 result.png

(摘自对 "How to convert gray scale png image to RGB from comand line using image magick" 的回答)

虽然使用 identify -format %r result.png 检查仍然 return DirectClass Gray,但我可以看到它使用 gdalinfo 有效,因为现在有 3 列出的波段/频道:

gdalinfo [转PNG成功]:

Driver: PNG/Portable Network Graphics
Files: result.png
Size is 567, 479
Coordinate System is `'
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,  479.0)
Upper Right (  567.0,    0.0)
Lower Right (  567.0,  479.0)
Center      (  283.5,  239.5)
Band 1 Block=567x1 Type=Byte, ColorInterp=Red
Band 2 Block=567x1 Type=Byte, ColorInterp=Green
Band 3 Block=567x1 Type=Byte, ColorInterp=Blue

但是,-define option 似乎只适用于 PNG 图像。

我的问题:JPG图片如何实现同样的效果?

当我对 JPG 尝试上述命令时,它不起作用:

convert image.jpg -define jpg:color-type=2 result.jpg

gdalinfo [未成功转换JPG]:

Driver: JPEG/JPEG JFIF
Files: result.jpg
Size is 1500, 1061
Coordinate System is `'
Metadata:
  EXIF_ColorSpace=1
  EXIF_PixelYDimension=2480
  ...
  EXIF_YCbCrPositioning=1
  EXIF_YResolution=(300)
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0, 1061.0)
Upper Right ( 1500.0,    0.0)
Lower Right ( 1500.0, 1061.0)
Center      (  750.0,  530.5)
Band 1 Block=1500x1 Type=Byte, ColorInterp=Gray
  Overviews: 750x531, 375x266, 188x133
  Image Structure Metadata:
    COMPRESSION=JPEG

PNG 颜色类型不适用于 JPEG 图像,因此您不能使用相同的技术。尝试将色彩空间强制为 sRGB,and/or 将类型设置为 TrueColour,这样您就不会得到调色图像:

convert input.jpg -colorspace sRGB -type truecolor result.jpg

image-magick 拒绝处理png,但ffmpeg不会。

ffmpeg -loglevel warning -i ${file} -sws_flags "lanczos+accurate_rnd+full_chroma_int+full_chroma_inp+bitexact" -y -pix_fmt rgb8 test.png

报告的结束文件深度 8 位。 (对于 rgba → rgb 也很有用。)