2012-05-25 60 views
2

RSVG和Cairo有可能在SVG圖像中查找圖形的範圍嗎?pygtk/rsvg - 獲取繪圖大小?

即不是頁面寬度/高度,而是繪圖元素實際使用的空間。

這是不行的,它只是返回頁面大小:

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的所有功能於一身的-2.24.0.win32-py2.7和RSVG 2.22.3-1_win32 ,其中我找不到其他答案中提到的get_dimensions_sub()函數。

回答

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應該比較容易理解。