【问题标题】:Imagick convert svg to png with google fontsImagick 使用谷歌字体将 svg 转换为 png
【发布时间】:2019-05-23 17:05:22
【问题描述】:

我在使用 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 只接受字符串。

任何其他 php 转换方法都可以,因为 shell_exec 和类似的命令被禁用。如果在我们的测试服务器上我可以更改该值,但在将运行此代码的生产服务器上我无法更改任何内容。

现在我使用简单的代码:

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

【问题讨论】:

  • IMagick::setFont 不适用。使用的字体必须在服务器本地安装,没有办法绕过它。 @font-face 规则无法使用。如果IM实际使用的转换器是rsvg,即使是&lt;style&gt;标签也会失效;所有样式信息都需要直接在元素上的样式属性或其对应的表示属性中设置。 (检查您的生产服务器上的identify -list delegate | grep -i svg 使用了哪个转换器)
  • 它使用 rsvg-convert 作为命令。所以转换时应该需要font-family="Allan"。已经创建了 ~/.magick/type.xml 并指定了我放在 ~/fonts 目录中的所有字体。如果我使用以下字体列出字体:$image = new Imagick(); $fonts = $image-&gt;queryfonts(); foreach($fonts as $font) { echo $font . PHP_EOL; } 我确实会在其中获得自定义字体:AlexBrush AlfaSlabOne Alice Alike AlikeAngular Allan AllanB Allerta AllertaStencil 但是在转换时我仍然会在其中获得默认字体。关于如何解决它的任何想法?

标签: php svg imagick


【解决方案1】:

找到了我的问题的解决方案,需要在 defs 中包含 base64 字体。

看起来像

<style>
@font-face {
  font-family: 'ABeeZee';
  font-style: normal;
  font-weight: 400;
  src: local('ABeeZee Regular'), local('ABeeZee-Regular'), url(data:font/woff2;base64,...)
}
</style>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 2021-04-24
    • 2015-12-02
    • 2017-07-26
    • 1970-01-01
    相关资源
    最近更新 更多