[Image-SIG] Comparison of PIL and GD speed for setting pixels through python

John Barratt jb at langarson.com.au
Mon Feb 5 11:22:09 CET 2007

Well after some digging through the PIL source code after the prompting 
from Douglas, and some tinkering with the python C interface, I have 
implemented a C based version of the core pixel setting loop using PIL 
objects.  I have also added 'reference' versions using plain python, 
setting an integer value in the loop, and setting an integer 2D array in 
a loop.

The short of this is that a PIL implementation with C goes faster for 
larger images (1024x1024), and faster almost overall if you only 
consider time to actually set the pixels, and not image creation time as 

Fredrik, do you think it would be possible to have a standard API call 
in PIL that could cleanly & reliably expose the core C pixel data array 
for use within C (through say ctypes, or back through the python-c api) 
for optimisations like this?

The full breakdown of results, and new source code with the PIL/c 
implementation can be found here :


I think that has about exhausted the possible combinations to test, but 
if anyone has any other suggestions, please let me know.  Also if anyone 
has any ideas as to why the PIL/raw/c version should go so much faster 
than the gd/raw/c version I would be interested to know, as the core 
looping code is basically identical...



John Barratt - www.langarson.com.au
          Python, Zope, GIS, Weather

More information about the Image-SIG mailing list