[cairo] unable to make PIL work with cairo

Andrea Canciani ranma42 at gmail.com
Sat Jan 8 10:37:30 PST 2011


On Sat, Jan 8, 2011 at 5:09 PM, wecing <w3cing at gmail.com> wrote:
> Currently i'm writing a video player which uses cairo to draw subtitle on
> each frame.
> I successfully extracted all the frames as PIL Image objects, but I failed
> to create cairo surfaces with that.
> I refered to http://cairographics.org/pythoncairopil/ , but it seems that
> maybe there're some problems in the document.
> Here is the traceback:
>   File "main.py", line 96, in video_observer
>     img.get_data(), 'raw', 'RGBA', 0, 1)
>   File "/usr/lib/python2.6/dist-packages/PIL/Image.py", line 512, in
> __getattr__
>     raise AttributeError(name)
> AttributeError: get_data

It looks like you're trying to use the get_data() member of a PIL
image (but it doesn't exist). get_data() is a member of cairo images,
but to access PIL images raw data you might need something like:

    data = pil_image.tostring("raw","RGBA",0,1)

or (if the format is already correct), just:

    data = pil_image.getdata() # (no underscore between "get" and "data").

See http://www.pythonware.com/library/pil/handbook/image.htm and
http://cairographics.org/documentation/pycairo/2/reference/surfaces.html#class-imagesurface-surface
for reference.

Andrea


More information about the cairo mailing list