在 Imagemagick 中使用循环裁剪图像
Cropping images with loop in Imagemagick
我正在尝试批量裁剪文件夹中的图像。每当我尝试执行此循环时
for image in '/home/donald/Desktop/Im'*.jpg; do
convert "$image" -gravity center -crop 95X95% "${image%.jpg}"-modified.jpg
done
我遇到了错误:
convert.im6: unable to open image `/home/donald/Desktop/Im*.jpg': No such file or directory @ error/blob.c/OpenBlob/2638.
convert.im6: no images defined `/home/donald/Desktop/Im*-modified.jpg' @ error/convert.c/ConvertImageCommand/3044.
这很奇怪,因为文件夹中肯定有图像,根据元数据它们是 jpg
当我 运行 shopt | grep glob
我得到这个输出:
dotglob off
extglob on
failglob off
globstar off
globasciiranges off
nocaseglob off
nullglob off
这是我的版本信息:
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Echo $- 输出
himBH
在 for 语句的开头,这些是引号还是反引号?
您必须使用反引号。
试试这个:
for image in `ls -1 /home/donald/Desktop/Im*.jpg`; do
convert "$image" -gravity center -crop 95X95% "${image%.*}"-modified.jpg ;
done
正确的语法是:
#!/bin/bash
shopt -s nullglob
for image in $HOME/Desktop/Im*.jpg; do
convert "$image" ...
done
另一种选择可能是使用 ImageMagick 套件中的 mogrify
命令:
# Create an output directory for cropped images
mkdir cropped
# Crop image and direct output to sub-directory
mogrify -gravity center -crop 95x95% -path cropped *.jpg
你绝对不应该解析 ls
的输出。
我正在尝试批量裁剪文件夹中的图像。每当我尝试执行此循环时
for image in '/home/donald/Desktop/Im'*.jpg; do
convert "$image" -gravity center -crop 95X95% "${image%.jpg}"-modified.jpg
done
我遇到了错误:
convert.im6: unable to open image `/home/donald/Desktop/Im*.jpg': No such file or directory @ error/blob.c/OpenBlob/2638.
convert.im6: no images defined `/home/donald/Desktop/Im*-modified.jpg' @ error/convert.c/ConvertImageCommand/3044.
这很奇怪,因为文件夹中肯定有图像,根据元数据它们是 jpg
当我 运行 shopt | grep glob
我得到这个输出:
dotglob off
extglob on
failglob off
globstar off
globasciiranges off
nocaseglob off
nullglob off
这是我的版本信息:
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Echo $- 输出
himBH
在 for 语句的开头,这些是引号还是反引号? 您必须使用反引号。
试试这个:
for image in `ls -1 /home/donald/Desktop/Im*.jpg`; do
convert "$image" -gravity center -crop 95X95% "${image%.*}"-modified.jpg ;
done
正确的语法是:
#!/bin/bash
shopt -s nullglob
for image in $HOME/Desktop/Im*.jpg; do
convert "$image" ...
done
另一种选择可能是使用 ImageMagick 套件中的 mogrify
命令:
# Create an output directory for cropped images
mkdir cropped
# Crop image and direct output to sub-directory
mogrify -gravity center -crop 95x95% -path cropped *.jpg
你绝对不应该解析 ls
的输出。