如何为zopfli压缩的png充气

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

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

happylady0001a 回答:如何为zopfli压缩的png充气

Zopli并未优化已压缩的PNG数据流。它适用于从头开始的解压缩图像。因此,您不能撤消该过程。如果您坚持在优化之前获得完全相同的结果,则可以再次使用原始算法将其解压缩为位图并编码为PNG。

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

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

无需编程;

使用ImageMagick比较文件

无损压缩

命令:

log4jLogger = sc._jvm.org.apache.log4j
log = log4jLogger.LogManager.getLogger(__name__)

输出:

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

0 (0) 的值显示出零差,因此没有损失。

有损压缩:

命令:

0

输出:

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

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

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

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

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

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

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

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

本文链接:https://www.f2er.com/3141013.html

大家都在问