首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免图像的双重优化

避免图像的双重优化
EN

Stack Overflow用户
提问于 2017-08-28 14:04:02
回答 1查看 92关注 0票数 1

我们有一个图像的存储,其中一些图像是优化的,而有些则不是。

我正在编写“脚本”,它将通过存储中的每个映像并运行优化过程。

我想知道:

  1. 是否有一种方法来检查图像是否已经优化?
  2. 如果图像经过了-quality 85%的多次优化,我会失去质量吗?

我已经尝试运行-quality 85%在同一图像上几次,我没有看到任何质量下降(在第3次运行后,图像的大小没有改变)。然而,我没有在正式文件中找到任何证据。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-28 14:14:05

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

代码语言:javascript
复制
identify -format %Q fred.jpg
92

然后再进行优化和检查:

代码语言:javascript
复制
convert fred.jpg -quality 75 optimised.jpg
identify -format %Q optimised.jpg
75

如果您使用的是bash,这很容易:

代码语言:javascript
复制
q=$(identify -format %Q fred.jpg)
[ $q -ne 75 ] && mogrify -quality 75 fred.jpg

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

代码语言:javascript
复制
# Set comment
mogrify -set comment "optimised" fred.jpg

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

因此,您将测试图像注释中是否包含“优化”一词,如果没有,则对图像进行优化并更改注释以显示相同的内容:

代码语言:javascript
复制
[[ $(identify -format %c fred.jpg) != *optimised* ]] && { echo Optimising fred.jpg; mogrify -set comment "optimised" -quality 75 fred.jpg; }

另一种可能是使用扩展文件属性标记文件(使用setfattr),因为您降低了它们的质量,然后使用getfattr检查它们的质量,而不是再次执行它们。

如果您有数百或数千个图像要处理,我建议GNU并行。请在目录中的几个文件的小副本上尝试下面的示例:

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

您会发现,它将在第一次传递时并行处理它们,然后在第二次传递时什么也不做。

如果您有太多的图像,并得到:太多的args",您可以像这样在stdin上传递文件名,而不是在:::之后进行全局化。

代码语言:javascript
复制
find /some/where -iname \*.jpg -print0 | parallel -0 ...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45920905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档