2012-04-12 8 views
9

Come si crea un file selezionabile da un oggetto immagine PIL in modo da poter salvare tali immagini come un singolo file pickle, quindi caricarlo su un altro computer come un server che esegue il PIL e deselezionarlo lì?Oggetto immagine selezionabile

risposta

16

È possibile convertire l'oggetto immagine in dati poi si può salamoia esso:

image = { 
    'pixels': im.tostring(), 
    'size': im.size, 
    'mode': im.mode, 
} 

E di nuovo ad un immagine:

im = Image.fromstring(image['mode'], image['size'], image['pixels']) 

NOTA: Come astex accennato, se siete utilizzando il Cuscino (consigliato invece di PIL), il metodo tostring() è obsoleto per tobytes(). Allo stesso modo con fromstring() per frombytes().

+1

'Image.tostring() 'ora è deprecato i n 'Cuscino' a favore di' Image.tobytes() '. Per motivi di posterità, potrebbe essere meglio cambiare quanto sopra (o almeno lasciare una nota). – astex

9

leggera variazione della risposta di Gerald utilizzando parole chiave args

creare l'oggetto pickleable

image = {'data': im.tostring(), 'size':im.size, 'mode':im.mode} 

o

image = dict(data=im.tostring(), size=im.size, mode=im.mode) 

deserializzazione di nuovo a immagine

im = Image.fromstring(**image) 
+0

Ciò significa che non è necessario memorizzare le immagini nella mia applicazione? Posso semplicemente usare la stringa che serializzano e basta codificarla all'interno dell'applicazione quando voglio usare l'immagine? – Ogen

+0

Tecnicamente * potresti * farlo, ma è molto meglio tenerlo come un vero e proprio file ... in entrambi i casi può essere versionato insieme al tuo codice, ma avere immagini mantenute come immagini significa che puoi vederle facilmente e sapere cosa media che hai memorizzato. Se stai memorizzando le immagini come codice, stai gonfiando artificialmente la dimensione dei tuoi file sorgente, rendendoli più onerosi per visualizzare e cercare e rendere i tuoi file multimediali molto più difficili da gestire se vuoi visualizzare e/o modificare quell'immagine. – kungphu