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

时间:2012-05-01 16:31:33

标签: php svg inkscape

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

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

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

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

非常感谢任何建议。

2 个答案:

答案 0 :(得分:3)

您可以使用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);

答案 1 :(得分:2)

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

你需要这样的东西:

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

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