PHP 将 SVG 转换为 Jpg 缺少元素

PHP Convert SVG To Jpg Missing Elements

我正在使用 php imagemagic 将 svg 转换为 jpg,我使用以下命令进行转换。

convert -density 250 source.svg target.jpg

我可以成功地将 svg 转换为 jpg,但 svg 中的某些元素丢失了。请检查以下示例

输入 SVG

输出 JPG

在这里你可以清楚地看到侧面的浅灰色阴影被白色所取代。谁能告诉我如何解决这个问题。

仅供参考 link 下载实际的 SVG

https://drive.google.com/file/d/1vC5yaXds7ogcsTWjaDzkXZZFyKzLCsgf/view?usp=sharing

您使用的是哪种 SVG 渲染器?它可以是内部 Imagemagick MSVG/XML、RSVG 委托或 Inkscape(按增加功能的顺序)。您可以通过在命令行中添加 -verbose 来找出答案。

convert -verbose -density 250 source.svg target.jpg


我使用 Imagemagick 6.9.10.11 Q16 Mac OSX 及其内部 MSVG/XML 渲染器、RSVG 2.42.2_2 和 Inkscape 0.92.3_4。这三个都产生了不同的结果。 RSVG 是最糟糕的。 Inkscape 是最好的。这是我使用您的命令得到的结果。

convert -density 250 MSVG:source.svg target_msvg.jpg


convert -density 250 RSVG:source.svg target_rsvg.jpg


convert -density 250 source.svg target_inkscape.jpg


通常 RSVG 比 Imagemagick 的 MSVG 做得更好。但在这里它似乎做得更糟。这可能是由于我修改 delegates.xml 文件的方式,以便在安装 Inkscape 时能够 运行 RSVG。此外,MSVG 渲染器在最近几个版本中得到了改进。所以旧版本可能不会产生那么好的结果。

我终于找到了解决方法。我通过 javascript 将 svg 转换为 canvas 图像(base64 格式)并通过 php 我将 base64 数据转换为 jpg 图像。