【发布时间】:2021-05-27 16:04:12
【问题描述】:
我正在使用一个 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 日。所以我不确定我是否在网络服务器上使用当前版本。
默认情况下,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 的 php-imagick .
我已经没有想法了,真的希望你能帮助我解决这个问题。
【问题讨论】:
标签: php svg debian imagemagick webserver