PIL Image.resize () не изменяет размер изображения - PullRequest
29 голосов
/ 10 августа 2009

У меня странная проблема с 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 кб до 20 кб, но размеры остаются такими же.

Возможно, вы также можете предложить способ обрезки изображений в квадраты с меньшим количеством кода. Я вроде думал, что Image.thumbnail делает это, но он сделал то, что он масштабировал мое изображение до 150 пикселей по ширине, оставляя высоту 100 пикселей.

1 Ответ

83 голосов
/ 10 августа 2009

resize() возвращает копию изображения с измененным размером. Это не меняет оригинал. Правильный способ его использования:

from PIL import Image
#...

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

источник

Я думаю, что вы ищете функцию ImageOps.fit. Из PIL документы :

ImageOps.fit (изображение, размер, метод, удаление, центрирование) => изображение

Возвращает размерную и обрезанную версию изображение, обрезанное до запрошенного соотношение сторон и размер. Размер аргумент - запрашиваемый размер вывода в пикселях, как (ширина, высота) кортеж.

...