Python PIL裁剪和粘贴问题:裁剪不';不要创建裁剪过的图像

Python PIL裁剪和粘贴问题:裁剪不';不要创建裁剪过的图像,python,python-imaging-library,paste,crop,Python,Python Imaging Library,Paste,Crop,我正在尝试裁剪一幅图像,然后将裁剪后的图像粘贴到另一幅图像的中心。理想情况下,我希望剪切的图像比粘贴的图像小,这样粘贴的图像周围就有一个边框,但我不知道这是否可行 以下是我尝试的内容(以及产生的错误消息): 导入图像 >>>灰色=图像。新('RGB',(200200),“灰色”) >>>House=Image.open(“House01.jpg”) >>>打印灰色.size,灰色.mode,灰色.format >>>(200200)RGB无 >>>打印House.size、House.mode、

我正在尝试裁剪一幅图像,然后将裁剪后的图像粘贴到另一幅图像的中心。理想情况下,我希望剪切的图像比粘贴的图像小,这样粘贴的图像周围就有一个边框,但我不知道这是否可行

以下是我尝试的内容(以及产生的错误消息):

导入图像 >>>灰色=图像。新('RGB',(200200),“灰色”) >>>House=Image.open(“House01.jpg”) >>>打印灰色.size,灰色.mode,灰色.format >>>(200200)RGB无 >>>打印House.size、House.mode、House.format >>>(300300)RGB JPEG >>>方框=(25,25,25,25) >>>室内作物(箱) >>>图像。_ImageCrop图像模式=RGB大小=0x0,在0x11AD210> >>>区域=房屋作物(方框) >>>region.show() >>>回溯(最近一次呼叫最后一次): >>>文件“”,第1行,在 region.show() >>>文件“C:\Python26\lib\site packages\PIL\Image.py”,第1483行,在show中 _显示(自我,标题=标题,命令=命令) >>>文件“C:\Python26\lib\site packages\PIL\Image.py”,第2123行,在\u show中 应用(_showxv,(图像,),选项) >>>文件“C:\Python26\lib\site packages\PIL\Image.py”,第2127行,在\u showxv中 应用(ImageShow.show,(图像,标题),选项) >>>文件“C:\Python26\lib\site packages\PIL\ImageShow.py”,第41行,在show中 如果viewer.show(图像,title=title,**选项): >>>文件“C:\Python26\lib\site packages\PIL\ImageShow.py”,第66行,在show中 self.show_图像(图像,**选项) >>>文件“C:\Python26\lib\site packages\PIL\ImageShow.py”,第85行,在show\u图像中 返回self.show_文件(self.save_图像(图像),**选项) >>>文件“C:\Python26\lib\site packages\PIL\ImageShow.py”,第81行,在save\u图像中 返回图像。_转储(格式=self.get_格式(图像)) >>>文件“C:\Python26\lib\site packages\PIL\Image.py”,第493行,位于\u dump中 self.save(文件、格式) >>>文件“C:\Python26\lib\site packages\PIL\Image.py”,第1439行,保存 保存\u处理程序(self、fp、filename) >>>文件“C:\Python26\lib\site packages\PIL\BmpImagePlugin.py”,第242行,保存 图像文件。_保存(im,fp,[(“raw”,(0,0)+im.size,0,(rawmode,stride,-1))) >>>文件“C:\Python26\lib\site packages\PIL\ImageFile.py”,第498行,保存 e、 设置图像(im.im,b) >>>SystemError:磁贴无法扩展外部图像 我可以看到“区域”的大小已经变为(0,0),但我不明白为什么

关于这方面的任何帮助都将非常感谢

,因为裁剪方法说明:

从矩形区域返回矩形区域 当前图像。该框是一个4元组 定义左、上、右和右 低像素坐标

这是一个懒惰的操作。更改为 源图像可能是,也可能不是 反映在裁剪后的图像中。得到 如果是单独的副本,请调用load方法 在裁剪的副本上

因此,您应该尝试
region=House.crop(box.load()
,以确保获得实际的裁剪副本

更新:
实际上,似乎只有在使用PIL1.1.6及更高版本时,上述方法才有效。在之前的版本中,我猜
load()
不会返回任何内容,因此无法链接操作。在这种情况下,请使用:

region = House.crop(box)
region.load()

我有一个类似的错误,我似乎无法解决,但后来我意识到,正如您所做的,这与传入Image.crop()的参数有关。您可以看到图像的大小为(0,0),因此没有显示任何内容。您正在设置从点(25,25)到(25,25)的边界

如果需要25x25裁剪图像(从左上角开始): ``` >

```
如果您想从中心或其他点开始,我会将此作为参考:

谢谢您的帮助。我已经输入了您的建议,后面是region.show(),现在收到错误消息:回溯(最近一次调用):文件“”,第1行,位于region.show()AttributeError:'NoneType'对象没有属性'show'
region = House.crop(box)
region.load()
>> import Image
>>> grey = Image.new('RGB', (200, 200), "grey")
>>> House = Image.open("House01.jpg")
>>> print grey.size, grey.mode, grey.format
>>>(200, 200) RGB None
>>> print House.size, House.mode, House.format
>>>(300, 300) RGB JPEG
>>> box = (0, 0, 25, 25)
>>> House.crop(box)
>>>Image._ImageCrop image mode=RGB size=0x0 at 0x11AD210>
>>> region = House.crop(box)
>>> region.show()