[英]ImageMagick ignores style sheets in SVG (conversion to PNG with php-imagick)
我正在使用 SVG 模板,我在 PHP 中使用 ImageMagick 加载该模板,将一些值插入 DOM,然后将其转换为 PNG。 在我的本地开发环境中,这工作正常,但在我的远程 Web 服务器上却没有,生成的图像大部分是黑色的。
似乎 ImageMagick 无法读取样式表声明并应用类。 我试图找出原因,但没有任何成功。 我没有收到异常,其他线程暗示 ImageMagick 的旧版本可能会出现此问题,但似乎该版本是最新的。
我有点困惑 PHPInfo 说模块版本是 3.4.4 但在 2017 年发布,而 ImageMagick 网站说 3.4.4 于 2020 年 12 月发布。 这有意义吗? 我的本地开发环境使用相同的版本,但带有一些附加信息 (3.4.4.r66.g448c1cd),发布日期为 2021 年 1 月 30 日。 所以我不确定我是否在 web 服务器上使用当前版本。
默认情况下,imagick 模块无法处理 SVG 文件类型,因此我安装了“libmagickcore-6.q16-3-extra”并重新加载了 php 和 ZEE434023CF49D7DFB274ZF63。 从那以后,我得到了 PNG,但没有应用样式表。
服务器信息:Debian GNU/Linux 9.9(拉伸),PHP7.3,nginx/1.10.3
这是我的 SVG 开头的样子:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" width="975" height="579.05542" viewBox="0 0 974.99995 579.05544" xml:space="preserve" id="svg_score"> <defs id="defs"> <style type="text/css" id="style"> @font-face { font-family: SFProDisplay-Regular; src: url('sfprodisplay-regular.ttf'); }.st0 { fill: #FFFFFF; }.st1 { fill-rule: evenodd; clip-rule: evenodd; }.st2 { clip-path: url(#SVGID_10_); }.st3 { clip-path: url(#SVGID_12_); }.st4 { fill: #77af42; stroke: #000000; stroke-width: 2.11; stroke-linejoin: round; stroke-miterlimit: 10; }.st11 { fill: none; stroke: #FFFFFF; stroke-width: 3; stroke-miterlimit: 10; }.filledstar { fill: #FFFFFF; stroke: #FFFFFF; stroke-width: 3; stroke-miterlimit: 10; }.value { font-style: normal; font-variant: normal; font-stretch: normal; font-family: SFProDisplay-Regular; font-size: 36.3px; letter-spacing: -.7; } </style> </defs>
我也尝试将样式标签放在 defs 标签之外,但这也不起作用。 一个选项可能是将 SVG 委托更改为 Inkscape,但这使我认为这个问题更加复杂,正如我在我的开发人员 ImageMagick 上看到的那样,我可以做到这一点,但我没有找到如何将委托更改为 Inkscape for php-imagick .
我没有任何想法了,真的希望你能帮助我解决这个问题。
ImageMagick 可以使用 3 种不同的 SVG 渲染器中的任何一种。 按照生成的质量顺序,一个是 Imagemagick 内部 MSVG/XML 渲染器,下一个是 RSVG 委托,最后一个是 Inkscape。 您可能在一个正常工作的系统上拥有后者之一,而在给出黑色结果的系统上拥有一个内部系统。 我建议您在两个系统上都安装 Inkscape,然后再次测试。 如果 ImageMagick 可以找到,它将使用 Inkscape,否则如果找不到 RSVG,则默认使用 MSVG。 RSVG 需要作为委托库安装,但 Inkscape 可以单独安装。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.