7

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

尽管我设法使实际转换工作正常,但似乎 Imagemagick 在渲染图像时无法正确转换变换/旋转功能,从而使输出与原始 SVG 不同。

经过进一步研究,这似乎是一个已知问题,并且“Inkscape”是在 PHP 中将 SVG 转换为 jpeg/png 的最佳方法。

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

非常感谢您的任何建议。

4

2 回答 2

3

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

你需要类似的东西:

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

如果您接受来自用户的全部/部分 SVG 输入,请记住您需要牢记许多安全问题。如果需要,很高兴对此进行扩展。

于 2012-05-01T16:35:37.673 回答
3

您可以使用标准输入将 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);
于 2012-07-13T21:22:09.873 回答