如何强制 Pillow 将图像大小调整为任意大小?

Som*_*DOS 2 python image-processing python-imaging-library

我需要调整图像大小,从所有不同的大小到 144x144。

所有尺寸:从 968x565、25x48、400x400 等。不知道输入。我正在使用 Python 中的 Pillow 库。我不介意失去纵横比。

问题是:使用resize方法时,某些图像会获得完全随机的大小。并非总是如此,但只有其中一些不尊重我给该方法提供的 144x144 的任意大小。这是一个示例

我尝试使用 Mac OS X Yosemite 的 Preview 调整这些图像的大小,并且效果很好。我需要在 Pillow 中做什么才能强制使用 144x144 大小并至少像 mac 中的预览一样工作?

我无法发布整个代码,但调整大小的代码段是:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PIL import Image

im = Image.open('canvas_wheat.jpg')
im.resize((144, 144), Image.ANTIALIAS)
im.save('144.jpg', optimize=True, quality=20)
Run Code Online (Sandbox Code Playgroud)

jsb*_*eno 6

你遇到的问题是该resize方法返回一个 新的图像对象,你没有存储在任何地方。原始图像im与已加载的图像相同。

检查此交互式会话中的示例:

>>> from PIL import Image
>>> img = Image.open("image.jpg")
>>> img.size
(952, 804)
>>> img2 = img.resize((144,144), Image.ANTIALIAS)
>>> img.size
(952, 804)
>>> img2.size
(144, 144)
>>> 
Run Code Online (Sandbox Code Playgroud)

  • @SomebodystillusesyouMS-DOS 这是一个容易犯的错误。PIL 接口不一致,有时它就地修改,有时它返回一个新对象。而 Python 本身并没有给你任何提示。方法名称是最后的误导,它是一个动作动词,很自然地让您认为它正在修改图像。 (3认同)