繁体   English   中英

如何使用Inkscape将SVG字符串转换为jpg

[英]How to convert an SVG string into a jpg with Inkscape

花了两天时间尝试使用ImageMagick从SVG字符串中栅格化jpeg后我终于放弃了。

虽然我设法让实际转换工作正常但是Imagemagick在渲染图像时无法正确转换变换/旋转功能,使输出与原始SVG不同。

进一步研究后,似乎这是一个已知问题,'Inkscape'是用于在PHP中将SVG转换为jpeg / png的最佳方法。

问题是我的SVG数据是通过JSON发送到我的PHP脚本的。 如何将一个blob或字符串添加到Inkscape命令行中以便将其转换?

非常感谢任何建议。

您可以使用stdin将SVG字符串传递给inkscape,但代码的可移植性较差。

// Open Inkscape process
$process = proc_open(
    '/path/to/inkscape -z -f /dev/fd/0 -e /path/to/output' 
    array(0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w')), 
    $pipes
);

// Write svg to stdin
fwrite($pipes[0], $svg);

// Close process
foreach ($pipes as $pipe) fclose($pipe);
proc_close($process);

如果您有一个SVG字符串,并且您通过AJAX将其从浏览器发送到服务器,则需要将其写入临时文件,因此可以从Inkscape命令行引用它。 您无法使用Inkscape命令行渲染为JPEG,但您可以轻松渲染为PNG,如果您确实需要不同的格式,当然您可以随后使用ImageMagick进行转换。

你需要这样的东西:

/path/to/inkscape \
    --without-gui \
    --export-png=/path/to/output.png \
    /tmp/file/input.svg

如果您接受用户的完整/部分SVG输入,请记住,您需要记住许多安全问题。 如果需要,很高兴扩展这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM