绘制含空格文本时出现non-conforming drawing primitive definition错误如何解决?
解决ImageMagick绘制含空格文本的报错问题
问题原因
当文本文件内容包含空格时,原脚本里的$(cat ${tf})会被bash直接展开,空格会被当作参数分隔符,把文本拆成多个独立单词。convert的-draw选项会将这些单词误认为是多个绘图原语,从而抛出non-conforming drawing primitive definition错误。
修正方案
基础修正(处理空格场景)
修改脚本中读取文本和传递给-draw的逻辑,确保文本内容被整体识别:
#!/usr/bin/bash echo "Name of the text file?" read tf echo "Width?" read wi echo "Height?" read hi echo "Fill (font) color?" read fc echo "Background color?" read bc # 读取文本内容,同时兼容文件名带空格的情况 text_content=$(cat "$tf") convert -size "${wi}x${hi}" xc:"${bc}" -font Helvetica \ -pointsize 24 \ -fill "${fc}" \ -gravity center \ -draw "text 0,0 '$text_content'" \ image.png
进阶修正(兼容含单引号的文本)
如果文本内容包含单引号,上面的脚本会失效,需要先转义文本里的单引号:
#!/usr/bin/bash echo "Name of the text file?" read tf echo "Width?" read wi echo "Height?" read hi echo "Fill (font) color?" read fc echo "Background color?" read bc # 转义文本中的单引号,避免破坏-draw的引号结构 text_content=$(sed "s/'/'\\\''/g" "$tf") convert -size "${wi}x${hi}" xc:"${bc}" -font Helvetica \ -pointsize 24 \ -fill "${fc}" \ -gravity center \ -draw "text 0,0 '$text_content'" \ image.png
关键修正点说明
- 读取文件时使用
cat "$tf"而非cat ${tf},确保文件名包含空格时也能正确读取。 - 将文本存入变量后,在
-draw的text命令中用单引号包裹变量值,让convert把整个字符串视为单一文本内容,不会被空格拆分。 - 用
sed转义单引号,避免文本中的单引号破坏-draw参数的引号结构。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

