[英]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.