【问题标题】:Stack/Merge two svg images in php [closed]在php中堆叠/合并两个svg图像[关闭]
【发布时间】: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 文件。

标签: php svg


【解决方案1】:

上面的 ImageMagick 专家 (fmw42) 给出了很好的答案。我快速检查了您引用的 Python 脚本,它似乎只是在另一个下方添加了两个 SVG 文件。

您可以使用 PHP 进行类似的合并。使用的方法可能会根据您的需要而有所不同。最简单的方法是将新的 SVG 定义为只有标签的字符串变量,添加两个文件的内容并用结束标签结束包装 SVG。这是因为 SVG 文件可以嵌入到其他 SVG 文件中。

【讨论】:

  • 好吧,我就是这么想的。 SVG 就像 XML。您可以复制第二张图像。删除父标签并将其添加到第一个图像的父级?这听起来微不足道,奇怪的是在 php 中没有一些包。
  • 是的,正如您所描述的。挑战可能是匹配合并图像的尺寸(至少宽度),可能覆盖它们等。所以无论哪种方式,您都必须进行一些属性收集(SVG 根元素、宽度和高度属性或 viewBox 属性)并调整它们输出 SVG。关于 PHP 存储库中的包等,对于 Web 开发人员来说,这种操作并不是很常见,你不觉得吗?如果需要,它可以相对容易地编写脚本,而对于 Web 动画,您通常可以编写脚本来为(相同的)SVG 文件中的对象设置动画。
  • 希望反馈,我找到了解决方案,但有人关闭了这个.. 通过使用 github.com/meyfa/php-svg 并且以下代码使用 SVG\SVG;使用 SVG\Nodes\Shapes\SVGRect; $image = SVG::fromFile('qr.svg'); $doc = $image->getDocument(); $file = SVG::fromFile('logo.svg'); $doc2 = $file->getDocument(); $doc->addChild($doc2);回声 $image;
  • 当然,使用任何 SVG 库(或使用纯 javascript 脚本 DOM)都应该可以完成您所做的事情。要真正匹配两个图像,您应该添加额外的脚本,正如我在上面的评论中描述的那样。
猜你喜欢
  • 1970-01-01
  • 2018-11-08
  • 2012-10-10
  • 2012-02-10
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
  • 1970-01-01
相关资源
最近更新 更多