如何使用ImageMagick的-annotate命令绘制Unicode字符?
解决ImageMagick绘制Unicode字符“Ê”异常的方案
问题根源
Windows命令行默认编码(多为GBK/OEM)与你使用的UTF-8文本不兼容,加上未明确指定完整支持Unicode的字体,导致字符渲染出现异常。
可行解决方案
1. 切换命令行至UTF-8编码
先执行编码切换命令,再运行ImageMagick指令:
chcp 65001 "C:\Program Files\ImageMagick-7.1.1-Q8\magick.exe" convert -size 800x200 xc:black -font "Times New Roman" -fill #808080 -gravity Center -pointsize 64 -annotate +0+0 "ABCDEF - Ê" text.png
chcp 65001将命令行编码切换为UTF-8,确保Unicode字符能正确传递。- 明确指定
"Times New Roman"字体,保证它包含目标Unicode字符的渲染数据。
2. 通过UTF-8文本文件传递内容
如果命令行直接传递仍有问题,可将文本写入UTF-8编码的文本文件(比如text_content.txt,内容为ABCDEF - Ê),再用以下命令读取:
"C:\Program Files\ImageMagick-7.1.1-Q8\magick.exe" convert -size 800x200 xc:black -font "Times New Roman" -fill #808080 -gravity Center -pointsize 64 -annotate +0+0 @text_content.txt text.png
@text_content.txt表示从指定文件读取标注文本,规避命令行编码冲突问题。
3. 使用-draw参数替代-annotate
部分场景下-draw参数对Unicode支持更稳定,命令示例:
chcp 65001 "C:\Program Files\ImageMagick-7.1.1-Q8\magick.exe" convert -size 800x200 xc:black -font "Times New Roman" -fill #808080 -gravity Center -pointsize 64 -draw "text 0,0 'ABCDEF - Ê'" text.png
- 结合
-gravity Center时,0,0对应画布中心位置,符合原需求的居中效果。
内容的提问来源于stack exchange,提问作者Joe Jobs
相关产品推荐
相关产品推荐

