Dessiner en Python avec Cairo – tutoriel

De nombreux sujets scientifiques se prêtent à la modélisation, la simulation ou à la génération d’images. La programmation en Python, associée à la librairie Cairo, permet d’obtenir facilement des images statiques de qualité.

Cairo est une bibliothèque graphique libre écrite en langage C, qui définit une API de rendu vectoriel 2D indépendante du matériel, pouvant être utilisée par de nombreux langages de programmation, dont Python. Cairo prévoit des sorties directes sur le matériel graphique, mais permet une sortie image vers des fichiers PNG, PostScript, PDF et SVG. Cette librairie est utilisée par de nombreux logiciels, dont Gecko 2.0, le moteur de Mozilla Firefox et le logiciel de dessin vectoriel libre Inkscape.

Le principe de fonctionnement est simple : une « source (peinture) » est appliquée sur une surface de destination, en utilisant éventuellement un « masque » lors du transfert. Le code ci-après permet de dessiner les cotés d’un carré en jaune.

[crayon]#!/usr/bin/python
# -*- coding: UTF-8 -*-
import cairo

IMAGE_SIZE = (1000, 1000)
filename=’simple-square’
width, height = IMAGE_SIZE[0], IMAGE_SIZE[1]
lw=0.04
#—————————–
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
cr = cairo.Context(surface)
cr.scale(width, height)
cr.set_source_rgb(255,255, 0)
cr.move_to(0.25-lw/2., 0.25)
cr.line_to(0.75, 0.25)
cr.line_to(0.75, 0.75)
cr.line_to(0.25, 0.75)
cr.line_to(0.25, 0.25)
cr.set_line_width(lw)
cr.stroke()

# Save to PNG :
surface.write_to_png(filename + ‘.png’)[/crayon]

Jeff Preshing a publié un programme Python assez simple, utilisant Cairo pour dessiner un pavage de Penrose, un système apériodique qui se révélera être un bon modèle des quasi-cristaux découverts en 1982 et caractérisés eux-aussi par des symétries locales pentagonales.

Pavage de Penrose

Pour mieux comprendre le fonctionnement de la libriaire Cairo, vous pouvez consulter le wiki où j’ai placé un tutoriel Cairo pour programmeurs Python sur base d’une traduction du « Cairo Tutorial for Python Programmers« , de Michael Urman.

N.B. : pour des images dynamiques, même si c’est possible avec Cairo, mieux vaut utiliser des librairies plus adaptées telles que Visual Python ou Tkinter.

Références :