2012-02-09 14 views
5

Sto provando a caricare il mio file .jpg e genera un errore, ma se provo di nuovo, va bene! Perché??Python PIL, Immagine. Errore dopo image.load()

Il mio codice e l'errore:

>>> import Image 
>>> im1 = Image.open('/tmp/test.jpg') 
>>> im1.load() 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/usr/lib64/python2.7/site-packages/PIL/ImageFile.py", line 201, in load 
raise IOError("image file is truncated (%d bytes not processed)" % len(b)) 
IOError: image file is truncated (0 bytes not processed) 
>>> im1.load() 
<PixelAccess object at 0x7feffc2a1170> 
>>> 

Grazie!

+0

Il messaggio suggerisce l'immagine si sta legando a caricare è (probabilmente) manca alcuni byte finali. Perché funziona in modo intermittente, non so, come non dici se l'immagine è statica, ecc. –

+0

Grazie per la risposta! L'immagine è statica. – Hare

risposta

8

PIL utilizza il caricamento lazy, il che significa che l'immagine non viene effettivamente letta dal file finché non si tenta di eseguire un'azione su di esso. La prima chiamata a load è la prima azione, quindi è quando viene rilevato il problema con il formato di file. La seconda chiamata a load non legge nuovamente il file, restituisce solo le informazioni memorizzate nella cache quando il file è stato caricato.

+0

Heh ... Solo ora ho notato che la seconda chiamata a "load" menzionata da OP era nell'esempio ... –

+0

Hm, mi dispiace, non ho detto che l'errore simile si verifica quando la prima chiamata è image.show . Una seconda chiamata image.show è ок. – Hare

+0

@Hare, vale lo stesso ragionamento. La richiesta 'open' non legge l'intero file in modo che non riceva l'errore. La prima operazione, che sia 'load' o' show', fa leggere l'intero file e viene rilevato il difetto del file. –

19

Ho avuto lo stesso problema e ho trovato una soluzione che discuto qui: https://stackoverflow.com/a/23575424/3622198.

Da qualche parte prima del blocco di codice, è sufficiente aggiungere il seguente:

from PIL import ImageFile 
ImageFile.LOAD_TRUNCATED_IMAGES = True 

... e si dovrebbe essere pronti per partire!

EDIT: Sembra che questo aiuta per la versione del PIL in bundle con cuscino ("PIP installare cuscino"), ma non può funzionare per le installazioni di default di PIL

Problemi correlati