Linux 命令行将一个 SVG 文件覆盖到另一个文件上

问题描述 投票:0回答:1

我正在尝试使用 Linux 中的命令行在较大的 SVG 背景上叠加一个小的 SVG 徽标。我想确保小徽标位于背景的中心,并且最终输出仍然是 SVG 格式。

我有以下文件:

  • background.svg(较大的 SVG 文件)
  • logo.svg(较小的 SVG 徽标)

任何人都可以提供有关我可以用来实现此目的的 bash 命令的指导吗?

任何帮助将不胜感激!

谢谢!

我在命令行上尝试了 inkscape,但没有成功。 我尝试的其他方法仅输入一个 png,这不是我想要的。

svg
1个回答
0
投票

您可以使用 xsltproc 将两个 SVG 合并为一个。这个想法是 SVG 文档中的 SVG 元素可以有 SVG 子元素。

鉴于此背景.svg:

<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 200 100" xmlns="http://www.w3.org/2000/svg">
  <rect width="200" height="100" fill="gray" />
</svg>

还有这个 logo.svg:

<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 100 100" width="50" height="50" xmlns="http://www.w3.org/2000/svg">
  <circle cx="50" cy="50" r="50" fill="orange" />
</svg>

您可以使用此 XSL 样式表 (style.xsl) 来组合它们:

<?xml version="1.0"?>
<xsl:stylesheet version="1.1"
  xmlns="http://www.w3.org/2000/svg"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 300">
      <xsl:copy-of select="."/>
      <g transform="translate(300 150) translate(-25 -25)">
        <xsl:copy-of select="document('logo.svg')" />
      </g>
    </svg>
  </xsl:template>
  
</xsl:stylesheet>

使用此命令:

xsltproc -o output.svg style.xsl background.svg

输出将是:

<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 300">
  <svg viewBox="0 0 200 100">
    <rect width="200" height="100" fill="gray"/>
  </svg>
  <g transform="translate(300 150) translate(-25 -25)">
    <svg viewBox="0 0 100 100" width="50" height="50">
      <circle cx="50" cy="50" r="50" fill="orange"/>
    </svg>
  </g>
</svg>
© www.soinside.com 2019 - 2024. All rights reserved.