我正在尝试使用 Linux 中的命令行在较大的 SVG 背景上叠加一个小的 SVG 徽标。我想确保小徽标位于背景的中心,并且最终输出仍然是 SVG 格式。
我有以下文件:
任何人都可以提供有关我可以用来实现此目的的 bash 命令的指导吗?
任何帮助将不胜感激!
谢谢!
我在命令行上尝试了 inkscape,但没有成功。 我尝试的其他方法仅输入一个 png,这不是我想要的。
您可以使用 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>