PIL Image.resize()没有调整图片大小

Odi*_*aeb 31 python resize python-imaging-library

我有一些奇怪的问题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')
Run Code Online (Sandbox Code Playgroud)

此代码运行时没有任何错误,并生成mugshotv2.jpg在正确的文件夹中命名的图像,但它不会调整它的大小.它做了一些事情,因为图片的大小从120 kb下降到20 kb,但尺寸保持不变.

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

Nad*_*mli 87

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

from PIL import Image
#...

img = img.resize((150, newheight), Image.ANTIALIAS)
Run Code Online (Sandbox Code Playgroud)

资源

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

ImageOps.fit(图像,大小,方法,出血,居中)=>图像

返回图像的大小和裁剪版本,裁剪为请求的宽高比和大小.size参数是请求的输出大小(以像素为单位),以(宽度,高度)元组的形式给出.

  • 啊..那个奇怪的复选标记......哦.它可以用一些东西来吸引更多的注意力. (3认同)
  • 谢谢!就是这样.这又是我经常做的那种愚蠢,容易的错误:P.再看一遍,我无法理解我自己是怎么理解的 - 毕竟这是该死的文件.我想我需要去睡觉.再次感谢,并且有一天我会尝试使用ImageOps.fit:D (2认同)