41

我有一些奇怪的问题,PIL 没有调整图像大小。

from PIL import Image
img = Image.open('foo.jpg')

width, height = img.size
ratio = floor(height / width)
newheight = ratio * 150

img.resize((150, newheight), Image.ANTIALIAS)

img.save('mugshotv2.jpg', format='JPEG')

此代码运行没有任何错误,并mugshotv2.jpg在正确的文件夹中生成名为我的图像,但它不会调整它的大小。它对它有所帮助,因为图片的大小从 120 kb 下降到 20 kb,但尺寸保持不变。

也许您还可以建议用更少的代码将图像裁剪成正方形的方法。我有点想这样Image.thumbnail做,但它所做的是将我的图像按宽度缩放到 150 像素,高度为 100 像素。

4

1 回答 1

108

resize()返回调整大小的图像副本。它不会修改原件。正确的使用方法是:

from PIL import Image
#...

img = img.resize((150, newheight), Image.ANTIALIAS)

资源

我认为您正在寻找的是 ImageOps.fit 功能。来自 PIL文档

ImageOps.fit(image, size, method, bleed, centering) => image

返回图像的大小和裁剪版本,裁剪为请求的纵横比和大小。size 参数是以像素为单位的请求输出大小,以 (width, height) 元组形式给出。

于 2009-08-09T20:39:53.157 回答