SVG到PNG在PHP中不起作用 [英] svg to png is not working in php

查看:93
本文介绍了SVG到PNG在PHP中不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用imagick将svg转换为png.但是我的svg包含嵌入的图像.因此在将其转换为png时不会呈现嵌入的图像.

I am using the imagick to convert svg to png. But my svg contain embedded images in it. so while converting it to png does not render the embedded image.

$image = new \Imagick();
try{
    $file_name = uniqid($prefix).".jpeg";
    $image->readImageBlob($raw_svg);
    $image->setImageFormat("png24");
    $image->writeImage("$folder_name/".$file_name);
} catch (ImagickException $ex) {
    echo $ex->getMessage();
}

SVG数据

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600" height="400" viewBox="0 0 600 400" xml:space="preserve">
<desc>Created with Fabric.js 2.0.0-beta7</desc>
<defs>
</defs>
<rect x="0" y="0" width="600" height="400" fill="#000000"></rect>
    <g transform="translate(300.77 141.27) scale(2.45 2.26)">
        <text xml:space="preserve" font-family="Dollar2" font-size="22" font-style="normal" font-weight="normal" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(255,255,255); fill-rule: nonzero; opacity: 1; white-space: pre;" >
            <tspan x="-117.34" y="6.91" >Back Side</tspan>
        </text>
    </g>
<g transform="translate(289.57 247.98) scale(0.35 0.35)">
    <image xlink:href="data:image/png;base64,iVBORw0KGgoAAAANtTyE2NP5d9xZHM0bHtWwv3UYAuCINIplLWR8DS0uSOiTGLf1D2r/s3a8rxSbGLsVX4jt7nWc7JwHa/hqcyfVf6ZPmZ/u79nun+mTHHP6VX+t6lO+PckRyonYcOdqNETPJtLnBs89dwI0s7Y24alIM0g883zrzOP61/GnsT/6p607++djHcyJo6rcpFOQRCyjv8TYAAeI+bBrle9xgAAAABJRU5ErkJggg==" x="-334.5" y="-173.5" style="stroke: rgb(240,240,240); stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0,0,0); fill-opacity: 0; fill-rule: nonzero; opacity: 1;" width="669" height="347"></image>
<rect x="-334.5" y="-173.5" width="669" height="347" style="stroke: rgb(240,240,240); stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: none; fill-rule: nonzero; opacity: 1;"/>
</g>
</svg>


推荐答案

更改以下内容即可解决上述问题: php版本:5.5

Above is get resolved after changing the below: php version: 5.5

apt-get install php5-imagick
apt-get install graphicsmagick-imagemagick-compat
apt-get安装imagemagick
apt-get install build-essential checkinstall&& apt-get build-dep imagemagick -y

apt-get install php5-imagick
apt-get install graphicsmagick-imagemagick-compat
apt-get install imagemagick
apt-get install build-essential checkinstall && apt-get build-dep imagemagick -y

要添加自定义字体:
将所有自定义字体(ttf文件)复制到以下位置:

To add custom fonts:
copy all custom font(ttf file) to below location:

/usr/share/fonts/truetype

/usr/share/fonts/truetype

然后

fc-cache -v/usr/share/fonts

fc-cache -v /usr/share/fonts

这篇关于SVG到PNG在PHP中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆