2

RSVG 和 Cairo 是否可以在 SVG 图像中找到绘图的范围?

即不是页面宽度/高度,而是绘图元素实际使用的空间。

这不起作用,它只返回页面大小:

 img = rsvg.Handle(file="myfile.svg")
 (w, h, w2,h2) = svg.get_dimension_data() # gives document's declared size

这似乎没有返回任何有关大小的信息:

 svg.render_cairo(context) # returns None

这不起作用,它还会返回页面大小:

 self.svg.get_pixbuf().get_width()

这是 pygtk-all-in-one-2.24.0.win32-py2.7 和 RSVG 2.22.3-1_win32,在其中我找不到其他答案中提到的 get_dimensions_sub() 函数。

4

1 回答 1

1

我今晚搜索了网络试图解决这个看似简单的问题。似乎没有一种简单的方法可以使用 rsvg、cairo 或类似工具获取绘图的边界框。除非我遗漏了一些明显的东西。

--query-all但是,您可以使用该选项调用 Inkscape 。这将为您提供 SVG 文件中所有对象的尺寸,并将完整的绘图作为列表中的第一个条目。

import subprocess
output = subprocess.check_output(["inkscape", "--query-all", "myfile.svg"])
values = [line.split(',') for line in output.split('\n')]
whole_drawing = values[0]
[x, y, width, height] = map(float, whole_drawing[1:])

现在,您将在xy及其width和中获得绘图的位置height。有了这个,使用 rsvg 和 cairo 将剪辑的 SVG 重新绘制到新文件变得很简单。

我创建了一个简单的工具来做到这一点,我希望代码应该很容易理解。

于 2013-04-02T22:34:30.567 回答