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

如何使用PHP将svg转换为png和中心文本?,php,imagick,Php,Imagick,我尝试用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"

我尝试用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();
readImageBlob($svg);
$im->setImageBackgroundColor(新的ImagickPixel(“透明”);
$im->setImageFormat(“png24”);
$im->resizeImage(128128,imagick::FILTER_LANCZOS,1,true);
$im->writeImage(“image.png”);
$im->clear();
$im->destroy();

看起来ImageMagick正在使用自己的内部有限的MSVG渲染引擎。它可以完成任务,但它无法理解我们期望从浏览器获得的大多数“基于网络”的指令。在这种情况下,
em
dy=“.3em”
的一部分

我能想到两个解决方案

  • 安装并更新ImageMagick的代理
  • 移除
    em
    并手动更新SVG
RO

也可以使用Inkscape,它通常比RSVG更好。