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

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

我有一张压缩的 PNG 图像compressed.png。我可以使用 GIMP 将其转换为未压缩的 PNG decompressed.png(保存为 PNG 并将压缩级别设置为 0)。如何在命令行(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)。
  • 您想将多张 PNG 压缩到 tarball 或 7z 存档中,但又想继续使用 PNG 功能。如果图像足够相似,这可以比单独压缩提供更好的压缩率。
  • 可用作测试 PNG 优化器的基准尺寸。

答案1

ImageMagick 总是会压缩 PNG 文件。使用以下方法可以获得最差的压缩率:

convert -verbose -quality 01 input.png output.png

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

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

pngcrush -force -m 1 -l 0 input.png output.png

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

一些示例尺寸(对于照片 PNG,1600x1200):

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

答案2

引用 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

您可能会收到警告,但这是一个无害的错误。它仍会生成正确的 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

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

49444154081d013400cbff00
11223311223311223311223300
44556644556644556644556600
77889977889977889977889900
aabbccaabbccaabbccaabbcc
7d6f14b9...

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

答案3

我喜欢 netpbm 工具套件,它是根据 UNIX“软件工具”传统设计的:“编写只做一件事的程序,并把它做好”。

你可以按照你的要求做这样的事情:

< in.png pngtopnm > image.pnm
< in.png pngtopnm -alpha > alpha.pnm
<image.pnm pnmtopng -alpha alpha.pnm -compression 0 > out.png
rm image.pnm alpha.pnm

您可能会丢失原始 png 文件中的某些元数据。

由于我们处理 alpha 通道的方式,它看起来有点复杂。

Netpbm 是一个用于处理图形图像的工具包,包括各种不同格式之间的图像转换。该软件包中有超过 220 个独立工具,其中包括 80 多种图形格式的转换器。

相关内容