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

绘制含空格文本时出现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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:50:36