Domanda

Ho probabilmente un problema molto basilare con la funzione di ritaglio di PIL: i colori dell'immagine ritagliata sono totalmente sfocati. Ecco il codice:

>>> 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'immagine originale: inserisci qui la descrizione dell'immagine

e l'output

Come puoi vedere, i colori dell'output sono totalmente incasinati ...

Grazie in anticipo per qualsiasi aiuto!

-Hoff

È stato utile?

Soluzione

output dovrebbe essere un nome file, non un gestore.

Altri suggerimenti

anziché

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

basta

area.save('cropped_football.jpg')

Poiché la chiamata a save ha prodotto effettivamente un output, devo supporre che PIL sia in grado di utilizzare un nome file o un file aperto in modo intercambiabile. Il problema è nella modalità file, che per impostazione predefinita tenterà di convertire in base alle convenzioni di testo: un '\ n' verrà sostituito da '\ r \ n' su Windows. Devi aprire il file in modalità binaria:

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

P.S. Ho provato questo e funziona:

inserisci qui la descrizione dell'immagine

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top