Как я изменяю размеры изображения с помощью PIL и поддерживаю его соотношение сторон?

Первое, что я могу придумать, - это объединить два фрейма данных и затем выполнить умножение с объединенным фреймом данных:

tmp = df1.merge(df2)

tmp
#   alpha  number  mult
# 0     A       1     2
# 1     A       2     2
# 2     A       3     2
# 3     B       4     3
# 4     B       5     3
# 5     B       6     3
# 6     C       7     4
# 7     C       8     4
# 8     C       9     4

df1.soln = tmp.number * tmp.mult

Это работает, хотя я чувствую, что должен быть более простой шаг тоже.

РЕДАКТИРОВАТЬ - вот способ сделать это в одной строке:

df1.soln = (df1.set_index("alpha").number * df2.set_index("alpha").mult).values

РЕДАКТИРОВАТЬ2 - вот еще одна строчка, похожая на комментарий @ scott-boston:

df1.soln = df1.merge(df2).assign(soln=lambda df: df.number * df.mult).soln
392
задан Ali Afshar 7 November 2008 в 13:41
поделиться

2 ответа

Обновили ответ выше "tomvon"

from PIL import Image

img = Image.open(image_path)

width, height = img.size[:2]

if height > width:
    baseheight = 64
    hpercent = (baseheight/float(img.size[1]))
    wsize = int((float(img.size[0])*float(hpercent)))
    img = img.resize((wsize, baseheight), Image.ANTIALIAS)
    img.save('resized.jpg')
else:
    basewidth = 64
    wpercent = (basewidth/float(img.size[0]))
    hsize = int((float(img.size[1])*float(wpercent)))
    img = img.resize((basewidth,hsize), Image.ANTIALIAS)
    img.save('resized.jpg')
1
ответ дан 22 November 2019 в 23:46
поделиться

Я также рекомендую использовать метод эскизов PIL, потому что он устраняет все проблемы с соотношением сторон.

Однако один важный совет: замените

im.thumbnail(size)

на

im.thumbnail(size,Image.ANTIALIAS)

по умолчанию, PIL использует фильтр Image.NEAREST для изменения размера, который дает хорошую производительность, но плохое качество.

61
ответ дан 22 November 2019 в 23:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: