On 13 Wrz, 10:48, Pacino <xiaoyish...@gmail.comwrote:
On 9 13 , 4 43 , Laurent Pointal <laurent.poin...@limsi.frwrote:
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/ima...il/000713.html
- full image will be loaded, and cutted.
--
Regards,
Micha³ Zaborowski (TeXXaS)