我们有一个图像的存储,其中一些图像是优化的,而有些则不是。
我正在编写“脚本”,它将通过存储中的每个映像并运行优化过程。
我想知道:
我已经尝试运行-quality 85%在同一图像上几次,我没有看到任何质量下降(在第3次运行后,图像的大小没有改变)。然而,我没有在正式文件中找到任何证据。
谢谢!
发布于 2017-08-28 14:14:05
在优化之前,您可以检查质量设置是否已经是75:
identify -format %Q fred.jpg
92然后再进行优化和检查:
convert fred.jpg -quality 75 optimised.jpg
identify -format %Q optimised.jpg
75如果您使用的是bash,这很容易:
q=$(identify -format %Q fred.jpg)
[ $q -ne 75 ] && mogrify -quality 75 fred.jpg另一种将图像标记为优化的方法可能是将文件中的注释设置为“优化”一词,如下所示:
# Set comment
mogrify -set comment "optimised" fred.jpg
# Get comment
identify -format %c fred.jpg
optimised因此,您将测试图像注释中是否包含“优化”一词,如果没有,则对图像进行优化并更改注释以显示相同的内容:
[[ $(identify -format %c fred.jpg) != *optimised* ]] && { echo Optimising fred.jpg; mogrify -set comment "optimised" -quality 75 fred.jpg; }另一种可能是使用扩展文件属性标记文件(使用setfattr),因为您降低了它们的质量,然后使用getfattr检查它们的质量,而不是再次执行它们。
如果您有数百或数千个图像要处理,我建议GNU并行。请在目录中的几个文件的小副本上尝试下面的示例:
parallel '[[ $(identify -format "%c" {}) != *optimised* ]] && { echo Optimising {}; mogrify -set comment "optimised" -quality 75 {}; }' ::: *jpg您会发现,它将在第一次传递时并行处理它们,然后在第二次传递时什么也不做。
如果您有太多的图像,并得到“:太多的args",您可以像这样在stdin上传递文件名,而不是在:::之后进行全局化。
find /some/where -iname \*.jpg -print0 | parallel -0 ...https://stackoverflow.com/questions/45920905
复制相似问题