如何将复合区域作为变量传入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
相关产品推荐
相关产品推荐

