Dieter Krachtus wrote: > I am in science and want to understand certain things PIL does better... > > One can get jpg-thumbnails of images with PIL. This happens pretty fast > - so PIL cannot read the complete file, but use some trick. I guess it > just reads in a 2^x (i.e. 1/2, 1/4, 1/8, 1/16, ...) of the actual > image-data. Just to understand how this is done, is my qustion: > > 1. Does PIL look into the "header" of the jpg file and finds out from > where to where the actual image data goes and how the dimension > (width/height in pixel) of the image is ?
yes. > 2. Then whats next? Does PIL read only e.g. every 16th byte, or how is > this done - if you do this - is the resulting stream of bytes still > interpretable as a jpg ? it's a lot tricker than that: the JPEG data stream represents image data not as a bunch of separate pixels, but as a set of frequency coefficients, which, when combined, can be used to reconstruct the original image (in pretty much the same way as you can generate a square wave by summing enough sine waves; see http://en.wikipedia.org/wiki/Square_wave). the frequency transform is made on 8x8 tiles, so you get a distinct set of coefficients for each 8x8 box in the source image. (to get lossy compression, JPEG simply uses fewer bits to store the coefficients than they really need; e.g. instead of storing a full range of, say, 0-1000 for a high-frequency coefficient, the file may only use 0, 300, 600, and 900. this lets you store the coefficient in 2 bits instead of 10.) to quickly generate thumbnails from JPEG images from the coefficients, PIL simply ignores some of the coefficients. to generate an 1/8 image, PIL uses the "DC component" from the frequency transform directly (which corre- sponds to the average value for the entire 8x8 box). for 1/2 and 1/4 images, PIL only enough frequency components to generate a 4x4 or 2x2 tile. there's a lot more to JPEG than I've described here; if you want to learn more about JPEG, the wikipedia entry is quite good: http://en.wikipedia.org/wiki/JPEG hope this helps! </F> _______________________________________________ Image-SIG maillist - [email protected] http://mail.python.org/mailman/listinfo/image-sig
