imagick使用谷歌字体将svg转换为png

时间:2018-12-24 15:08:07

标签: php svg imagick

使用imagick时出现问题,我缺少在svg中使用的字体。搜索了互联网,但找不到可以使用的答案。

svg包含以下内容:

<defs>
    <style type="text/css">@import url("https://fonts.googleapis.com/css?family=Faustina");</style>
    <style type="text/css">@import url("https://fonts.googleapis.com/css?family=Ubuntu");</style>
</defs>
<text x="61.81135214943191" y="111.73005750523703" font-size="55" fill="#9E3E3E" transform="rotate(15)" font-family="Faustina" style="font-family:'Faustina' !important">Test 1</text>
<text x="61.81135214943191" y="171.73005750523703" font-size="45" fill="#9E3E3E" transform="rotate(-15)" font-family="Ubuntu" style="font-family:'Ubuntu' !important">Test 2</text>

用户可以将更多字体和更多文本作为背景图像添加到svg,但是问题是如何在将svg转换为png的同时向imagick添加字体?

我可以下载这些字体并替换代码以使用字体代替导入,但是方法IMagick :: setFont仅接受字符串。

由于shell_exec和类似命令已禁用,因此其他任何php转换方法都可以使用。如果在我们的测试服务器上,我可以更改该值,但是在将运行此代码的生产服务器上,我不能进行任何更改。

现在我使用简单的代码:

$image = new IMagick();
$image->setBackgroundColor(new ImagickPixel('transparent'));
$image->readImageBlob($svg_html);
$image->setImageFormat("png32");

1 个答案:

答案 0 :(得分:0)

找到了解决我的问题的方法,需要在defs中将字体包括为base64。

所以看起来像

master