在上篇文章中介绍了php操作DOM生成SVG。现因为功能需求需要将SVG转成png。
要将SVG文件转换为PNG文件,可以使用PHP中的GD库或ImageMagick库
使用GD库
<?php
// 创建一个空的画布
$width = 500;
$height = 500;
$image = imagecreatetruecolor($width, $height);
// 创建一个透明的背景
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparent);
imagesavealpha($image, true);
// 从SVG文件加载图像
$svg = simplexml_load_file('example.svg');
// 将SVG渲染到画布上
if ($svg !== false) {
$svgString = $svg->asXML();
$svgData = str_replace('xmlns="http://www.w3.org/2000/svg"', '', $svgString);
$imageSvg = imagecreatefromstring($svgData);
imagecopy($image, $imageSvg, 0, 0, 0, 0, $width, $height);
imagedestroy($imageSvg);
}
// 保存为PNG文件
imagepng($image, 'output.png');
// 释放资源
imagedestroy($image);
?>
使用ImageMagick库
<?php
// 创建ImageMagick对象
$image = new Imagick();
// 从SVG文件加载图像
$image->readImage('example.svg');
// 设置PNG输出格式
$image->setImageFormat('png');
// 保存为PNG文件
$image->writeImage('output.png');
// 释放资源
$image->clear();
$image->destroy();
?>
但是使用以上两种方法可能导致svg内容丢失:文本乱码, 线条丢失, 内容空白等问题。
所以可以使用 Inkscape 命令行工具来将 SVG 文件转换为 PNG。
Inkscape 是一款开源的矢量图形编辑软件,用于创建和编辑矢量图形,支持众多常见的矢量图形格式,如SVG、PDF、EPS等。它类似于Adobe Illustrator等专业的矢量图形编辑软件,但是是免费且开源的,可在多个平台上运行,包括Windows、Mac和Linux。
Inkscape的安装方法这里不在叙述,以下是代码示例:
<?php
// SVG 文件路径
$svgFile = 'input.svg';
// PNG 文件路径
$pngFile = 'output.png';
exec("inkscape z -e $pngFile $svgFile");
这里的参数含义是:
- z:无界面模式(即不打开图形用户界面)。
- -e $pngFile:指定输出文件为 PNG 格式,并指定输出文件的名称。
- $svgFile:指定输入的 SVG 文件。
如果遇到了转换生成png图片中文乱码丢失情况通常是因为程序无法正确加载或识别中文字体导致的。解决这个问题的一种方法是确保 Inkscape 能够正确找到并加载到系统中的中文字体,确保您的系统中已经安装了中文字体,例如宋体、微软雅黑等