如何为zopfli压缩的png充气

问题描述 投票:0回答:2

我使用ImageOptim压缩了png文件。我使用Zopfli作为压缩方法。 ImageOptim保证它是无损压缩。确实我的png大小减小了,但是如何将其解压缩回原始大小?

我读过Zopfli压缩,它说它使用deflate算法压缩png文件。如何在Java中将压缩的png膨胀/解压缩回原始文件?

java compression image-compression lossless-compression zopfli
2个回答
0
投票

Zopfli不是压缩算法;使用相同的DEFLATE算法,它会更努力,更聪明地实现更好的压缩。因此,您可以/不能尝试撤消结果。如果您坚持在算法优化之前获得完全相同的结果,则可以再次使用原始算法将其解压缩为位图并编码为PNG。

多一点解释:简而言之,您需要压缩字符串“ 1111111111”。第一个最大缓冲区大小为5字节的无损压缩函数将其输出为“ 5x1,5x1”(5乘1,然后5乘1),然后是该算法的第二个实现,该缓冲区最大输出为10字节“ 10x1”看起来更好。这两种结果当然都是无损的,但是大多数情况下您不能从“ 10x1”转到“ 5x1,5x1”。

要确保压缩确实是无损的,您可以简单地解压缩并比较未压缩的版本。根据您的情况,将原始PNG和优化的PNG解压缩为位图并比较位图。

无需编程;

使用ImageMagick比较文件

无损压缩:

命令:

magick compare -metric mae anydesk00000.png anydesk00000.png diff.png`

输出:

0 (0)

0的值表示没有损失。

压缩压缩:

命令:

magick compare -metric mae anydesk00000.png anydesk00000.jpg diff.png

输出:

151.861 (0.00231724)

0
投票

您不需要解压缩它,它应该是一个可以直接使用的png文件,除非您做错了什么。该映像不会更改,只会更改磁盘中的二进制表示形式。

无法进入原始文件,您可以重新压缩它,但是您需要知道用于创建它的库以及用于创建它的压缩级别和其他设置(过滤器,放气策略,滑动窗口大小,...大多数png文件都是使用默认值创建的,但不是全部)。通常不需要,但是如果您需要保留原始文件(例如,匹配md5校验和),则不应使用zopfli。

编辑:有两种常见的无损压缩定义:

  1. 能够重新创建输入文件的逐位精确副本。
  2. 能够不更改而恢复输入文件的内容。输入文件的精确复制不是目标。

常规文件压缩使用第一个定义。如果压缩.jpg文件,则可以找回完全相同的.jpg文件。

特定于域的无损压缩通常使用第二种定义,如果您从JPEG创建PNG文件,则将无法恢复原始JPEG文件(即使您知道原始文件是JPEG图像),但是原始文件JPEG和PNG将具有完全相同的图像数据,但每个人都称PNG无损。

[如果您考虑使用Zopfli来减小PNG文件大小的程序作为“ PNG文件压缩器”,则使用一般定义将不会造成损失,但是将使用特定于域的定义。如果程序声称要无损压缩图像而不是文件,则没有歧义,这就是第二个定义。

© www.soinside.com 2019 - 2024. All rights reserved.