import Image
image = Image.open('images/original.jpg')
width = image.size[0]
height = image.size[1]
if width > height:
difference = width - height
offset = difference / 2
resize = (offset, 0, width - offset, height)
else:
difference = height - width
offset = difference / 2
resize = (0, offset, width, height - offset)
thumb = image.crop(resize).resize((200, 200), Image.ANTIALIAS)
thumb.save('thumb.jpg')
Это мой текущий сценарий создания миниатюр. Как это работает:
Если у вас есть изображение размером 400x300 и вам нужна миниатюра размером 100x100, это займет 50 пикселей с левой и правой стороны исходного изображения. Таким образом, изменив его размер до 300x300. Это дает исходному изображению такое же соотношение сторон, как и у нового эскиза. После этого он уменьшит его до необходимого размера эскиза.
Преимущества этого:
- Миниатюра берется из центра изображения.
- Соотношение сторон не испортится
Если вы уменьшите изображение размером 400x300 до 100x100, оно будет выглядеть сжатым. Если вы взяли миниатюру с координатами 0x0, вы получите верхний левый угол изображения. Обычно фокус изображения - это центр.
Что я хочу сделать, так это задать скрипту ширину / высоту любого соотношения сторон. Например, если я хочу изменить размер изображения 400x300 до 400x100, он должен уменьшить на 150 пикселей левую и правую стороны изображения ...
Я не могу придумать, как это сделать. Любые идеи?
resize
в вызовеcrop
для согласованности с вопросом ... - person Mark Longair   schedule 20.01.2011