svgwrite - 如何在现有.svg文件中添加其他对象作为层

5 投票
2 回答
3938 浏览
提问于 2025-04-18 03:09

我有一个svg文件,我想在这个已有的文件里面插入其他的svg对象。

import svgwrite

dwg = svgwrite.Drawing('model.svg')
square = dwg.add(dwg.rect(20,20),(80,80), fill='blue'))
dwg.save()

但是这样做会生成一个新文件,里面只有我新加的形状,之前的文件内容都被忽略了。我该怎么写才能解决这个问题呢?

谢谢!

2 个回答

3

svgwrite这个库不支持你想要的功能——它的主要作用是创建新的SVG文件,而不是处理已经存在的文件。如果你查看这个Drawing类的源代码,你会发现当你保存你的图形时,它会打开文件进行写入,并且会清空文件;这意味着之前在文件里的内容会被删除:

def save(self):
    """ Write the XML string to **filename**. """
    fileobj = io.open(self.filename, mode='w', encoding='utf-8')
    self.write(fileobj)
    fileobj.close()
11

我找到一个模块可以做到这一点。

import svgutils.transform as st

template = st.fromfile('template.svg')
second_svg = st.fromfile('second.svg')
template.append(second_svg)
template.save('merged.svg')

希望这个对你也有用。

撰写回答