避免图像的双重优化

时间:2017-08-28 14:04:02

标签: imagemagick

我们有一个图像存储区,其中一些图像已经过优化,而另一些则没有。

我正在编写脚本'这将通过存储中的每个图像并运行优化过程。

我想知道:

  1. 有没有办法检查图像是否已经过优化?
  2. 如果使用-quality 85%几次优化图像,我是否会失去质量?
  3. 我试图在相同的图像上几次运行质量85%,我看不到任何质量损失(在第3次运行后图像的大小没有改变)。但是我没有找到官方文件的证据。

    谢谢!

1 个答案:

答案 0 :(得分:3)

在优化之前,您可以检查质量设置是否已经为75:

ItemEvent.SELECTED

然后再次优化并检查:

identify -format %Q fred.jpg
92

如果您使用convert fred.jpg -quality 75 optimised.jpg identify -format %Q optimised.jpg 75 ,这很容易:

bash

将图像标记为优化的另一种方法可能是将文件中的注释设置为单词“optimized”,如下所示:

q=$(identify -format %Q fred.jpg)
[ $q -ne 75 ] && mogrify -quality 75 fred.jpg

因此,您将测试图像评论是否包含单词“optimized”,如果没有,则优化图像并更改评论以显示:

# Set comment
mogrify -set comment "optimised" fred.jpg

# Get comment
identify -format %c fred.jpg 
optimised

如果您要处理数百或数千张图片,我建议 GNU Parallel 。请在目录中的一些文件的小型副本上尝试以下示例:

[[ $(identify -format %c fred.jpg) != *optimised* ]] && { echo Optimising fred.jpg; mogrify -set comment "optimised" -quality 75 fred.jpg; }

你会发现它会在第一遍中并行处理它们,然后在第二遍中不做任何事情。

如果你有太多的图片,并且得到“错误:太多args”,你可以像这样传递parallel '[[ $(identify -format "%c" {}) != *optimised* ]] && { echo Optimising {}; mogrify -set comment "optimised" -quality 75 {}; }' ::: *jpg 上的文件名,而不是{{1 }}:

stdin