【发布时间】:2021-01-16 05:30:52
【问题描述】:
php中有没有办法将两个svg图像添加到一个svg中
类似于https://github.com/astraw/svg_stack中的python完成的事情
imagecopyresampled 无法输出到 svg。
Imagemagick 转换/蒙太奇似乎也只适用于位图
关于“对于 Web 开发人员来说并不是真正常见的需求”这句话
我的具体需要是创建一个由生成的 QR 和矢量标志组成的可下载 svg。
当您需要在网页上显示分层 svg 时,使用 javascript/html/css 解决方案可能会更容易。
解决方案
该问题已关闭,因为它被标记为“我们不允许针对软件库寻求建议的问题”
我正在发布我的解决方案,希望答案可以帮助其他一些迷失的灵魂;)。
我找到了这个包https://github.com/meyfa/php-svg并使用了以下代码:
//load qr code from file
$fileContent = SVG::fromFile('qr.svg');
$doc = $fileContent->getDocument();
//select logo from svg, scale and move it to the right position
$logo = SVG::fromFile('logo.svg')->getDocument();
$logo->getChild(0)->setAttribute('transform', "translate(73 10) scale(1.29)");
$doc->addChild($logo);
header('Content-Description: File Transfer');
header("Content-type: application/octet-stream");
header("Content-disposition: attachment; filename=videoQR.svg");
exit($fileContent);
【问题讨论】:
-
ImageMagick 是光栅处理器,而不是矢量。它将在堆叠两个 SVG 文件之前对其进行光栅化。 SVG 光栅化使用 Inkscape 或 RSVG 或 IM 内部 MSVG 渲染器完成,具体取决于您的配置。
convert svg1 svg2 -append result.png除非有可用的光栅到矢量处理器(例如 potrace),否则无法将结果保存为 SVG 文件。