栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何渲染svg文件的“部分”?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何渲染svg文件的“部分”?

用于渲染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,但这并不难。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/646838.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号