Imagick SVG无法加载图像

2022-06-30 00:00:00 image rendering svg php imagick

我遇到了由PHP Imagick库将SVG转换为图像的问题。 以下是我的代码:

$svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg style="overflow: hidden; position: relative;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="754" version="1.1" height="565">
    <defs></defs>
    <image transform="matrix(1,0,0,1,0,0)" preserveAspectRatio="none" x="0" y="0" width="754" height="565" xlink:href="http://1439.demo.tekk3.com/wp-content/uploads/2012/10/capapix_Harley_Davidson_FLSTCI_-_Heritage_Classic.jpg"></image>
</svg>';

$im = new Imagick();
$im->readImageBlob($svg);
$im->setImageFormat("jpeg");
$im->writeimage($attached_file);
$im->clear();
$im->destroy();

,结果是一个只有白色背景的图像。没有SVG显示的任何其他图像。

如果我将Text标记放入SVG字符串中,则只有文本以白色背景呈现。图像仍然缺失。

我已经安装了php5-Imagick、libxml2、Librsvg2-bin

是否需要安装其他扩展才能获得正确的结果? 或者我的代码中有什么问题?


解决方案

我找到了解决方法。我使用Base64镜像内容安装镜像路径。

$svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
        <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="754" version="1.1" height="565">
        <image x="0" y="0" width="754" height="565" xlink:href="'.imageToBase64('icons-weather_01.png').'"></image>
    </svg>';

function imageToBase64($path) {
    $type = pathinfo($path, PATHINFO_EXTENSION);
    $data = file_get_contents($path);
    return 'data:image/' . $type . ';base64,' . base64_encode($data);
}

如果可能的话,可以使用本地图像或Web URL。

相关文章