问题描述
我正在使用我在 PHP 中加载 ImageMagick 的 SVG 模板,将一些值插入到 DOM 中,然后将其转换为 PNG。在我的本地开发环境中,这工作正常,但在我的远程 Web 服务器上,结果图像大部分是黑色的。
ImageMagick 似乎无法读取样式表声明并应用类。我试图找出原因,但没有任何成功。我没有收到异常,其他线程暗示较旧版本的 ImageMagick 可能存在此问题,但该版本似乎是最新的。
我有点困惑 PHPInfo 说模块版本是 3.4.4,但在 2017 年发布,而 ImageMagick 网站说 3.4.4 是在 12/2020 发布的。这有意义吗?我的本地开发环境使用相同的版本,但有一些附加信息 (3.4.4.r66.g448c1cd),发布日期为 2021-01-30。所以我不确定我是否在网络服务器上使用当前版本。
默认情况下,imagick 模块无法处理 SVG 文件类型,因此我安装了“libmagickcore-6.q16-3-extra”并重新加载了 php 和 nginx。从那以后,我得到了 PNG,但没有应用样式表。
服务器信息:Debian GNU/Linux 9.9 (stretch)、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>
我也尝试将 style 标签放在 defs 标签之外,但这也不起作用。 一个选项可能是将 SVG 委托更改为 Inkscape,但我认为这会使这个问题变得更加复杂,正如我在我的开发中看到的那样,ImageMagick 可以做到这一点,但我没有找到如何将代表更改为 Inkscape for php-imagick .
我已经没有想法了,真的希望你能帮我解决这个问题。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)