ImageMagick绘制虚线矩形出现Z形伪影问题求助
关于ImageMagick绘制虚线矩形出现Z形伪影的问题
问题描述
执行以下ImageMagick命令绘制虚线矩形:
convert -size 300x300 xc:skyblue -fill white -stroke black \ -draw "stroke-width 3 stroke-dasharray 10 10 rectangle 50,50 250,250" draw_rect.gif
生成的图像存在明显Z形伪影,调整线帽/线连接样式、笔触宽度、虚线数组、颜色、填充方式等参数后,该问题仍存在。
测试环境:
- ARM架构:
ImageMagick 6.9.10-68 Q16 aarch64 2021-02-02 - x86架构:
ImageMagick 6.9.10-68 Q16 x86_64 2021-02-03
问题原因
这是ImageMagick 6.x版本的已知BUG,根源在于-draw命令处理闭合形状(如矩形)的虚线衔接时,路径起点和终点的虚线计算出现错误,导致衔接处产生异常的Z形线条。并非功能限制,属于旧版本的实现缺陷。
解决方案
- 改用全局参数设置虚线:将
stroke-dasharray作为全局参数而非-draw内的参数,避免闭合路径的衔接问题:
convert -size 300x300 xc:skyblue -fill white -stroke black -stroke-width 3 \ -stroke-dasharray 10,10 -draw "rectangle 50,50 250,250" draw_rect_fix.gif
升级到ImageMagick 7版本:ImageMagick 7对图形绘制引擎做了重构,修复了这类闭合形状的虚线衔接问题,升级后直接使用原命令即可正常输出。
手动绘制矩形四条边:放弃闭合矩形命令,用
line命令分别绘制四条边,避免路径闭合带来的衔接问题:
convert -size 300x300 xc:skyblue -fill white -stroke black -stroke-width 3 \ -draw "stroke-dasharray 10 10 line 50,50 250,50" \ -draw "stroke-dasharray 10 10 line 250,50 250,250" \ -draw "stroke-dasharray 10 10 line 250,250 50,250" \ -draw "stroke-dasharray 10 10 line 50,250 50,50" draw_rect_fix.gif
内容的提问来源于stack exchange,提问作者Ricardo
相关产品推荐
相关产品推荐

