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
- 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 guide, PyCairo reference和Cairo documentation.