Imagemagick 避免图像的双重优化
我们有一个图像存储库,其中有些图像经过优化,有些则没有 我正在编写“脚本”,它将通过存储中的每个图像运行优化过程 我想知道:Imagemagick 避免图像的双重优化,imagemagick,Imagemagick,我们有一个图像存储库,其中有些图像经过优化,有些则没有 我正在编写“脚本”,它将通过存储中的每个图像运行优化过程 我想知道: 是否有办法检查图像是否已优化 如果图像经过几次85%的质量优化,我会失去质量吗 我试过几次在同一张图片上运行-质量85%,我看不到任何质量损失(第3次运行后,图片的大小没有改变)。然而,我没有在官方文件中找到证据 谢谢 在优化之前,您可以检查质量设置是否已为75: identify -format %Q fred.jpg 92 然后优化并再次检查: convert fr
谢谢 在优化之前,您可以检查质量设置是否已为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; }
如果你有成百上千的图像需要处理,我建议gnupallel。请在目录中一些文件的小副本上尝试以下示例:
parallel '[[ $(identify -format "%c" {}) != *optimised* ]] && { echo Optimising {}; mogrify -set comment "optimised" -quality 75 {}; }' ::: *jpg
您会发现,它将在第一个过程中并行处理所有这些数据,然后在第二个过程中什么也不做
如果图像太多,并且出现“错误:参数太多”,则可以像这样在stdin
中传递文件名,而不是在:
之后全局搜索:
find /some/where -iname \*.jpg -print0 | parallel -0 ...
使用更强烈的色度子采样(如果尚未达到最大值)比降低质量更有效。
find
将递归搜索。请改为尝试:printf“%s\0”*.jpg | parallel-0代码>