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()函数。
答案 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:])
现在,您将在x
,y
及其width
和height
中拥有绘图的位置。有了这个,使用rsvg和cairo将剪切的SVG重绘为新文件变得很简单。
我创建a simple tool来执行此操作,我希望the code应该很容易理解。