背景
我正在努力制作尽可能小的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
答案 0 :(得分:3)
230x230像素图像的原始像素数据不应该那么大,即使严重或根本没有压缩也是如此。因此,所有这些数据必须驻留在非标准PNG数据块中。
使用pngcheck
找出文件中的块,以及它们有多大。然后使用W3C PNG Specifications找出特定块的使用情况,并在必要时在其他地方寻找私有数据"块。
除非您正在处理严重非标准块,否则所有name表示不是"必需",都可能被删除。