Heim  >  Artikel  >  Backend-Entwicklung  >  So konvertieren Sie SVG in PHP in PNG

So konvertieren Sie SVG in PHP in PNG

藏色散人
藏色散人Original
2020-08-22 09:20:473236Durchsuche

So konvertieren Sie SVG in PNG in PHP: Konvertieren Sie zuerst SVG in Canvas mit der Methode „drawInlineSVG“ und verwenden Sie dann die Methode „base64_image_content“, um Canvas in PNG zu konvertieren.

So konvertieren Sie SVG in PHP in PNG

Empfohlen: „PHP-Video-Tutorial

SVG-zu-PNG-Implementierung

1.php Imagick-Erweiterungs-Plugin

a. Studieren Sie die Imagick-Plugin-Methode

$im = new Imagick($upload_path . $file_name);
$svg = file_get_contents($upload_path . $file_name);
$svg = &#39;<?xml version="1.0" encoding="UTF-8" standalone="no"?>&#39;.$svg;
$im->readImageBlob($svg);

// png settings
$im->setImageFormat("png24");
$srcImage = $im->getImageGeometry(); //获取源图片宽和高
$im->resizeImage($srcImage[&#39;width&#39;], $srcImage[&#39;height&#39;], imagick::FILTER_LANCZOS, 1, false);

$im->writeImage($upload_path.&#39;/&#39;.$topng_name.&#39;.png&#39;);
$im->clear();
$im->destroy();

b

svg Das Bild kann erfolgreich in ein PNG-Bild konvertiert werden, es gibt jedoch Probleme mit dem PNG-Bild:

1) Liniensegmente fehlen

2) Schriftarten werden nicht angezeigt

3) Der Stil-Tag-Stil in der SVG-Datei kann nicht analysiert werden;

2. Imagick ist veraltetes Plug-in, wechseln Sie von SVG zu Canvas zu PNG

a.svg zu Canvas

function drawInlineSVG($svg, callback) {
    var svg = $svg;

    var parser = new DOMParser();
    var doc = parser.parseFromString(svg, "text/xml");
    svg = doc.getElementsByTagName(&#39;svg&#39;);
    svg = svg[0];

    svg.innerHTML = &#39;<rect width="100%" height="100%" fill="#ffffff"></rect>&#39; + svg.innerHTML;
    var svgData = new XMLSerializer().serializeToString( svg );

    var img = document.createElement( "img" );
    img.setAttribute( "src", "data:image/svg+xml;base64," + btoa( unescape(encodeURIComponent(svgData)) ) );
    img.onload = function () {
        var canvas = document.createElement( "canvas" );

        canvas.width = img.width;
        canvas.height = img.height;
        var ctx = canvas.getContext( "2d" );  //取得画布的2d绘图上下文
        ctx.drawImage( img, 0, 0 );
        canvas.toDataURL( "image/png" );
        var base64Src = canvas.toDataURL( "image/png" );
        callback && callback(base64Src); // 调用回掉函数
    };
	return;
}

b.canvas zu PNG (base64Src konvertiert zu PNG)

/* base64格式编码转换为图片并保存对应文件夹 */
function base64_image_content($base64_image_content,$path, $file_name = &#39;&#39;){
    //匹配出图片的格式
    if (preg_match(&#39;/^(data:\s*image\/(\w+);base64,)/&#39;, $base64_image_content, $result)){
        if(!file_exists($path)){
            // 路径不存在
        	return false;
        }
        $new_file = $path . $file_name;
        if (file_put_contents($new_file, base64_decode(str_replace($result[1], &#39;&#39;, $base64_image_content)))){
            return &#39;/&#39;.$new_file;
        }else{
            return false;
        }
    }else{
        return false;
    }
}

c. Effektbeispiel

1) SVG-Format

2) PNG-Format

Das obige ist der detaillierte Inhalt vonSo konvertieren Sie SVG in PHP in PNG. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn