Python PIL: 怎么保存裁剪后的图片?
我有一个脚本,它会生成一张图片,然后对这张图片进行裁剪。问题是,当我调用裁剪的方法之后,它并没有把裁剪后的图片保存到硬盘上。
crop = image.crop(x_offset, Y_offset, width, height).load()
return crop.save(image_path, format)
3 个回答
0
这里有一个完全可用的答案,适用于新的PIL版本1.1.7。现在裁剪的坐标是左上角和右下角(不是x,y,宽度,高度)。
Python的版本号是:2.7.15
PIL的版本是:1.1.7
# -*- coding: utf-8 -*-
from PIL import Image
import PIL, sys
print sys.version, PIL.VERSION
for fn in ['im000001.png']:
center_x = 200
center_y = 500
half_width = 500
half_height = 100
imageObject = Image.open(fn)
#cropped = imageObject.crop((200, 100, 400, 300))
cropped = imageObject.crop((center_x - half_width,
center_y - half_height,
center_x + half_width,
center_y + half_height,
))
cropped.save('crop_' + fn, 'PNG')
1
主要的问题是试图把 load()
返回的对象当作图像对象来使用。从PIL的文档来看:
在[PIL] 1.1.6及之后的版本中,load返回的是一个像素访问对象,这个对象可以用来读取和修改像素。这个访问对象的行为就像一个二维数组 [...]
你可以试试这个:
crop = image.crop((x_offset, Y_offset, width, height)) # note the tuple
crop.load() # OK but not needed!
return crop.save(image_path, format)
14
你需要把参数放在一个元组里,传给.crop()
。而且不要使用.load()
。
box = (x_offset, Y_offset, width, height)
crop = image.crop(box)
return crop.save(image_path, format)
就这些了。不过,我不太明白你为什么要返回保存操作的结果,因为它返回的是None
。