从命令行将图像转换为未压缩的 PNG

Mec*_*ail 6 linux png command-line images conversion

我有一个压缩的 PNG 图像compressed.png。我可以decompressed.png使用 GIMP(另存为 PNG 并将压缩级别设置为 0)将其转换为未压缩的 PNG 。如何在命令行(Linux)上完成此操作?

我记得过去使用Imagemagick的这样做过convert,但我忘记了如何。我尝试了一些我认为应该根据文档工作的东西:

  • convert compressed.png -compress None decompressed.png
  • convert compressed.png +compress decompressed.png
  • convert compressed.png -quality 0 decompressed.png
  • convert compressed.png -quality 00 decompressed.png

刚刚写了一个普通的压缩PNG。

旁白:你为什么想要一个未压缩的 PNG?

某些情况下:

  • 您希望支持图像数据的高效(二进制)差异,同时仍使用 PNG 格式的其他功能(而不是存储原始图像数据或 BMP)。
  • 您想在 tarball 或 7z 存档中将多个 PNG 压缩在一起,但又想继续使用 PNG 功能。如果图像足够相似,这可以提供比单独压缩更好的压缩率。
  • 可用作测试 PNG 优化器的基线大小。

MV.*_*MV. 6

ImageMagick 将始终压缩 PNG 文件。最糟糕的压缩方式是使用:

convert -verbose -quality 01 input.png output.png
Run Code Online (Sandbox Code Playgroud)

但这取决于图像内容(0 将使用霍夫曼压缩,有时压缩效果比 zlib 更好)。

您可以尝试其他工具,例如 pngcrush ( http://pmt.sourceforge.net/pngcrush/ ) 来禁用压缩:

pngcrush -force -m 1 -l 0 input.png output.png
Run Code Online (Sandbox Code Playgroud)

它创建的文件大小与 GIMP 使用压缩级别 0 时创建的文件大小相同(多或少几个字节)。

一些示例尺寸(对于摄影 PNG,1600x1200):

  • 原始:1,693,848 字节。
  • IM 后:2,435,983 字节。
  • GIMP 之后:5,770,587 字节。
  • pngcrush 之后:5,802,254 字节。


Mey*_*yer 5

引用 ImageMagick 文档:并非所有压缩级别、策略和 PNG 过滤器类型的组合都可以使用 -quality 选项获得。为了更精确的控制,您可以使用 -define 选项。

例如,此命令应创建一个未压缩的 (RGB) PNG 文件:

convert INFILE \
-define png:compression-level=0 \
-define png:compression-filter=0 \
-define png:color-type=2 \
OUTFILE.png
Run Code Online (Sandbox Code Playgroud)

您可能会收到警告,这是一个无害的错误。它仍然会产生正确的 png。http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=20257

示例图像:

112233 112233 112233 112233
445566 445566 445566 445566
778899 778899 778899 778899
aabbcc aabbcc aabbcc aabbcc
Run Code Online (Sandbox Code Playgroud)

使用 IM 创建的 PNG 文件的 IDAT 块:

49444154081d013400cbff00
11223311223311223311223300
44556644556644556644556600
77889977889977889977889900
aabbccaabbccaabbccaabbcc
7d6f14b9...
Run Code Online (Sandbox Code Playgroud)

但是,对于某些情况(例如组压缩),测试开销较小的格式可能是值得的,例如 TARGA (.tga)。