【问题标题】:How to convert svg to png and center text with PHP?如何使用 PHP 将 svg 转换为 png 和居中文本?
【发布时间】:2020-06-02 11:29:42
【问题描述】:

我尝试使用 PHP 和 imagick 将 svg 转换为 png。本例中的 svg 代码是这样的:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="128" height="128">
    <path fill="#dc76e9" d="M0 0h16v16H0z"/>
    <text x="8" y="8" fill="#fff" text-anchor="middle" dy=".3em" font-family="Arial" font-size="7">RO</text>
</svg>

结果应该如下图所示:

但目前看起来是这样的:

我想将文本垂直居中。字体系列目前对我来说并不重要。

这是我的转换代码:

<?php
$svg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="128" height="128">
            <path fill="#dc76e9" d="M0 0h16v16H0z"/>
            <text x="8" y="8" fill="#fff" text-anchor="middle" dy=".3em" font-family="Arial" font-size="7">RO</text>
        </svg>';

$im = new Imagick();
$im->readImageBlob($svg);
$im->setImageBackgroundColor(new ImagickPixel('transparent'));

$im->setImageFormat("png24");
$im->resizeImage(128, 128, imagick::FILTER_LANCZOS, 1, true);
$im->writeImage("image.png");
$im->clear();
$im->destroy();

【问题讨论】:

    标签: php imagick


    【解决方案1】:

    看起来 ImageMagick 正在使用其自己的内部受限 MSVG 渲染引擎。它会完成工作,但它不理解我们期望从浏览器获得的大多数“基于网络”的指令。在这种情况下,dy=".3em"em 部分。

    我能想到的两个解决方案...

    • 安装 RSVG,并更新 ImageMagick 的代理
    • 删除 em 并手动更新 SVG。
    <text x="8" y="8" fill="#fff" text-anchor="middle" dy="1.3" font-family="Arial" font-size="7">RO</text>
                                                  <!-- ^^^^^^^^ -->
    

    【讨论】:

    • 也可以使用 Inkscape,它通常比 RSVG 更好。
    猜你喜欢
    • 2015-07-11
    • 2011-06-16
    • 2012-04-08
    • 2013-12-29
    • 2016-06-02
    • 2015-10-04
    • 2015-04-06
    • 1970-01-01
    相关资源
    最近更新 更多