2012-09-13 2 views
12

ho aperto una foto con PIL, ma quando ho provato ad usare split() di dividere i canali ho ottenuto seguente errore: AttributeError: 'NoneType' object has no attribute 'bands'Python Library Image: AttributeError: oggetto 'NoneType' non ha alcun attributo XXX

import Image 
img = Image.open('IMG_0007.jpg') 

img.split() 
--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 

/home/blum/<ipython console> in <module>() 

/usr/lib/python2.6/dist-packages/PIL/Image.pyc in split(self) 
    1495   "Split image into bands" 
    1496 
-> 1497   if self.im.bands == 1: 
    1498    ims = [self.copy()] 
    1499   else: 

AttributeError: 'NoneType' object has no attribute 'bands' 

risposta

24

Con googling Ho trovato questo comment on SO, stating that PIL is sometimes 'lazy' e "dimentica" per caricare dopo l'apertura. Quindi devi fare così:

import Image 
img = Image.open('IMG_0007.jpg') 
img.load() 
img.split() 

prega +1 anche il commento originale! Questa persona ha fatto il vero lavoro.

4

Il mio problema era che il PIL non era installato correttamente. Quando provo a leggere un png, otterrei quell'errore. Il mio sommario compilation prodotto

-------------------------------------------------------------------- 
PIL 1.1.7 SETUP SUMMARY 
-------------------------------------------------------------------- 
version  1.1.7 
platform  linux2 2.7.3 (default, Apr 21 2012, 01:05:55) 
       [GCC 4.6.3] 
-------------------------------------------------------------------- 
*** TKINTER support not available 
*** JPEG support not available 
*** ZLIB (PNG/ZIP) support not available <=============== 
*** FREETYPE2 support not available 
*** LITTLECMS support not available 
-------------------------------------------------------------------- 

Ho poi optato per "pip pil uninstall" e ha usato lo Synaptic Package Manager, invece. Questo l'ha risolto.