Pergunta

Eu tenho um problema, provavelmente, muito básico com função de corte do PIL: As cores da imagem recortada são totalmente ferrado. Aqui está o código:

>>> 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()

A imagem original: enter descrição da imagem aqui

eo saída.

Como você pode ver, as cores da saída são totalmente desarrumada ...

Agradecemos antecipadamente por qualquer ajuda!

-Hoff

Foi útil?

Solução

output deve ser um nome de arquivo, não um manipulador.

Outras dicas

em vez de

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

apenas fazer

area.save('cropped_football.jpg')

Uma vez que a chamada para save saída efectivamente produzida, eu tenho que assumir que PIL é capaz de usar um nome de arquivo ou um arquivo aberto de forma intercambiável. O problema está no modo de arquivo, que por padrão irá tentar converter com base em convenções do texto - um '\ n' será substituído por '\ r \ n' no Windows. Você precisa abrir o arquivo em modo binário:

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

P.S. Eu testei isso e ele funciona:

enter descrição da imagem aqui

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top