【问题标题】:How to force Pillow to resize an image to an arbitrary size?如何强制 Pillow 将图像调整为任意大小?
【发布时间】: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 一样,好像根本没有调整大小。

标签: python image-processing python-imaging-library


【解决方案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 在这方面不一致。方法是打开文档,或者在交互式提示中尝试方法。
猜你喜欢
  • 2014-08-26
  • 2015-06-04
  • 2015-02-23
  • 1970-01-01
  • 2017-09-26
  • 2022-01-23
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多