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

新手上路,请多包涵

我在 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 像素。

原文由 Odif Yltsaeb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

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

 from PIL import Image
#...

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

资源

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

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

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

原文由 Nadia Alramli 发布,翻译遵循 CC BY-SA 4.0 许可协议

[更新] ANTIALIAS 已弃用,将在 Pillow 10 (2023-07-01) 中删除。使用 Resampling.LANCZOS 代替。image.resize((100,100),Image.ANTIALIAS)

原文由 Ahsan Aman 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题