gpt4 book ai didi

python - PIL裁剪和粘贴问题: Cropping doesn't create a cropped image

转载 作者:行者123 更新时间:2023-11-28 20:53:45 27 4
gpt4 key购买 nike

我正在尝试裁剪一张图片,然后将裁剪后的图片粘贴到另一张图片的中心。理想情况下,我希望裁剪后的图像小于粘贴图像,以便粘贴图像周围有边框,但我不知道这是否可能。

这是我尝试过的方法(以及产生的错误消息):

>>> 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 = (25, 25, 25, 25)
>>> House.crop(box)
>>>Image._ImageCrop image mode=RGB size=0x0 at 0x11AD210>
>>> region = House.crop(box)
>>> region.show()
>>>Traceback (most recent call last):
>>> File "<pyshell#28>", line 1, in <module>
region.show()
>>> File "C:\Python26\lib\site-packages\PIL\Image.py", line 1483, in show
_show(self, title=title, command=command)
>>> File "C:\Python26\lib\site-packages\PIL\Image.py", line 2123, in _show
apply(_showxv, (image,), options)
>>> File "C:\Python26\lib\site-packages\PIL\Image.py", line 2127, in _showxv
apply(ImageShow.show, (image, title), options)
>>> File "C:\Python26\lib\site-packages\PIL\ImageShow.py", line 41, in show
if viewer.show(image, title=title, **options):
>>> File "C:\Python26\lib\site-packages\PIL\ImageShow.py", line 66, in show
self.show_image(image, **options)
>>> File "C:\Python26\lib\site-packages\PIL\ImageShow.py", line 85, in show_image
return self.show_file(self.save_image(image), **options)
>>> File "C:\Python26\lib\site-packages\PIL\ImageShow.py", line 81, in save_image
return image._dump(format=self.get_format(image))
>>> File "C:\Python26\lib\site-packages\PIL\Image.py", line 493, in _dump
self.save(file, format)
>>> File "C:\Python26\lib\site-packages\PIL\Image.py", line 1439, in save
save_handler(self, fp, filename)
>>> File "C:\Python26\lib\site-packages\PIL\BmpImagePlugin.py", line 242, in _save
ImageFile._save(im, fp, [("raw", (0,0)+im.size, 0, (rawmode, stride, -1))])
>>> File "C:\Python26\lib\site-packages\PIL\ImageFile.py", line 498, in _save
e.setimage(im.im, b)
>>>SystemError: tile cannot extend outside image

我可以看到“区域”大小已设为 (0,0),但我不明白为什么。

如有任何帮助,将不胜感激

最佳答案

PIL documentation对于裁剪方法状态:

Returns a rectangular region from the current image. The box is a 4-tuple defining the left, upper, right, and lower pixel coordinate.

This is a lazy operation. Changes to the source image may or may not be reflected in the cropped image. To get a separate copy, call the load method on the cropped copy.

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

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

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

关于python - PIL裁剪和粘贴问题: Cropping doesn't create a cropped image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3838446/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com