PyCairo 后端
PyCairo支持多種不同的后端。后端是PyCairo產生的圖形可以顯示的地方。我們將使用PyCairo來創建一幅PNG圖像,一個PDF文件,一個SVG文件,并將在一個GTK窗口中繪制。
PNG 圖像
在第一個例子中,我們將創建一幅 PNG 圖像。
#!/usr/bin/python ''' ZetCode PyCairo tutorialThis program uses PyCairo to produce a PNG image.author: Jan Bodnar website: zetcode.com last edited: August 2012 '''import cairodef main():ims = cairo.ImageSurface(cairo.FORMAT_ARGB32, 390, 60)cr = cairo.Context(ims)cr.set_source_rgb(0, 0, 0)cr.select_font_face("Sans", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)cr.set_font_size(40)cr.move_to(10, 50)cr.show_text("Diszip ist Macht.")ims.write_to_png("image.png")if __name__ == "__main__":main()這是一個小小的終端命令行應用程序,它會創建一幅 PNG 圖像。
import cairo我們導入PyCairo模塊。
ims = cairo.ImageSurface(cairo.FORMAT_ARGB32, 390, 60)cr = cairo.Context(ims)我們創建一個surface,并由這個surface創建一個cairo上下文。這個Surface是一幅390×60px的圖像。
cr.set_source_rgb(0, 0, 0)我們將用黑色墨水來畫我們的文字。
cr.select_font_face("Sans", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)cr.set_font_size(40)我們選擇一種字體類型并設置它的大小。
cr.move_to(10, 50)cr.show_text("Diszip ist Macht.")我們移動到圖像的x=10.0,y=50.0位置,并繪制文字。
ims.write_to_png("image.png")這個方法調用創建PNG圖像。
Figure: PNG image in Image Viewer
PDF 文件
在第二個例子中,我們創建一個簡單的PDF文件。
#!/usr/bin/python ''' ZetCode PyCairo tutorialThis program uses PyCairo to produce a PDF image.author: Jan Bodnar website: zetcode.com last edited: August 2012 '''import cairodef main():ps = cairo.PDFSurface("pdffile.pdf", 504, 648);cr = cairo.Context(ps)cr.set_source_rgb(0, 0, 0)cr.select_font_face("Sans", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)cr.set_font_size(40)cr.move_to(10, 50)cr.show_text("Diszip ist Macht.")cr.show_page()if __name__ == "__main__":main()我們必須在一個pdf viewer中打開一個pdf文件。Linux用戶可以使用KPDF或者Evince viewers。
ps = cairo.PDFSurface("pdffile.pdf", 504, 648);為了渲染一個pdf文件,我們必須使用cairo.PDFSurface對象來創建一個pdf surface。pdf文件的大小以點為單位來指定,這也是排字的一個標準。
cr.show_page()show_page()結束對于pdf文件的渲染。
Figure: PDF file in Document Viewer
SVG 文件
在下一個例子中創建一個簡單的SVG(Scalable Vector Graphics)文件。SVG文件是一個基于XML的文件格式。
#!/usr/bin/python ''' ZetCode PyCairo tutorialThis program uses PyCairo to produce a SVG image.author: Jan Bodnar website: zetcode.com last edited: August 2012 '''import cairodef main():ps = cairo.SVGSurface("svgfile.svg", 390, 60);cr = cairo.Context(ps)cr.set_source_rgb(0, 0, 0)cr.select_font_face("Sans", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)cr.set_font_size(40)cr.move_to(10, 50)cr.show_text("Diszip ist Macht.")cr.show_page()if __name__ == "__main__":main()我們可以使用一個web瀏覽器,比如Google Chrome或者一個向量繪圖程序,比如Inkscape來打開一個SVG文件。
ps = cairo.SVGSurface("svgfile.svg", 390, 60);在PyCairo中創建一個SVG文件,我們必須使用cairo.SVGSurface對象創建一個svg surface。
Figure:SVG file in Chrome
GTK窗口
在最后一個例子中,我們將在一個GTK窗口中進行繪制。這個后端也將被用于被指南后面的所有的例子中。
#!/usr/bin/python ''' ZetCode PyCairo tutorialThis program uses PyCairo to draw on a window in GTK.author: wolf-cs website: http://my.oschina.net/wolfcs/blog last edited: May 2013 '''import gtk import cairoclass Example(gtk.Window):def __init__(self):super(Example, self).__init__()self.init_ui()print "Example: " + str(self)def init_ui(self):darea = gtk.DrawingArea()darea.connect("expose_event", self.expose)self.add(darea)self.set_title("GTK window")self.resize(420, 120)self.set_position(gtk.WIN_POS_CENTER)self.connect("delete-event", gtk.main_quit)self.show_all()def expose(self, widget, event):self.context = widget.window.cairo_create()self.on_draw(420, self.context)print "expose: " + str(widget)def on_draw(self, wid, cr):cr.set_source_rgb(0, 0, 0)cr.select_font_face("Sans", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)cr.set_font_size(40)cr.move_to(10, 50)cr.show_text("Diszip ist Macht.")def main():window = Example()gtk.main()if __name__ == "__main__":main()這個例子彈出一個位于屏幕中央的GTK窗口,該窗口中繪制有內容為”Disziplin ist Macht”的文字。
import gtk import cairo我們導入需要的PyCairo和GTK模塊。
darea = gtk.DrawingArea()我們將會在一個gtk.DrawingArea widget上進行繪制。
darea.connect("expose_event", self.expose)當一個窗口被重繪的時候,會產生一個expose_event信號。我們將那個信號連接到expose()回調。
def expose(self, widget, event):self.context = widget.window.cairo_create()self.on_draw(420, self.context)在expose()回調中,我們創建cairo context。然后,繪制的動作在on_draw()方法的內部完成。第三個參數是cairo上下文,由expose()創建。Cairo庫是GTK系統內建的。
Figure: GTK window
本章中,我們已經覆蓋了PyCairo所支持的所有的后端了。
原文
Done.
總結
以上是生活随笔為你收集整理的PyCairo 后端的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PyCairo简介
- 下一篇: PyCairo 中的基本绘图