Python Cairo库的使用教程及代码案例

 更新时间:2025年04月09日 09:12:28   作者:老胖闲聊  
Cairo库是一个开源的2D图形库,支持矢量图形的绘制,它广泛应用于X Window System,用于制作高质量的图形输出,本文给大家介绍了Python Cairo库的使用教程及代码案例,需要的朋友可以参考下

一、Cairo 简介

Cairo 是一个2D矢量图形库,支持多种输出设备(如PNG、PDF、SVG、窗口系统)。PyCairo 是 Cairo 的 Python 绑定,允许通过 Python 代码实现高质量的图形绘制。

二、安装 PyCairo

# 通过 pip 安装(注意包名可能是 pycairo 或 cairo)
pip install pycairo

三、基础概念与核心类

  1. Surface(表面)
    表示绘图的目标介质(如内存、文件、窗口)。常见类型:

    • ImageSurface: 位图图像(如PNG)
    • PDFSurface: PDF 文件
    • SVGSurface: SVG 矢量图
  2. Context(上下文)
    控制绘图操作的核心对象,管理路径、颜色、变换等绘图状态。

四、基础绘图方法

示例1:绘制简单图形(PNG)

import cairo

# 1. 创建 Surface 和 Context
width, height = 400, 300
surface = cairo.ImageSurface(cairo.Format.ARGB32, width, height)
ctx = cairo.Context(surface)

# 2. 设置背景色
ctx.set_source_rgb(0.9, 0.9, 0.9)  # RGB 范围 0~1
ctx.paint()  # 填充整个表面

# 3. 绘制红色矩形
ctx.set_source_rgb(1, 0, 0)         # 红色
ctx.rectangle(50, 50, 100, 80)      # (x, y, width, height)
ctx.fill()                          # 填充形状

# 4. 绘制蓝色边框圆形
ctx.arc(250, 150, 40, 0, 2 * 3.14159)  # (x, y, radius, start_angle, end_angle)
ctx.set_source_rgb(0, 0, 1)            # 蓝色
ctx.set_line_width(3)                  # 线宽
ctx.stroke()                           # 描边路径

# 5. 保存为 PNG
surface.write_to_png("basic_shapes.png")

注释说明:

  • set_source_rgb(): 设置绘图颜色(RGB值)。
  • rectangle() 和 arc(): 定义路径形状。
  • fill() 和 stroke(): 分别表示填充路径和绘制路径边框。
  • write_to_png(): 将结果保存为PNG文件。

五、高级特性

1. 坐标变换

# 平移、旋转、缩放示例
ctx.save()                  # 保存当前状态
ctx.translate(200, 150)     # 移动原点至 (200,150)
ctx.rotate(0.25 * 3.14159)  # 旋转45度(弧度制)
ctx.scale(2, 2)             # 缩放2倍
ctx.rectangle(-20, -20, 40, 40)  # 绘制正方形
ctx.set_source_rgb(0, 1, 0)
ctx.fill()
ctx.restore()               # 恢复之前保存的状态

2. 渐变填充

# 线性渐变
linear = cairo.LinearGradient(0, 0, 300, 300)
linear.add_color_stop_rgba(0, 1, 0, 0, 1)    # 起点红色
linear.add_color_stop_rgba(1, 0, 0, 1, 0.5)  # 终点半透明蓝色
ctx.set_source(linear)
ctx.rectangle(50, 50, 200, 200)
ctx.fill()

3. 路径操作与曲线

# 绘制贝塞尔曲线
ctx.move_to(50, 200)                # 起点
ctx.curve_to(100, 50, 200, 350, 350, 200)  # 控制点1, 控制点2, 终点
ctx.set_source_rgb(0.5, 0, 0.5)
ctx.set_line_width(4)
ctx.stroke()

4. 文本渲染

# 设置字体并绘制文本
ctx.select_font_face("Arial", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
ctx.set_font_size(30)
ctx.move_to(50, 100)
ctx.set_source_rgb(0, 0, 0)
ctx.show_text("Hello Cairo!")  # 绘制文本

六、综合案例:绘制复杂图形

import cairo

# 初始化
surface = cairo.ImageSurface(cairo.Format.ARGB32, 600, 400)
ctx = cairo.Context(surface)
ctx.set_source_rgb(1, 1, 1)
ctx.paint()

# 绘制渐变背景
gradient = cairo.RadialGradient(300, 200, 10, 300, 200, 300)
gradient.add_color_stop_rgba(0, 0.8, 0.8, 1, 1)
gradient.add_color_stop_rgba(1, 0.2, 0.2, 0.5, 1)
ctx.set_source(gradient)
ctx.rectangle(0, 0, 600, 400)
ctx.fill()

# 绘制旋转矩形
ctx.save()
ctx.translate(300, 200)
for i in range(12):
    ctx.rotate(3.14159 / 6)  # 每次旋转30度
    ctx.set_source_rgba(0, 0.5, 0, 0.5)
    ctx.rectangle(-30, -30, 60, 60)
    ctx.fill()
ctx.restore()

# 保存结果
surface.write_to_png("advanced_demo.png")

七、关键注意事项

  1. 坐标系:原点 (0,0) 在左上角,x向右增长,y向下增长。
  2. 路径操作:所有路径需通过 fill() 或 stroke() 才会生效。
  3. 状态堆栈save() 和 restore() 用于管理绘图状态(如颜色、变换)。

通过结合基础方法和高级特性,Cairo 能实现复杂的矢量图形绘制。建议参考 Cairo官方文档 深入探索更多功能。

到此这篇关于Python Cairo库的使用教程及代码案例的文章就介绍到这了,更多相关Python Cairo库使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 简单讲解Python中的数字类型及基本的数学计算

    简单讲解Python中的数字类型及基本的数学计算

    这篇文章主要介绍了Python中的数字类型及基本的数学计算,与其他语言一样,除法相对复杂些,不过本文并未就此深入,需要的朋友可以参考下
    2016-03-03
  • Python calendar模块详情

    Python calendar模块详情

    这篇文章主要介绍了 Python calendar模块,Python 专门为了处理日历提供了calendar日历模块,下面文章基于time模块和datetime模块展开,具有一定的参考价值,需要的朋友可以参考一下
    2021-11-11
  • Python环境安装配置实用的提示

    Python环境安装配置实用的提示

    想要使用Python语言编写程序,我们必须下载Python安装包并配置Python环境,这篇文章主要给大家介绍了关于Python环境安装配置实用提示的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Python读取CSV的四种方式实现与对比

    Python读取CSV的四种方式实现与对比

    CSV(Comma-Separated Values)是一种常见的数据交换格式,Python提供了多种读取CSV文件的方法,下面就跟随小编一起详细一下具体的实现方法吧
    2025-08-08
  • Python文件操作利器的十大库使用实例

    Python文件操作利器的十大库使用实例

    Python拥有多个库用于文件操作,提供了各种功能来管理、读取和写入文件,这些库覆盖了从基本的文件系统交互到高级的文件压缩和数据格式处理等多个方面,文件操作是编程中不可或缺的一部分,因此了解这些库对于开发者来说是至关重要的
    2024-01-01
  • Python浅拷贝与深拷贝用法实例

    Python浅拷贝与深拷贝用法实例

    这篇文章主要介绍了Python浅拷贝与深拷贝用法,实例分析了Python浅拷贝与深拷贝的功能与使用方法,需要的朋友可以参考下
    2015-05-05
  • Python自动化测试利器selenium详解

    Python自动化测试利器selenium详解

    Selenium是一种常用的Web自动化测试工具,支持多种编程语言和多种浏览器,可以模拟用户的交互行为,自动化地执行测试用例和生成测试报告。Selenium基于浏览器驱动实现,结合多种定位元素的方法,可以实现各种复杂的Web应用程序的测试
    2023-04-04
  • python wxauto库的使用及注意事项

    python wxauto库的使用及注意事项

    这篇文章主要介绍了python wxauto库的使用及注意事项,wxauto库支持微信自动化操作,涵盖消息发送、聊天记录获取、自动回复及监听功能,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-07-07
  • 树莓派3 搭建 django 服务器的实例

    树莓派3 搭建 django 服务器的实例

    今天小编就为大家分享一篇树莓派3 搭建 django 服务器的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 关于python2 csv写入空白行的问题

    关于python2 csv写入空白行的问题

    今天小编就为大家分享一篇关于python 2 csv写入空白行的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06

最新评论