Проблема обрезки PIL в Python: цвет обрезанного изображения - PullRequest
4 голосов
/ 06 мая 2009

У меня, вероятно, очень простая проблема с функцией обрезки PIL: цвета обрезанного изображения полностью искажены. Вот код:

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

Исходное изображение: enter image description here

и вывод .

Как видите, цвета на выходе полностью испорчены ...

Заранее спасибо за любую помощь!

-Hoff

Ответы [ 3 ]

4 голосов
/ 06 мая 2009

output должно быть именем файла, а не обработчиком.

3 голосов
/ 07 мая 2009

вместо

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

просто сделай

area.save('cropped_football.jpg')
1 голос
/ 26 июля 2011

Поскольку при вызове save фактически получен вывод, я должен предположить, что PIL может использовать либо имя файла, либо открытый файл взаимозаменяемо Проблема в файловом режиме, который по умолчанию будет пытаться конвертировать на основе текстовых соглашений - в Windows вместо '\ n' будет заменено '\ r \ n'. Вам необходимо открыть файл в двоичном режиме:

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

P.S. Я проверил это, и это работает:

enter image description here

...