【问题标题】:PHP Convert SVG To Jpg Missing ElementsPHP 将 SVG 转换为 Jpg 缺少元素
【发布时间】:2018-09-11 12:32:41
【问题描述】:

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

convert -density 250 source.svg target.jpg

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

输入 SVG

输出 JPG

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

仅供参考,这里是下载实际 SVG 的链接

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

【问题讨论】:

  • 请在此处查看另一个 stackoverflow 帖子 SVG To JPEG
  • @SftAps 已经尝试过,但没有运气。同样的问题。
  • 不是说它对你有帮助,但这在我的机器上运行良好:Version: ImageMagick 6.9.7-4 Q16 x86_64 20170114 http://www.imagemagick.org
  • 也适用于 ImageMagick-7
  • @emcconville 我尝试使用 ImageMagic 7.0.8-11 但仍然是同样的问题

标签: php imagemagick imagemagick-convert image-conversion


【解决方案1】:

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

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


我使用带有内部 MSVG/XML 渲染器、RSVG 2.42.2_2 和 Inkscape 0.92.3_4 的 Imagemagick 6.9.10.11 Q16 Mac OSX。这三个都产生了不同的结果。 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 渲染器也得到了改进。所以旧版本可能不会产生那么好的结果。

【讨论】:

  • 详细命令“convert -verbose -density 250 source.svg target.jpg”结果如下。 mvg:/tmp/magick-LSfBdmJW=>/tmp/magick-LSfBdmJW MVG 1246x1076 1246x1076+0+0 16-bit DirectClass 15.5KB 0.430u 0:00.439 /var/www/html/img/simulator/tmp/575562/sourceImageTopFront .svg SVG 1246x1076 1246x1076+0+0 16 位 DirectClass 15.5KB 0.000u 0:00.000 /var/www/html/img/simulator/tmp/575562/sourceImageTopFront.svg=>/var/www/html/img/simulator /tmp/575562/sourceImageTopFront.jpg SVG 1246x1076 1246x1076+0+0 16 位 DirectClass 106KB 0.020u 0:00.019
  • 转换列表格式 | grep SVG 这个命令的结果是 MSVG -w+ ImageMagick 自己的 SVG 内部渲染器 SVG -w+ Scalable Vector Graphics SVGZ -w+ Compressed Scalable Vector Graphics
  • 仍然面临同样的问题。仅供参考,我正在使用 ImageMagic 7.0.8-11
  • 安装 Inkscape,如果结果正确,你应该得到我上面的 Inkscape 结果。
【解决方案2】:

最后我找到了解决方法。我通过 javascript 将 svg 转换为画布图像(base64 格式),并通过 php 将 base64 数据转换为 jpg 图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-29
    • 2012-04-09
    • 1970-01-01
    • 2014-05-13
    • 2013-11-02
    • 2015-01-31
    • 1970-01-01
    • 2013-07-26
    相关资源
    最近更新 更多