Imagemagick 避免图像的双重优化

Imagemagick 避免图像的双重优化,imagemagick,Imagemagick,我们有一个图像存储库,其中有些图像经过优化,有些则没有 我正在编写“脚本”,它将通过存储中的每个图像运行优化过程 我想知道: 是否有办法检查图像是否已优化 如果图像经过几次85%的质量优化,我会失去质量吗 我试过几次在同一张图片上运行-质量85%,我看不到任何质量损失(第3次运行后,图片的大小没有改变)。然而,我没有在官方文件中找到证据 谢谢 在优化之前,您可以检查质量设置是否已为75: identify -format %Q fred.jpg 92 然后优化并再次检查: convert fr

我们有一个图像存储库,其中有些图像经过优化,有些则没有

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

我想知道:

  • 是否有办法检查图像是否已优化
  • 如果图像经过几次85%的质量优化,我会失去质量吗
  • 我试过几次在同一张图片上运行-质量85%,我看不到任何质量损失(第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
    
    因此,您将测试图像注释是否包含“优化”一词,如果不包含,则优化图像并更改注释以显示尽可能多的内容:

    [[ $(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