4

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

原图:在此处输入图像描述

和输出

如您所见,输出的颜色完全混乱......

提前感谢您的帮助!

-霍夫

4

3 回答 3

4

output应该是文件名,而不是处理程序。

于 2009-05-06T16:21:57.947 回答
3

代替

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

做就是了

area.save('cropped_football.jpg')
于 2009-05-07T10:35:36.260 回答
1

由于调用save实际产生的输出,我不得不假设 PIL 能够交替使用文件名或打开的文件。问题在于文件模式,默认情况下会尝试根据文本约定进行转换 - 在 Windows 上,'\n' 将被替换为 '\r\n'。您需要以二进制模式打开文件:

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

PS我对此进行了测试,并且可以正常工作:

在此处输入图像描述

于 2011-07-26T16:23:20.097 回答