在没有 ImageMagick 的情况下从 SVG XML 创建 PNG

Posted

技术标签:

【中文标题】在没有 ImageMagick 的情况下从 SVG XML 创建 PNG【英文标题】:Create PNG from SVG XML without ImageMagick 【发布时间】:2013-07-03 11:59:19 【问题描述】:

在服务器端,我有一个生成的 SVG XML 源代码。 应将其更改为图像,以便从 SVG XML 代码提供 PNG(或 JPG)下载。 网上搜了半天,只找到了这个使用ImageMagick的解决方案。 Convert SVG image to PNG with php 但我无法访问 ImageMagick 库,因此我需要一种不同的方法将 SVG XML 代码转换为位图图像。

有人有想法吗?

借用:保存 svg 并在操作系统上执行二进制文件或脚本以进行转换不是一个选项。

谢谢。

【问题讨论】:

您的意思是您动态创建 SVG,并且需要提供 PNG 文件吗?你能提供更多细节吗?您是否正在尝试解决跨浏览器问题? Inkscape 可以将 SVG 导出为 PNG(另存为似乎还不行),但这似乎不符合我理解的要求。 您查看过Batik、How to convert SVG into PNG on-the-fly 和Is there some Java library for converting .svg to .png or .jpg at code? 吗?他们使用java,但你应该能够连接它。 @andy256 不,这不是跨浏览器的主题。在此 Web 应用程序中,用户可以创建 svg。所以所有图形信息洞察应用程序都是svg代码。创建 svg 后,应该可以将此 svg 下载/导出为 png。对于这种情况,Web 应用程序必须将 SVG 渲染为 png。 (jpg也是一种选择)。我已经检查了你的链接。但我不确定该解决方案是否适合该问题。因为我不知道,如何执行 Java 代码洞察 PHP 解释器(生成网站) 好的,我们现在已经超出了我的专业范围。我看到有一个Php-Java bridge 可以在后端使用(以及其他技术),另一种可能性是构建一个可以在前端调用(从javascript)的Java小程序...... 【参考方案1】:

您需要使用蜡染库。下载它,放在你项目的某个地方。然后在 php 中使用 shell_exec() 函数调用 batik 命令。将需要几秒钟的时间将您的 svg 转换为 png。

示例:-

outputfile ='path where you want to lace png'
$tempSVG_filename = '/var/www' . $baseUrl . '/png/temp.svg';
$tempSVG_handle = fopen($tempSVG_filename, 'w+');
fwrite($tempSVG_handle, $YourSVG);
fclose($tempSVG_handle);
$mimetype = 'image/png';
$width = '6000';

$result = shell_exec('java  -jar /var/www/svgtopng/batik-1.7/batik-rasterizer.jar -m ' . $mimetype . ' -d ' . $outputfile . ' -w ' . $width . ' ' . $tempSVG_filename . ' 2>&1');
 unlink($tempSVG_filename);

【讨论】:

感谢您的回答,但它不适合我的问题,因为:It's not an option to save that svg an execute an binary or script on operating system to convert。但这正是您的建议。

以上是关于在没有 ImageMagick 的情况下从 SVG XML 创建 PNG的主要内容,如果未能解决你的问题,请参考以下文章

使用textpath将ImageMagick SVG添加到JPG

sh 使用ImageMagick将SVG转换为favicon.ico

Right ImageMagick 通过 php 从 yr.no 将 svg 转换为 png

ImageMagick:如何在没有背景的情况下使用 mogrify 按比例调整大小

在没有 libreoffice 的情况下从 word 创建 pdf

在没有 Segue 的情况下从 UITableViewCell 打开视图控制器