Christopher Barker wrote: > John Barratt wrote: >> I've had a need to do some optimisation of some low level pixel setting >> code, and have as such done some tests of different ways of doing this >> using PIL and alternatively with gd via ctypes. > > Have you tried using PIL + numpy -- you can convert a PIL image (some > eof them, anyway) to a numpy array, and manipulate it there. Numpy > provides a number if efficient ways to do such manipulations. > > In the most recent PIL, you should be able to convert to/from PIL/numpy > without any copying of the data, though I don't think it's been heavily > tested.
I haven't tried it, but did originally think of adding it to the list of things tested. Given this specific example though, where the idea is that a specific method or piece of code is needed to be run for every pixel (not that it actually is in this abstract example), I would think that unless that specific code can be called from, and done in C, that it would perform similarly to the Image.load method. This is because I am assuming the cost of accessing the raw data from Image.load to be similar to that of accessing an array type in numpy. Having said all that though, I'll have a look at adding it to the mix... I think where PIL & numpy would excel is where you have a cases of a number of images with calculations required that could be easily represented as array operations. The examples I am thinking of don't lend themselves to this sort of solution. It is perhaps also possible to reasonably efficiently access the PIL raw data under C as a standard type (eg. a 'flattened' unsigned char* for paletted images) through ctypes, in which case the result time-wise would hopefully be similar, or the same as using gd all the way. I am also finishing a 'real world' example for this sort of problem which may help further clarify further options and their relative benefits & costs. Cheers, JB. _______________________________________________ Image-SIG maillist - Image-SIG@python.org http://mail.python.org/mailman/listinfo/image-sig