将具有 4 个波段的 PNG 转换为具有 1 个波段和颜色表的任何格式

Posted

技术标签:

【中文标题】将具有 4 个波段的 PNG 转换为具有 1 个波段和颜色表的任何格式【英文标题】:Convert a PNG with 4 bands to any format with 1 band and a color table 【发布时间】:2014-12-24 16:35:24 【问题描述】:

我有一个带有 4 个波段的 PNG,但我只想要一个带有颜色表的波段。我尝试将它保存为 MS Paint 中的 256 色位图,它可以工作。

但我需要自动完成。我试过 ImageMagick:convert E8.png E8256.bmp,但没用。

原来的图片是这样的:

ImageMagick identify:

E8.png PNG 8250x4090 8250x4090+0+0 8-bit sRGB 231KB 0.000u 0:00.000

gdalinfo:

Driver: PNG/Portable Network Graphics
Files: E8.png
Size is 8250, 4090
Coordinate System is `'
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0, 4090.0)
Upper Right ( 8250.0,    0.0)
Lower Right ( 8250.0, 4090.0)
Center      ( 4125.0, 2045.0)
Band 1 Block=8250x1 Type=Byte, ColorInterp=Red
  Mask Flags: PER_DATASET ALPHA
Band 2 Block=8250x1 Type=Byte, ColorInterp=Green
  Mask Flags: PER_DATASET ALPHA
Band 3 Block=8250x1 Type=Byte, ColorInterp=Blue
  Mask Flags: PER_DATASET ALPHA
Band 4 Block=8250x1 Type=Byte, ColorInterp=Alpha

我想要一张带有一个波段和一个颜色表的图片,所以我用 MS Paint 打开 E8.png 并将其保存为 256 色位图。结果:

ImageMagick identify:

E8256.bmp BMP3 8250x4090 8250x4090+0+0 8-bit sRGB 256c 33.75MB 0.265u 0:00.138

gdalinfo:

Driver: BMP/MS Windows Device Independent Bitmap
Files: E8256.bmp
Size is 8250, 4090
Coordinate System is `'
Origin = (-1890.000000000000000,1890.000000000000000)
Pixel Size = (3780.000000000000000,-3780.000000000000000)
Corner Coordinates:
Upper Left  (   -1890.000,    1890.000)
Lower Left  (   -1890.000,-15458310.000)
Upper Right (31183110.000,    1890.000)
Lower Right (31183110.000,-15458310.000)
Center      (15590610.000,-7728210.000)
Band 1 Block=8250x1 Type=Byte, ColorInterp=Palette
  Color Table (RGB with 256 entries)
    0: 0,0,0,255
    1: 128,0,0,255
    ...
    255: 255,255,255,255

但是当我尝试convert E8.png E8imagemagick.bmp 我得到:

ImageMagick identify:

 E8imagemagick.bmp BMP 8250x4090 8250x4090+0+0 8-bit sRGB 135MB 0.406u 0:00.409

gdalinfo:

Driver: BMP/MS Windows Device Independent Bitmap
Files: E8imagemagick.bmp
Size is 8250, 4090
Coordinate System is `'
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0, 4090.0)
Upper Right ( 8250.0,    0.0)
Lower Right ( 8250.0, 4090.0)
Center      ( 4125.0, 2045.0)
Band 1 Block=8250x1 Type=Byte, ColorInterp=Red
Band 2 Block=8250x1 Type=Byte, ColorInterp=Green
Band 3 Block=8250x1 Type=Byte, ColorInterp=Blue

编辑:这里(uploaded.net -- Dropbox)是原始PNG,这里(uploaded.net -- dropbox)是我使用MS Paint获得的BMP。

【问题讨论】:

很难说没有你的形象,但试试 ImageMagick convert input.png -separate -type palette out%d.bmp 谢谢我在问题末尾添加了 2 张图片。 恶意软件垃圾的可怕链接是什么? 嗯,它只是一个 png 和一个 bmp at upload.net 吗?我还添加了保管箱链接。很抱歉有任何混淆。 您的意思是 gdalinfo 所谓的“乐队”。我不了解所有其他图像处理软件,但 imagemagick 将其称为通道。 gdal 是 GIS 工具的集合,因此您可能是对的。 【参考方案1】:

也许这个命令:

 convert E8.png -colors 256 E8-256colors.bmp

让你更接近你想要的?不过,这个位图有点大……(129 MB)。所以这个应该更小:

 convert E8.png -type palette -colors 256 E8-palette-256colors.bmp

最后一个只有 16 MByte。

您的标题说“任何格式”,所以 PNG 可能也符合要求吗?它产生的输出要小得多:

 convert E8.png -type palette -colors 256 E8-palette-256colors.png

(现在大小只有 122 kByte。)

您的原始图像仅包含 6 种颜色,您的新输出也是如此:

 identify -format "%f: %k\\n" E8.png E8-palette-256colors.png
   E8.png: 6
   E8-palette-256colors.png: 6

或者

 identify E8.png E8-palette-256colors.png
   E8.png PNG 8250x4090 8250x4090+0+0 8-bit sRGB 231KB 0.000u 0:00.000
   E8-palette-256colors.png[1] PNG 8250x4090 8250x4090+0+0 8-bit sRGB 6c 125KB 0.000u 0:00.000

【讨论】:

谢谢,您拯救了这一天!第一个不起作用,它又有 3 个乐队,但第二个和第三个都很好,我用第三个 :)【参考方案2】:

不确定你到底想要什么……

convert E8256.bmp -separate -type palette PNG8:out%d.png

【讨论】:

你说你有一个 4 波段的 PNG,但你分享的图像是一个 3 波段的 BMP?

以上是关于将具有 4 个波段的 PNG 转换为具有 1 个波段和颜色表的任何格式的主要内容,如果未能解决你的问题,请参考以下文章

将 PNG 转换为具有透明度的 webm 视频

ImageMagick 将具有多页的 pdf 转换为高质量的 PNG

将位图 (bmp) 转换为具有透明度的 png (Windows c++)

为啥从 gnuplot postscript 输出转换的 .png 具有透明背景?

回形针 - 将 SVG 转换为 PNG 时保持透明度

在单个波段中具有多行时,数据溢出会拉伸一行