日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PyCairo 后端

發布時間:2024/4/11 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 后端的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。