Integration with NumPy

https://numpy.org/

NumPy & ImageSurface

Creating an ImageSurface from a NumPy array:

import numpy
import cairo

width, height = 255, 255
data = numpy.ndarray(shape=(height, width), dtype=numpy.uint32)
surface = cairo.ImageSurface.create_for_data(
    data, cairo.FORMAT_ARGB32, width, height)

Creating a NumPy array from an ImageSurface:

import numpy
import cairo

width, height = 255, 255
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
buf = surface.get_data()
data = numpy.ndarray(shape=(height, width),
                        dtype=numpy.uint32,
                        buffer=buf)