Maison >développement back-end >Problème PHP >Comment convertir le format svg au format png en php

Comment convertir le format svg au format png en php

青灯夜游
青灯夜游original
2021-05-21 15:25:004350parcourir

Comment convertir le format svg au format png en php : 1. Installez le plug-in d'extension php imagick et utilisez la fonction intégrée dans le plug-in pour convertir. 2. Convertissez d’abord l’image svg en image de toile, puis convertissez l’image de toile en image au format png.

Comment convertir le format svg au format png en php

L'environnement d'exploitation de ce tutoriel : système Windows7, version PHP7.1, ordinateur DELL G3

Implémentation SVG vers png

1.php plug-in d'extension imagick

a. Étudiez la méthode du plug-in imagick

$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 Les problèmes rencontrés

les images SVG peuvent être converties avec succès en png. images au format, mais images png Il y a des problèmes :

1) Le segment de ligne est manquant

2) La police n'est pas affichée

3) Le style de la balise de style ; dans le fichier svg ne peut pas être analysé ;

2 .Abandonnez le plug-in imagick et remplacez-le par svg en canevas en png

a.svg en canevas

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 en png (base64Src converti en 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 .Exemple d'effet

1) format svg

Comment convertir le format svg au format png en php

2) format png

Comment convertir le format svg au format png en php

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn