[Python] Ottenere il bytestream di un immagine da PIL

Manlio Perillo manlio_perillo a libero.it
Mer 3 Ott 2007 18:50:38 CEST


Luca ha scritto:
> Salve a tutti.
> 
> Ho la necessità di caricare un'immagine PNG utilizzando PIL e
> modificarla leggermente.
> 
> Una volta eseguita al modifica, se uso le funzioni di PIL per la
> generazione di una nuova immagine su filesystem le cose sono ok.
> 
> Ciò che però devo veramente fare è inviare il bytestream dell'immagine
> tramite la la rete. Per fare questo non volevo salvare l'immagine su
> filesystem (dato che è temporanea) ma credevo di poterlo fare
> ottenendo il sorgente dell'immagine direttamente dall'oggetto Image.
> 
> Purtroppo ciò che ottengo dall'uso di Image.tostring (unico metodo che
> pare fare al caso mio) è un bytestream estremamente più grande, e non
> comunque un'immagine corretta...
> 

Hai letto la documentazione del metodo tostring?
http://www.pythonware.com/library/pil/handbook/image.htm

Senza parametri aggiuntivi dovrebbe restituire il contenuto RAW 
dell'immagine.

Purtroppo nella documentazione non viene spiegato cosa passare come 
"encoder", comunque una veloce ricerca fornisce:
http://mail.python.org/pipermail/image-sig/2004-September/002908.html

Prova a fare .tostring('jpeg') e vedi cosa succede.

Se non funziona salva l'immagine in un file temporaneo e, se usi WSGI, 
usa l'estensione wsgi.file_wrapper, in modo che, se sei fortunato, viene 
usato sendfile, in modo da evitare di copiare due volte il buffer tra 
memoria <-> filesystem.

 > [...]


Saluti  Manlio Perillo


Maggiori informazioni sulla lista Python