名前でsvgファイルの一部をレンダリングしたいのですが、私の人生では、その方法がわかりません(python + gtkを使用)。
問題の svg ファイルは次のとおりです: http://david.bellot.free.fr/svg-cards/files/SVG-cards-2.0.1.tar.gz (更新:このファイルはもう存在しませんが、追跡できますhttp://svg-cards.sourceforge.net/でダウン)
彼のサイトで、David は次のように述べています。
ファイルをピックスマップにレンダリングし、各カードを手動でクリッピングするか、DOM インターフェイスを介してカードの名前を使用して、カードを描画できます。すべてのカードは SVG グループに埋め込まれています。
彼がDOMインターフェースで何を意味しているのかわかりません。私はいくつかの検索を行いましたが、私がやりたいことに合っていると思われる最良の結果は次のとおりです。
QSvgRenderer *renderer = new QSvgRenderer(QLatin1String("SvgCardDeck.svg"));
QGraphicsSvgItem *black = new QGraphicsSvgItem();
QGraphicsSvgItem *red = new QGraphicsSvgItem();
black->setSharedRenderer(renderer);
black->setElementId(QLatin1String("black_joker"));
red->setSharedRenderer(renderer);
red->setElementId(QLatin1String("red_joker"));
ただし、これは Qt 用であり、Python で書かれていないことに注意してください。
これは私がこれまでに持っているものです:
#!/usr/bin/env python
from __future__ import absolute_import
import cairo
import gtk
import rsvg
from xml import xpath
from xml.dom import minidom
window = gtk.Window()
window.set_title("Foo")
window.set_size_request(256, 256)
window.set_property("resizable", False)
window.set_position(gtk.WIN_POS_CENTER)
window.connect("destroy", gtk.main_quit)
window.show()
document = minidom.parse("cards.svg")
element = xpath.Evaluate("//*[@id='1_club']", document)[0]
xml = element.toxml()
svg = rsvg.Handle()
svg.write(xml)
pixbuf = svg.get_pixbuf()
image = gtk.Image()
image.set_from_pixbuf(pixbuf)
image.show()
window.add(image)
gtk.main()
もちろん、うまくいきません。
私は何が欠けていますか?