Сделайте миниатюру с PIL, улучшенным способом - PullRequest
1 голос
/ 16 ноября 2011

Я знаю, что в PIL есть метод миниатюр.То, что я хочу сделать по-другому, это то, как он изменяет размеры исходного изображения.Предположим, у меня есть вертикальное изображение размером 300x360 пикселей.Я хочу изменить его размер на ограниченную рамку с горизонтальным изображением 150x100px.Поэтому мне нужно найти наименьшую сторону исходного изображения, изменить ее размер, а затем обрезать остальное в центр с самой большой стороны.Как я могу это сделать?

enter image description here

1 Ответ

3 голосов
/ 16 ноября 2011
from PIL import Image

width = 150
height = 100
infile = Image.open(in_filename)
im = infile.copy()

if im.size[0] >= im.size[1]:
    im = im.resize((height * im.size[0]/im.size[1], height))
    im = im.crop(((im.size[0] - width)/2, 0, (im.size[0] + width)/2, height))
else:
    im = im.resize((width, width * im.size[1]/im.size[0]))
    im = im.crop((0, (im.size[1] - height)/2, width, (im.size[1] + height)/2))

im.save(out_filename)

Возможно, есть более быстрый способ сделать это, но это должно сработать.

...