繁体   English   中英

ImageMagick 忽略 SVG 中的样式表(使用 php-imagick 转换为 PNG)

[英]ImageMagick ignores style sheets in SVG (conversion to PNG with php-imagick)

我正在使用 SVG 模板,我在 PHP 中使用 ImageMagick 加载该模板,将一些值插入 DOM,然后将其转换为 PNG。 在我的本地开发环境中,这工作正常,但在我的远程 Web 服务器上却没有,生成的图像大部分是黑色的。

似乎 ImageMagick 无法读取样式表声明并应用类。 我试图找出原因,但没有任何成功。 我没有收到异常,其他线程暗示 ImageMagick 的旧版本可能会出现此问题,但似乎该版本是最新的。

网络服务器上的 imagick php 模块信息

我有点困惑 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM