使用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");
答案 0 :(得分:0)
找到了解决我的问题的方法,需要在defs中将字体包括为base64。
所以看起来像
master