2017-08-28 67 views
1

我们有一些图像存储在一些图像进行了优化,有些则没有。避免图像的双重优化

我正在研究'脚本',它将通过存储中的每个映像并运行优化过程。

我想知道:

  1. 有没有一种方法来检查,如果图像进行了优化?
  2. 如果图像已经优化了85%的质量几次,我会失去质量吗?

我试图在相同的图像上几次运行质量85%,并且我看不到任何质量损失(第3次运行后图像的大小没有改变)。但是我没有找到官方文件的证据。

谢谢!

+0

积极的色度二次采样(如果不是最大的话)更有效,从而降低质量。 – xenoid

回答

3

您可以检查质量设置已经是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 

所以,你会如果图像注释包含单词测试“优化”,如果没有,优化图像和改变注释显示尽可能多:

​​

如果你有图片的数百或数千过程中,我会建议GNU Parallel。请尝试下面的例子在一个目录中的几个文件小副本

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

你会发现它会处理他们所有的平行第一关,然后做第二遍罢了。

如果你有太多的图片,并得到“错误:参数过多”,你可以通过文件名在stdin这个样子,而不是:::后通配符:使用更

find /some/where -iname \*.jpg -print0 | parallel -0 ... 
+0

'find'将递归搜索。请尝试:'printf'%s \ 0'* .jpg |并行-0 ...' –