2009-05-06 15 views
4

J'ai probablement un problème très basique avec la fonction recadrage de PIL: Les couleurs de l'image recadrée sont totalement vissées. Voici le code:Problème de culture PIL de Python: couleur de l'image recadrée vissée

>>> from PIL import Image 
>>> img = Image.open('football.jpg') 
>>> img 
<PIL.JpegImagePlugin.JpegImageFile instance at 0x00 
>>> img.format 
'JPEG' 
>>> img.mode 
'RGB' 
>>> box = (120,190,400,415) 
>>> area = img.crop(box) 
>>> area 
<PIL.Image._ImageCrop instance at 0x00D56328> 
>>> area.format 
>>> area.mode 
'RGB' 
>>> output = open('cropped_football.jpg', 'w') 
>>> area.save(output) 
>>> output.close() 

L'image originale: enter image description here

and the output.

Comme vous pouvez le voir, sont totalement foiré les couleurs de la sortie en ...

Merci d'avance pour toute aide!

-Hoff

Répondre

4

output doit être un nom de fichier, pas un gestionnaire.

+1

Eh bien, il peut être un fichier, mais il doit être ouvert en mode binaire. Pourtant, mieux vaut avoir PIL gérer cela quand c'est pratique. – kindall

3

au lieu de

output = open('cropped_football.jpg', 'w') 
area.save(output) 
output.close() 

juste faire

area.save('cropped_football.jpg') 
1

Depuis l'appel à save sortie effectivement produit, je dois supposer que PIL est capable d'utiliser un nom de fichier ou un fichier ouvert de façon interchangeable. Le problème est dans le mode fichier, qui par défaut essayera de convertir en fonction des conventions de texte - un '\ n' sera remplacé par '\ r \ n' sous Windows. Vous devez ouvrir le fichier en mode binaire:

output = open('cropped_football.jpg', 'wb') 

P.S. Je l'ai testé cela et il fonctionne:

enter image description here