PyCairo指南–簡介

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

PyCairo簡介

這是PyCairo指南。這份指南將基於Python語言,教給你Cairo 2D庫基本的和一些高階的主題。在大多數例子中,我們將會使用Python GTK後端來產生我們的輸出。本指南中所用到的那些圖片可以在此處下載。

 

計算機圖形

有兩種不同的計算機圖形。向量圖和光柵圖。光柵圖以一個畫素的集合來表示圖片。向量圖使用幾何元素,比如點,直線,曲線或者多邊形來表示圖片。這些元素使用數學方程式來建立。

兩種計算機圖形型別都有優點和缺點。向量圖相對於光柵圖的優點是:

佔用空間小
具有無限放大的能力
移動,縮放,填充或者旋轉不會降低一幅圖片的質量

Cairo

Cairo是一個用於建立2D向量圖的庫。它是用C程式語言寫的。已經有一些到其他計算機語言的繫結出現了。Python,Perl,C ,C#,Java。Cairo是一個多平臺的庫,可以工作於Linux,BSDs和OSX上。

Cairo支援多種後端。後端是用於顯示所建立的圖形的輸出裝置。

 

X Window System
Win32 GDI
Mac OS X Quartz
PNG
PDF
PostScript
SVG

這意味著,我們可以使用Cairo庫在Linux/BSDs,Windows,OSX的視窗中繪製圖形,同時也可以使用這個庫來建立PNG影象,PDF檔案,PostScript檔案和SVG檔案。

我們可以對比cairo庫和Windows OS上的GDI 庫,及Mac OS上的Quartz 2D庫。Cairo是一個開源軟體庫。自2.8版起,Cairo就是GTK系統的一部分了。

 

定義

這裡我們將提供一些有用的定義。為了使用PyCairo繪製一些東西,我們必須先建立一個繪製上下文( drawing context ).繪製上下文包含描述如何繪製的所有的圖形狀態引數。這包括線的寬度,顏色,繪製到的surface和許多其他東西的資訊。這將使得實際的繪圖函式可以接收更少的引數而簡化介面。

一個path是一個用於建立基本形狀如直線,圓弧和曲線等的點的集合。有兩種型別的paths。開的和閉合的paths。在一個閉合的path中,起點和終點相接。在一個開的path中,起點與終點不相接。在PyCairo中,我們以一個空的path開始。首先,我們定義一個path,然後我們通過stroking和/或填充它們來使其可見。每一次呼叫stroke()或者fill()方法之後,path會被清空。我們不得不定義一個新的path。如果我們想要在繪製之後保持既有的path,我們可以使用stroke_preserve()fill_preserve()方法。一個path由subpaths組成。

一個source是我們繪製時所用的畫筆。我們可以把source看作一支筆或者墨水,我們使用它們來畫輪廓線或者填充形狀。總共有四種型別的基本source,顏色(Colors),漸變(gradients),模式(patterns)和影象(images)。

一個surface是我們將要繪製的一個目的地。我們可以使用PDF或者PostScript surfaces來渲染文件,或者可以通過Xlib和Win32 surfaces來直接繪製到平臺上。

在source被應用於surface之前,它會先被過濾。mask被用作一個濾鏡。它決定什麼地方的source被應用,而什麼地方的不應用。mask不透明的部分允許複製自source。透明的部分不允許由source複製到surface。

一個pattern代表往一個surface繪製時的一個source。在PyCairo中,一個pattern是你可以從中讀取,並用作一個繪製操作的source或者mask之類的東西。Patterns可能是純淨的,surface-based或者漸變。

來源

為了建立這份指南,我們使用了一些資料。包括Apple Cocoa drawing guidePyCairo referenceCairo documentation.

 

原文


(adsbygoogle = window.adsbygoogle || []).push({});

function googleAdJSAtOnload() {
var element = document.createElement(“script”);
element.src = “//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js”;
element.async = true;
document.body.appendChild(element);
}
if (window.addEventListener) {
window.addEventListener(“load”, googleAdJSAtOnload, false);
} else if (window.attachEvent) {
window.attachEvent(“onload”, googleAdJSAtOnload);
} else {
window.onload = googleAdJSAtOnload;
}

人工智慧 最新文章