如何强制 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 将图像调整为任意大小?的主要内容,如果未能解决你的问题,请参考以下文章