[Tutor] 200 dollar questions!

Luke Paireepinart rabidpoobear at gmail.com
Sun Jul 1 07:35:28 CEST 2007


elis aeris wrote:
> which modules and origin is this function?
You can infer from the fact that your image object already has the pixel 
data stored within it that
the getdata would be a method of the object.
In other words,
just call
image.getdata()
and, if I recall correctly, when you asked where this function was, I 
mentioned that it had an entry in the PIL handbook
right next to the getpixel() entry.
Googling "PIL Handbook" yields this page 
http://www.pythonware.com/library/pil/handbook/image.htm
and, as I said,
"""


      getdata

*im.getdata()* => sequence

Returns the contents of an image as a sequence object containing pixel 
values. The sequence object is flattened, so that values for line one 
follow directly after the values of line zero, and so on.

Note that the sequence object returned by this method is an internal PIL 
data type, which only supports certain sequence operations, including 
iteration and basic sequence access. To convert it to an ordinary 
sequence (e.g. for printing), use *list(im.getdata())*.


      getextrema

*im.getextrema()* => 2-tuple

Returns a 2-tuple containing the minimum and maximum values of the 
image. In the current version of PIL, this is only applicable to 
single-band images.


      getpixel

*im.getpixel(xy)* => value or tuple

Returns the pixel at the given position. If the image is a multi-layer 
image, this method returns a tuple.

Note that this method is rather slow; if you need to process larger 
parts of an image from Python, you can either use pixel access objects 
(see *load*), or the *getdata* method.
"""

>
> is it the fastest way to get it?
It depends how much of the pixel data you're using.
If you're using the whole image, then yes, getdata is probably the 
fastest way.
If you're using a portion, depending on the dimensions, it may be faster 
to getpixel or it may be faster to crop the image and getdata,
there's no telling. You'd have to test.
IF one way were faster for every case, there'd only be one way to do it.
>
> I am told to optimize getpixel (x, y)  alone, so that's the only thing 
> i am trying, it's part of a project that will go live in september, so 
> the prof we are under hasn't one anything but some introductory readings.
Then keep working with that.
If you have a specific requirement, and they won't let you change it, 
then do what you can.
-Luke


More information about the Tutor mailing list