【问题标题】:What's bloating my png?是什么让我的 png 膨胀?
【发布时间】:2014-07-04 15:20:07
【问题描述】:

背景:

我正在努力使一堆 PNG 尽可能小。我正在使用 PngOut、PngCrush 和 OptiPng 等工具。

问题:

我遇到了一个大小为 1434 KB 但只有 230 x 230 像素的文件。当我在 Paint.Net 中打开文件并将其另存为新文件时,新文件只有 77 KB。那里有高达 1.325 MB 的额外垃圾!

目标:

我想了解究竟是什么导致文件膨胀,以及如何在遇到这种膨胀时自动消除这种膨胀,并且无法实现这两个目标。 OptiPng 不会删除元数据。

进展:

我发现exiftool 看起来非常棒,但它没有显示任何疯狂的标签。

RIOT 可以在没有额外数据的情况下生成新版本的图像,但它并没有给我任何关于膨胀是什么的可靠线索——它绝对不是 XMP 信息或评论(我可以选择的唯一元数据)包括)。但是 RIOT 会自动强制删除 IPTC 信息和 EXIF 配置文件——它可能是其中之一吗?

期望的反馈

感谢您对如何以编程方式或自动无损地粉碎和删除 PNG(以及就此而言,其他图像类型)中的元数据的想法。但是,我不想在不了解文件内容的情况下就丢弃文件中的信息。

更新

我找到了Steel Bytes Jpeg & PNG Stripper,它确实从文件中剥离了元数据(并且具有命令行模式),生成了一个 84 KB 的文件,然后我可以对其进行 PNG 优化,但这仍然不能帮助我理解什么我正在删除,我觉得在继续之前我需要了解。我不需要获得许可来优化在面向公众的生产网站中使用的这些图像,但在进行此类更改之前,我确实需要对自己正在做的事情充满信心。

更新 2

我没有注意到 OptiPng 有一个选项 -strip all,它可以去除元数据。这远比 Steel Bytes Stripper 好,因为它有更多选项可用于原始文件的备份处理——保留备份,或将优化后的文件输出到新位置。它还可以同时优化PNG的图像数据,只需要一个工具而不是两个。

附录

这是exiftool -a -G [file.png] 显示的内容:

[ExifTool]      ExifTool Version Number         : 9.60
[File]          File Name                       : file.png
[File]          Directory                       : .
[File]          File Size                       : 1446 kB
[File]          File Modification Date/Time     : 2014:03:31 16:37:20-07:00
[File]          File Access Date/Time           : 2014:05:15 15:47:53-07:00
[File]          File Creation Date/Time         : 2014:05:15 15:47:53-07:00
[File]          File Permissions                : rw-rw-rw-
[File]          File Type                       : PNG
[File]          MIME Type                       : image/png
[PNG]           Image Width                     : 230
[PNG]           Image Height                    : 230
[PNG]           Bit Depth                       : 8
[PNG]           Color Type                      : RGB with Alpha
[PNG]           Compression                     : Deflate/Inflate
[PNG]           Filter                          : Adaptive
[PNG]           Interlace                       : Noninterlaced
[PNG]           Significant Bits                : 8 8 8 8
[PNG]           Pixels Per Unit X               : 2834
[PNG]           Pixels Per Unit Y               : 2834
[PNG]           Pixel Units                     : Meters
[PNG]           Creation Time                   : 3/31/14
[PNG]           Software                        : Adobe Fireworks CS6
[XMP]           XMP Toolkit                     : Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27
[XMP]           Creator Tool                    : Adobe Fireworks CS6 (Macintosh)
[XMP]           Create Date                     : 2012:10:24 19:01:30Z
[XMP]           Modify Date                     : 2014:03:31 23:34:45Z
[XMP]           Format                          : image/png
[Composite]     Image Size                      : 230x230

【问题讨论】:

  • 你能扩展你的“没有疯狂的标签”吗? 230 x 230 x 4 = 206.6Kb,即使使用最糟糕的可想象压缩也无法扩展这么多。 pngcheck 应该是个好工具。最有可能的候选者:单个大型颜色配置文件(gAma、cHRM 或 iCCP)。
  • @Jongware 查看附录——这是 exiftool 为文件中的元数据标签提供的完整输出。我会调查 pngcheck。谢谢!
  • "Exif" 只是 PNG 元数据的一小部分;一种“摘要”,用于可能需要以易于理解的格式提供的软件。 pngcheck 将暴露你 PNG 的原始内容。只有非常几个数据块实际上是必需的。
  • @Jongware 请发表您的建议以使用pngcheck 作为答案,所以我可以接受它——它告诉我额外的数据是什么(“Macromedia Fireworks 私有、辅助、不安全-复制块”)。

标签: png metadata


【解决方案1】:

您的 230x230 像素图像的原始像素数据不应该那么大,即使压缩严重或根本没有压缩。因此,所有这些数据都必须驻留在非标准 PNG 数据块中。

使用pngcheck 找出文件中有哪些块,以及它们有多大。然后使用W3C PNG Specifications 找出特定块的使用情况,如有必要,在其他地方寻找“私有数据”块。

除非您正在处理一个认真非标准块,所有name 指示不是“必需”的,都可能被删除。

【讨论】:

  • 查看我添加到问题中的结果部分。
  • ... 与否。我一定是因为某种原因未能点击提交。我会尽快更新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多