SVG有问题(我清除了与问题无关的任何内容):
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 330 360">
<defs>
<path id="SVGID_1_" d="M166.3,7.4c-1.2,0-2.4,0-3.6,0c-10.4,0.2-20.9,1.3-26.9,3.8c-31.3,15.1-36.7,36.2-35.4,65.6"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_"/>
</clipPath>
<path
clip-path="url(#SVGID_2_)"
d="M166.7 1.5S129-4.3 112.9 3.8c-7.3 3.7-12 11.7-15.5 19.1-5.2 11.2-6.8 36.4-6.8 36.4l15.9 11.4c.2-8.2 6.9-17.4 10.5-25.1 3.9-8.2 1.1-6.7 3.6-8.2 15.4-5.9 30.5-1 46 0 16.5 1.1 33.4-6.4 46 0 2.6 1.5 1.6-.6 3.6 8.2 1.6 6.8 12 18.8 10.5 25.1l15.9-11.4s-1.6-25.2-6.8-36.4c-3.4-7.4-8.2-15.4-15.5-19.1-15.9-8.1-53.6-2.3-53.6-2.3z"/>
</svg>
当我使用identify:
通过Imagemagick 7.0.7-22 Q16 x86_64运行此文件时magick identify -verbose clipPath.svg
输出以此结束:
identify: non-conforming drawing primitive definition `path' @ error/draw.c/DrawImage/3284.
我已将问题缩小到第12行:
clip-path="url(#SVGID_2_)"
清理SVG并不是一个真正的选择,因为用户可以上传自己的SVG。所以问题是:
A)为什么会这样?
B)Imagemagick有什么可以解决的问题吗?
答案 0 :(得分:1)
如果你跑:
identify -list delegate
您会看到 ImageMagick 委托处理SVG
个文件到rsvg
,因此请确保该文件是最新的。
还要检查是否需要添加任何开关或选项来处理任何特定的,麻烦的SVG元素,这些可以编辑到delegates.xml
文件中。
答案 1 :(得分:1)
为什么会这样?
正如评论中所指出的,内部编码器/解码器正在将SVG转换为MVG。 use xlink:href="#SVGID_1_"
延期(或称为重定向?)不被理解;所以,省略。如果你运行以下...
convert clipPath.svg mvg:-
将输出以下内容(添加空格缩进)。
push graphic-context
viewbox 0 0 330 360
affine 1 0 0 1 0 0
push defs
push graphic-context
path 'M166.3,7.4c-1.2,0-2.4,0-3.6,0c-10.4,0.2-20.9,1.3-26.9,3.8c-31.3,15.1-36.7,36.2-35.4,65.6'
pop graphic-context
pop defs
push clip-path 'SVGID_2_'
pop clip-path
push graphic-context
clip-path 'url(#SVGID_2_)'
path 'M166.7 1.5S129-4.3 112.9 3.8c-7.3 3.7-12 11.7-15.5 19.1-5.2 11.2-6.8 36.4-6.8 36.4l15.9 11.4c.2-8.2 6.9-17.4 10.5-25.1 3.9-8.2 1.1-6.7 3.6-8.2 15.4-5.9 30.5-1 46 0 16.5 1.1 33.4-6.4 46 0 2.6 1.5 1.6-.6 3.6 8.2 1.6 6.8 12 18.8 10.5 25.1l15.9-11.4s-1.6-25.2-6.8-36.4c-3.4-7.4-8.2-15.4-15.5-19.1-15.9-8.1-53.6-2.3-53.6-2.3z'
pop graphic-context
pop graphic-context
请注意剪辑路径&#34; SVGID_2 _&#34;没有内容(推送和弹出堆栈之间没有内容),defs
- &gt; graphic-context
未标识为剪辑路径。
如果重写MVG,它应该按预期工作。
push graphic-context
viewbox 0 0 330 360
affine 1 0 0 1 0 0
push defs
push clip-path 'SVGID_2_'
push graphic-context
path 'M166.3,7.4c-1.2,0-2.4,0-3.6,0c-10.4,0.2-20.9,1.3-26.9,3.8c-31.3,15.1-36.7,36.2-35.4,65.6'
pop graphic-context
pop clip-path
pop defs
push graphic-context
clip-path 'url(#SVGID_2_)'
path 'M166.7 1.5S129-4.3 112.9 3.8c-7.3 3.7-12 11.7-15.5 19.1-5.2 11.2-6.8 36.4-6.8 36.4l15.9 11.4c.2-8.2 6.9-17.4 10.5-25.1 3.9-8.2 1.1-6.7 3.6-8.2 15.4-5.9 30.5-1 46 0 16.5 1.1 33.4-6.4 46 0 2.6 1.5 1.6-.6 3.6 8.2 1.6 6.8 12 18.8 10.5 25.1l15.9-11.4s-1.6-25.2-6.8-36.4c-3.4-7.4-8.2-15.4-15.5-19.1-15.9-8.1-53.6-2.3-53.6-2.3z'
pop graphic-context
pop graphic-context
Imagemagick有什么可以解决的问题吗?
升级到ImageMagick 7将提供一些改进,但正如Mark正确指出的那样,如果将代理切换到支持高级功能的SVG渲染引擎,您将获得更多。阅读ImageMagick附带的delegates.xml文件或online。示例以内联注释的形式给出,如果您已在系统上安装了rsvg或类似软件,我不会感到惊讶。