read part of jpeg file by pure python

michal.zaborowski at gmail.com michal.zaborowski at gmail.com
Thu Sep 13 07:44:15 EDT 2007


On 13 Wrz, 10:48, Pacino <xiaoyish... at gmail.com> wrote:
> On 9 13 ,   4 43 , Laurent Pointal <laurent.poin... at limsi.fr> wrote:
>
> > Pacino a écrit :
>
> > > Hi, everyone,
>
> > > I am wondering whether it's possible to read part (e.g. 1000*1000) of
> > > a huge jpeg file (e.g. 30000*30000) and save it to another jpeg file
> > > by pure python. I failed to read the whole file and split it, because
> > > it would cost 2GB memory.
>
> > > Can anyone help me? Any comments would be appreciated.
>
>
> > Just reading parts of the *file* is easy (see tell() seek() and read()
> > methods on files).
> > But to extract a part of the *picture*, you must uncompress the picture
> > in memory, grab the sub-picture, and save it back - generally with
> > compression. I can't see how you can bypass the uncompress/compress
> > phases and the corresponding memory use.
>
>
> The most difficult part is the uncompress part. I don't want the whole
> picture to be uncompressed in the memory, because it will consume a
> lot of memory (2GB, as I mentioned). My goal is to uncompress part of
> the picture into the memory.
>
> I just read some article on this subject (http://mail.python.org/
> pipermail/image-sig/1999-April/000713.html) , but haven't test it out
> yet.
>
  I have no idea what it does. Anyway - jpeg:
1. RGB -> HLV
2. divide data into 8x8 - blocks of data.
3. blocks are treated with discrete cosine transform.
4. Result is filtered to remove "fast changes".
5. Then result is compressed with Huffman alg.

So to get part of image - you can take smaller image before step 4.
As far as I understand code presented at:
http://mail.python.org/pipermail/image-sig/1999-April/000713.html
- full image will be loaded, and cutted.

--
Regards,
  Michał Zaborowski (TeXXaS)




More information about the Python-list mailing list