【问题标题】:Optimize an image once and avoid doing it again优化图像一次,避免再次优化
【发布时间】:2018-09-09 04:59:34
【问题描述】:

我有一个大型图像存储库,主要是 JPEG,我想使用 ImageMagick 之类的库或 jpegtran 之类的 Linux CLI 工具(如 JPG File Size Optimization - PHP, ImageMagick, & Google's Page Speed 中所述)对其进行优化,但我不想拥有跟踪哪些已经优化,我不想以后再重新优化每一个。是否有某种标志可以轻松添加到文件中,以便于检测和跳过优化?最好是在备份到其他文件系统时与文件保持一致?

例如:一小段 exif 数据、一个文件系统标志、在文件末尾添加的一些无害的空字节、一个已经足够智能的工具可以自己执行此操作,等等。

【问题讨论】:

  • 在 Imagemagick 中,您可以为图像添加评论。 `转换图像 - 设置注释“优化”图像。但即使这样做也会改变图像,如果你再次保存为 jpg,因为每次读取和写入它都会经历有损压缩。您可能无需使用 EXIFTOOL 和其他一些优化工具(例如 jpegtran)读取和写入图像数据就可以做您想做的事情。
  • 谢谢,进一步了解 exiftool 我确实看到它支持对 PNG 图像和 JPG 进行读/写,因此这可能是最面向未来的解决方案,使用 exif 作为存储介质用于“已压缩”标志。

标签: imagemagick compression jpeg


【解决方案1】:

您可以使用 “扩展属性”,它们是元数据并存储在文件系统中。用xattr读写它们:

# Read existing attributes
xattr -l image.png

# Set an optimised flag of your own invention/description
xattr -w optimised true image.png

# Read attributes again
xattr -l image.png
optimised: true

可以在长列表中检测到扩展属性的存在 - 它是权限后的@ 符号:

-rw-r--r--@ 1 mark  staff  275 29 May 07:54 image.png

正如您在 cmets 中提到的,确保您使用的任何备份程序在将其作为一种策略之前都尊重这些属性。 FAT-32 文件系统在这类事情上是出了名的差——尽管tar 文件或类似文件可能会在往返 Windows 的旅程中幸存下来。

作为替代方案,只需在 EXIF 标头中设置注释 - 我已经在 this 相关答案中介绍过...

【讨论】:

  • 谢谢!我使用了 exiftool,但如果我已经知道 xattr,我可能会使用它。
【解决方案2】:

要背负 Mark Setchell 的回答,如果您使用 xattr,您很可能需要使用 trusted namespace,否则您可能会收到“不支持操作”错误。我能找到的大多数文档都提到了“setfattr”,但是,同样的受信任命名空间规则也适用于“xattr”。

例如,使用用户命名空间:

# Set an optimised flag of your own invention/description
xattr -w user.optimised true image.png

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 2010-09-13
    相关资源
    最近更新 更多