繁体   English   中英

如何使用 PHP 将 svg 转换为 png 和居中文本?

[英]How to convert svg to png and center text with PHP?

我尝试使用 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();

看起来 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>
                                              <!-- ^^^^^^^^ -->

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM