在没有 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的主要内容,如果未能解决你的问题,请参考以下文章