使用 Imagemagick 在脚本中调整图像大小

使用 Imagemagick 在脚本中调整图像大小

我想创建一个 bash 脚本来将图像大小调整到 800px 并保持比例......

我的代码在 bash 中不起作用,但它可以identify与单个图像一起使用:

#!/bin/bash
for file in ./**/public/uploads/*.*; do
  width = $(identify -format "%w" ${file})
  if [ width > 800 ]
  then
    echo $file // resize image
  fi
done
exit 0;

问题:我乘坐Permission denied3 号线

我尝试了以下答案之一中给出的解决方案:

#!/bin/bash
shopt -s globstar
for file in ./**/public/uploads/*.*; do 
  width=$(identify -format "%w" "${file}")
  if [ "$width" -gt 800 ]
  then
    echo "$file"
  fi
done
exit 0;

我现在收到此错误消息:

identify.im6: Image corrupted   ./folder/public/uploads/ffe92053ca8c61835aa5bc47371fd3e4.jpg @ error/gif.c/PingGIFImage/952.
./images.sh: line 6: width: command not   found
./images.sh: line 7: [integer expression expected

答案1

我在您的脚本中发现两个明显的问题。首先,它是由默认情况下未启用的选项**提供的。globstar您可能已经在交互式 shell 中激活了它,但您也需要为脚本执行此操作。

然后,您实际上不是在比较,$width而是在比较 string width$中需要[ ].

最后一个问题是,您正在运行的某些文件已损坏,或者不是图像。无论如何,该identify命令对它们失败,因此$width为空。一个简单的解决方案是测试是否$width为空 ( -z "$width"),并且仅比较是否为空 ( ! -z "$width"):

试试这个:

#!/bin/bash
shopt -s globstar
for file in ./**/public/uploads/*.*; do 
  width=$(identify -format "%w" "${file}")
  if [[ ! -z "$width" && "$width" -gt 800 ]]
  then
    echo "$file"
  fi
done
exit 0;

答案2

问题(或者至少是问题之一)是你说的

width = $(identify -format "%w" "${file}")

您需要消除 之前和之后的空格=,如下所示:

width=$(identify -format "%w" "${file}")

相关内容