Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ImageMagick将SVG转换为PNG未启用RSVG_Svg_Imagemagick_Png_Rsvg - Fatal编程技术网

ImageMagick将SVG转换为PNG未启用RSVG

ImageMagick将SVG转换为PNG未启用RSVG,svg,imagemagick,png,rsvg,Svg,Imagemagick,Png,Rsvg,我正在使用ImageMagick的convert实用程序将SVG文件转换为PNG图像。首先,我使用在OSX上安装IM(brew install imagemagick)来转换SVG,方法是: $ convert file.svg file.png 除了该文件中的某些图像对象被偏移(到图像的实际链接)外,这一点起作用。然后我建议使用rsvg支持编译ImageMagick(homebrew使用brew安装ImageMagick——使用rsvg) 现在,当我尝试执行转换时,不会渲染任何图像。我试着使

我正在使用ImageMagick的
convert
实用程序将SVG文件转换为PNG图像。首先,我使用在OSX上安装IM(
brew install imagemagick
)来转换SVG,方法是:

$ convert file.svg file.png
除了该文件中的某些图像对象被偏移(到图像的实际链接)外,这一点起作用。然后我建议使用rsvg支持编译ImageMagick(homebrew使用
brew安装ImageMagick——使用rsvg


现在,当我尝试执行转换时,不会渲染任何图像。我试着使用,结果PNG是空白的。但是,如果SVG上存在任何文本,则会将其呈现在适当的位置。有什么办法吗?谢谢。

您应该运行此命令以查看ImageMagick尝试使用的所有“委托”的列表:

 convert -list delegate
要查找ImageMagick用于SVG处理的委托命令,请运行

 convert -list delegate | grep 'svg ='
您应该看到您的
convert
尝试使用的二进制+命令行参数。我的情况是
/opt/local/bin/rsvg convert
(但我不使用自制软件,我使用MacPorts)

现在检查您的系统上是否存在二进制文件:

  • 如果是,直接运行它并从那里调试
  • 如果没有,请尝试查找您的自制软件安装位置,并为其代理更改ImageMagick的配置文件。它被称为delegates.xml。MacPorts将其放入
    /opt/local/etc/ImageMagick/delegates.xml
    ——我不知道自制软件将其存储在哪里
但是,由于您未修改的安装已在运行,因此必须有一个使用SVG的委托正在运行。否则您将根本无法处理任何SVG

ImageMagick的这种内部SVG呈现方法称为MSVG。这远远不是一个功能完整的SVG解释器/渲染器


更新:

要查看ImageMagick对哪种格式执行的操作,请运行以下命令:

convert -list format
和SVG运行

convert -list format | grep SVG
我的系统上的输出是:

 MSVG  SVG       rw+   ImageMagick's own SVG internal renderer
  SVG  SVG       rw+   Scalable Vector Graphics (RSVG 2.36.1)
 SVGZ  SVG       rw+   Compressed Scalable Vector Graphics (RSVG 2.36.1)
安装
rsvg
后,渲染SVG的内部方法不会消失。通过向命令行添加
MSVG:
,您仍然可以强制ImageMagick使用内部渲染器,如下所示:

convert  MSVG:file.svg  file.png
为了完整起见…

哦,我现在看到了链接到的您


它包含JavaScript。我不认为RSVGlib在svg中支持JavaScript。我确信名为MSVG的内部SVG编码器没有。我遇到了类似的问题,刚刚被告知安装inkscape,它可以工作


委托列表没有更改,但输出有更改。在进一步摆弄强迫MSVG时,我无法解决这个问题。因此,另一个代表可能是最好的解决方案

谢谢你的帮助。我还在一个只包含图像和文本的文件上试用了它。我还有
/usr/local/bin/rsvg convert
,具体来说是:
$convert-list delegate | grep
`cdr=>“uniconvertor”“%I”“%o.svg”;mv“%o.svg”“%o”“svg=>”rsvg convert“-o”%o“%i”`您的
/usr/local/bin/rsvg convert
可执行位设置了吗?它是否在命令行中使用给定的命令工作,即:
/usr/local/bin/rsvg convert-o out.png in.svg
?再次感谢您的关注。我的输出与您在运行
convert-list format|grep SVG
时的输出完全相同,在运行
convert MSVG:file.SVG file.png
时,我确实获得了图像的输出,尽管它们有些偏移(这是我最初的问题)
rsvg convert
,它是sym链接到
/usr/local/ceral/librsvg/2.36.1/bin/rsvg convert
,拥有755个权限。请尝试Inkscape。如果在系统上安装,Imagemagick将通过RSVG或MSVG自动使用它。