ImageMagick可以使用绘图基元定义剪切路径吗?

时间:2014-03-21 12:39:36

标签: svg imagemagick clip graphicsmagick

使用SVG,您可以定义剪切路径,然后在绘制路径时应用它。使用ImageMagick命令行选项可以达到同样的效果吗?

我能够做到的唯一方法是将剪切路径创建为单独的文件,并使用-clip-mask来应用它。这是一个有效的例子:

convert -size 150x150 xc:none -draw "path 'M50,50 h50 v50 -h-50 z'" clip.png
convert -size 150x150 xc: -fill 'blue' -clip-mask clip.png \ 
        -draw "path 'h150,0 l-75,75 z" image.png

我想要做的是在与绘图相同的命令中定义剪辑路径,理想情况是像这样的一些:

convert -size 150x150 xc: -fill 'blue' \
        -clip-path  "path 'M50,50 h50 v50 -h-50 z'" \
        -draw "path 'h150,0 l-75,75 z" image.png

哪个不起作用。为了避免使用中间文件,我尝试使用堆叠图像,但这似乎不作为参数(以下也不起作用):

convert -size 150x150 xc: -fill 'blue' \
        -clip-mask \( -size 150x150 xc:none -draw "path 'M50,50 h50 v50 -h-50 z'" \) \
        -draw "path 'h150,0 l-75,75 z" image.png

这可以用SVG简洁地完成 - ImageMagick命令行能做到吗?

1 个答案:

答案 0 :(得分:0)

您可以使用mpr 伪格式创建中间文件,如下所示:

convert \( -size 150x150 xc:none -draw "path 'M50,50 h50 v50 -h-50 z'" \
           -write mpr:clip \) +delete \
        -size 150x150 xc: -fill 'blue' -clip-mask mpr:clip \
        -draw "path 'h150,0 l-75,75 z" image.png

这使用-write使剪辑图像立即被写入(否则它将堆叠直到命令序列结束)。然后使用+delete将其从堆栈中删除(否则它也将在命令序列的末尾写入)。然后-clip-mask读取伪文件。

伪文件mpr Magick Persistent Registry ,并记录在案here