一次优化图像,避免再次优化

Optimize an image once and avoid doing it again

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

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

您可以使用 "extended attributes",它们是元数据并存储在文件系统中。用 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

正如您在评论中提到的那样,确保您使用的任何备份程序在将其作为一种策略之前都遵守这些属性。 FAT-32 文件系统在这种事情上是出了名的差 - 虽然 tar 文件或类似文件可能在 Windows-land 和返回的旅行中幸存下来。

作为替代方案,只需在 EXIF header 中设置注释 - 我已经在 this 相关答案中介绍了这一点...

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

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

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