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

Posted

技术标签:

【中文标题】如何强制 Pillow 将图像调整为任意大小?【英文标题】:How to force Pillow to resize an image to an arbitrary size? 【发布时间】:2015-05-15 00:04:45 【问题描述】:

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

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

问题是:当使用resize 方法时,一些图像得到完全随机的尺寸。并非总是如此,但只是其中一些不尊重我赋予该方法的 144x144 的任意大小。 Here is a sample.

我尝试使用 Mac OS X Yosemite 的 Preview 来调整这些图像的大小,它可以完美运行。我需要在 Pillow 中做什么才能强制 144x144 大小并至少像 Mac 中的 Preview 一样工作?

我不能发布整个代码,但是调整大小的sn-p是:

#!/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)

【问题讨论】:

你有一个不起作用的具体例子吗?因为它对我有用。 @MarkRansom 你有 imagemagick 吗?我创建了一个存在此问题的示例:convert -size 952x804 xc:wheat canvas_wheat.jpg。如果没有,可以从imgur.com/DdxullE下载示例 @MarkRansom 我也添加了一个小sn-p。 我没有 Imagemagick,抱歉。我确实下载了您的示例,它调整为 144x144 对我来说很好。我使用的是原始 PIL 而不是 Pillow。你得到什么尺寸的输出? @MarkRansom 一样,好像根本没有调整大小。 【参考方案1】:

您遇到的问题是resize 方法返回一个 new 图像对象,您没有存储在任何地方。原始图像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)
>>> 

【讨论】:

@MarkRansom 是对的。 “你知道它会创建一个新图像,对吧?它不会修改现有图像。”。我要睡觉了。 @SomebodystillusesyouMS-DOS 这是一个容易犯的错误。 PIL 接口并不一致,有时它会就地修改,有时它会返回一个新对象。而 Python 本身并没有给你任何提示。方法名称是最终的误导,它是一个动作动词,自然会让你认为它在修改图像。 @MarkRansom:我同意 PIL 在这方面不一致。方法是打开文档,或者在交互式提示中尝试方法。

以上是关于如何强制 Pillow 将图像调整为任意大小?的主要内容,如果未能解决你的问题,请参考以下文章

调整图像大小 discord.py

如何调整 UIImageView 的大小并强制重新布局父 UITableViewCell

如何将jpeg大小减小到“所需大小”?

OpenCV:自动将窗口大小调整为显示的图像

枕头调整图像大小 - 保持纵横比

Python Pillow 的缩略图方法返回无