You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将复合区域作为变量传入ImageMagick命令?

Cygwin环境下ImageMagick动态参数配置报错与解决

我在Cygwin环境中运行ImageMagick 7.0.10-61 Q16,以下命令可正常执行:

convert input.png -crop 100x50+20+80 +repage \( -size 15x10 xc:white \) -geometry +20+0 -composite output.png

由于需要根据前置if逻辑动态设置复合区域参数,我尝试将这部分定义为变量,但执行时虽能生成输出图,却出现报错:

white_region=" \( -size 15x10 xc:white \) -geometry +20+0 -composite "

convert input.png -crop 100x50+20+80 +repage ${white_region} output.png

报错信息:

convert: unable to open image '\(': No such file or directory @ error/blob.c/OpenBlob/3537.
convert: no decode delegate for this image format `' @ error/constitute.c/ReadImage/572.
convert: unable to open image '\)': No such file or directory @ error/blob.c/OpenBlob/3537.
convert: unable to open image '\)': No such file or directory @ error/blob.c/OpenBlob/3537.
convert: no decode delegate for this image format `' @ error/constitute.c/ReadImage/572.

更新1:分支逻辑下的变量化尝试

文件夹中有两张输入图,宽度分别为335px和480px,需根据宽度应用不同的复合区域。直接将分支逻辑写在脚本中可正常执行:

for image in *.png; do
    w=$(identify -ping -format '%w' $image)
    
    if [ $w == 335 ]; then
        h=192
        convert ${image} -crop ${w}x${h}+0+0 +repage \( -size 120x25 xc:white \) -geometry +0+0 -composite out_${image}
    else
        h=232
        convert ${image} -crop ${w}x${h}+0+0 +repage \( -size 130x15 xc:white \) -geometry +0+0 -composite \( -size 140x50 xc:white \) -geometry +340+0 -composite out_${image}
    fi
done

但将复合区域参数提取为变量后执行,依然报错:

for image in *.png; do
    w=$(identify -ping -format '%w' $image)
    
    if [ $w == 335 ]; then
        white_region="\( -size 120x25 xc:white \) -geometry 0+0 -composite"
        h=192
    else
        white_region="\( -size 130x15 xc:white \) -geometry 0+0 -composite \( -size 140x50 xc:white \) -geometry +340+0 -composite "
        h=232
    fi
    
    convert ${image} -crop ${w}x${h}+0+0 +repage ${white_region} out_${image}
done

更新2:最终解决方法

采用去掉转义括号的方式,成功解决了报错问题,脚本如下:

for image in im*.png; do
    w=$(identify -ping -format '%w' $image)
    
    if [ $w == 335 ]; then
        white_region="-size 120x25 xc:white -geometry +0+0 -composite"
        h=192
    else
        white_region="-size 130x15 xc:white -geometry +0+0 -composite -size 140x50 xc:white -geometry +340+0 -composite"
        h=232
    fi
    
    convert ${image} -crop ${w}x${h}+0+0 ${white_region} out_${image}
done

内容的提问来源于stack exchange,提问作者Rasec Malkic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:23:31