在花了两天的时间尝试使用ImageMagick从SVG字符串中栅格化jpeg后,我终于放弃了。
虽然我设法让实际的转换工作正常但是Imagemagick在渲染图像时无法正确转换变换/旋转功能,使输出与原始SVG不同。
进一步研究后,似乎这是一个已知问题,'Inkscape'是用于在PHP中将SVG转换为jpeg / png的最佳方法。
问题是我的SVG数据是通过JSON发送到我的PHP脚本的。如何将一个blob或字符串放入Inkscape命令行以便将其转换?
非常感谢任何建议。
答案 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输入,请记住,您需要牢记许多安全问题。如果需要,很高兴扩展这一点。