【问题标题】:Cropping images with loop in Imagemagick在 Imagemagick 中使用循环裁剪图像
【发布时间】:2015-06-28 20:21:30
【问题描述】:

我正在尝试批量裁剪文件夹中的图像。每当我尝试做这个循环时

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)

回声 $- 输出

himBH

【问题讨论】:

  • 请将shopt | grep glob 的输出和bash 版本添加到您的问题中。
  • 完成。是我的命令语法错误还是我的操作系统设置或 imagemagick 安装有问题?
  • 请添加echo $-的输出。

标签: linux image bash ubuntu imagemagick


【解决方案1】:

正确的语法是:

#!/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的输出。

【讨论】:

    【解决方案2】:

    在您的 for 语句的开头,这些引号是引号还是反引号? 您必须使用反引号。

    试试这个:

    for image in `ls -1 /home/donald/Desktop/Im*.jpg`; do 
        convert "$image" -gravity center -crop 95X95% "${image%.*}"-modified.jpg ;
    done 
    

    【讨论】:

      猜你喜欢
      • 2013-08-06
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 2018-07-15
      • 2014-03-27
      • 2012-05-16
      • 2016-12-08
      相关资源
      最近更新 更多