pygtk / rsvg - 获取绘图的大小?

时间:2012-05-25 17:54:10

标签: pygtk pycairo rsvg

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()函数。

1 个答案:

答案 0 :(得分: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及其widthheight中拥有绘图的位置。有了这个,使用rsvg和cairo将剪切的SVG重绘为新文件变得很简单。

我创建a simple tool来执行此操作,我希望the code应该很容易理解。

相关问题