Характер изменений показывает, что синий и красный каналы на изображении поменялись местами. В этом случае это означает, что cairo сохраняет данные пикселей в памяти в порядке «Blue Green Red Alpha», а не «Red Green Blue Alpha».
К счастью, PIL Python поддерживает эту инверсию: просто передайте «BGRA» в качестве параметра режима в необработанный декодер (вместо второго «RGBA» в вызове функции).
Кроме того, представьте, что вам не нужно открывать изображение с помощью PIL - cairo загружает его напрямую, и вы можете получить размер с поверхности Каира:
import cairo
from PIL import Image as im
surface = cairo.ImageSurface.create_from_png('Camilla_Belle_photo_3.png')
context = cairo.Context(surface)
#draw stuff
size = surface.get_width(), surface.get_height()
other_image = im.frombuffer('RGBA', size, surface.get_data(), 'raw', 'BGRA', 0, 1)
other_image.save('test.png')