用于渲染SVG的GTK库称为RSVG。它具有python绑定,但是没有文档说明,并且没有包装通常在C中用于此目的的
rsvg_handle_get_pixbuf_sub()and
rsvg_handle_render_cairo_sub()函数。据我所知,这是您必须要做的。您按照Adam
Crossland的建议提取XML节点。要渲染它,您必须执行以下操作:
import gtkimport rsvghandle = rsvg.Handle()handle.write(buffer=xml_data) # xml_data is the XML string for the object you wantimage = gtk.Image()image.set_from_pixbuf(handle.get_pixbuf())
那是如果您要在中使用
gtk.Image,否则请使用pixbuf进行其他操作。您也可以将其渲染为与开罗的上下文
handle.render_cairo(cr),其中
cr是您的开罗上下文。
编辑:
抱歉,起初我没有足够仔细地阅读python绑定。这些
_sub()函数是使用
id=参数实现的,因此您的程序可以归结为:
#!/usr/bin/env pythonimport gtkimport rsvgwindow = gtk.Window()window.set_title("Foo")window.connect("destroy", gtk.main_quit)window.show()svg = rsvg.Handle(file='cards.svg')pixbuf = svg.get_pixbuf(id='#3_diamond')image = gtk.Image()image.set_from_pixbuf(pixbuf)image.show()window.add(image)gtk.main()我对此进行了测试,并且有效。但是,窗口是整个SVG画布的大小,并且被裁剪为屏幕大小(这就是为什么我渲染3颗钻石而不是拐角处的王牌A的原因。)因此,您仍然拥有找到某种方法在所需的卡上裁剪pixbuf,但这并不难。



