如何在ImageMagick 7中批量处理绘图?现有命令执行报错
解决ImageMagick 7中mogrify批量处理无法识别%[fx]绘图语法的问题
你在单文件处理时用magick命令结合%[fx]变量给图片四个角落绘制短线条的逻辑是正常的,但切换到mogrify批量处理时,直接在-draw中使用%[fx:w]/%[fx:h]会触发解析错误:
mogrify: non-conforming drawing primitive definition `%' @ error/draw.c/RenderMVGContent/4059.
无需退回到v6语法,可通过以下两种方式解决:
方式一:直接使用预定义的宽高转义序列
利用ImageMagick内置的%w(图片宽度)、%h(图片高度)转义序列替代%[fx:w]/%[fx:h],修改后的批量处理命令如下:
magick mogrify -stroke black -strokewidth 3 \ -draw "line 0,0 20,0" \ -draw "line 0,0 0,20" \ -draw "line 0,%h 20,%h" \ -draw "line 0,%h 0,%[fx:%h-20]" \ -draw "line %w,0 %[fx:%w-20],0" \ -draw "line %w,0 %w,20" \ -draw "line %w,%h %[fx:%w-20],%h" \ -draw "line %w,%h %w,%[fx:%h-20]" \ -- *.png
方式二:通过-set定义自定义变量
先将宽高计算结果存入自定义变量,再在-draw中引用变量,适合更复杂的fx计算场景:
magick mogrify -stroke black -strokewidth 3 \ -set option:image_width "%[fx:w]" \ -set option:image_height "%[fx:h]" \ -draw "line 0,0 20,0" \ -draw "line 0,0 0,20" \ -draw "line 0,%[image_height] 20,%[image_height]" \ -draw "line 0,%[image_height] 0,%[fx:%[image_height]-20]" \ -draw "line %[image_width],0 %[fx:%[image_width]-20],0" \ -draw "line %[image_width],0 %[image_width],20" \ -draw "line %[image_width],%[image_height] %[fx:%[image_width]-20],%[image_height]" \ -draw "line %[image_width],%[image_height] %[image_width],%[fx:%[image_height]-20]" \ -- *.png
原理说明
mogrify对-draw参数的MVG语法解析逻辑与单文件的magick命令存在差异,直接在绘图原语中使用%[fx:]表达式会被判定为无效语法。而预定义转义序列%w/%h或通过-set定义的自定义变量,能被mogrify正确识别并代入对应数值,同时完全保留ImageMagick 7的语法特性。
内容的提问来源于stack exchange,提问作者RootInit
相关产品推荐
相关产品推荐

