Метод rotate()
из модуля Image применяется для поворачивания изображения в зависимости от указанных градусов.
Содержание статьи
- Угол вращения картинки в Pillow
- Поворачиваем изображение полностью
- Фильтры NEAREST, BILINEAR и BICUBIC в Pillow
- Меняем центр изображения при её поворачивании
- Смещение изображения при поворачивании
Загружаем и сохраняем картинку: guido-van-rossum.jpg
1 2 3 4 |
from PIL import Image im = Image.open('guido-van-rossum.jpg') im.show() |
Данный код выведет наше изображение.
Угол вращения картинки в Pillow
В методе rotate()
указываем угол вращения изображения в градусах в качестве первого аргумента. Направление вращения будет против часовой стрелки.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Поворачиваем изображение на 90 градусов:
1 2 3 4 5 6 7 |
from PIL import Image im = Image.open('guido-van-rossum.jpg') im_rotate = im.rotate(90) im_rotate.save('guido_90.jpg', quality=95) im.close() |
Полученный результат с повернутой картинкой на 90 градусов против часовой стрелки:
Поворачиваем изображение на 45 градусов через PIL в Python:
1 2 3 4 5 6 7 |
from PIL import Image im = Image.open('guido-van-rossum.jpg') im_rotate = im.rotate(45) im_rotate.save('guido_45.jpg', quality=95) im.close() |
Поворачиваем изображение полностью
Как видно на картинках в примерах выше, по умолчанию размер готового изображения равен размеру изначального изображения, а части повернутого изображения которые попали за пределами изначального размера отсекаются. Если мы поставим параметр expand
на True
, то повернутое изображение удовлетворит наши требования.
1 2 3 4 5 6 7 |
from PIL import Image im = Image.open('guido-van-rossum.jpg') im_rotate = im.rotate(90, expand=True) im_rotate.save('guido_expand_90.jpg', quality=95) im.close() |
Теперь изображение выглядит так как мы ожидали. Она повернулась полностью, без черных границ по сторонам.
Поворачиваем изображение на 45 градусов.
1 2 3 4 5 6 7 |
from PIL import Image im = Image.open('guido-van-rossum.jpg') im_rotate = im.rotate(45, expand=True) im_rotate.save('guido_expand_45.jpg', quality=95) im.close() |
Полученный результат:
Фильтры NEAREST, BILINEAR и BICUBIC в Pillow
Параметр resample
можно использовать для указания определенного фильтра, который будет использоваться при поворачивании изображения.
Image.NEAREST
(ближайший сосед / по умолчанию);Image.BILINEAR
;Image.BICUBIC
.
С помощью фильтра Image.BICUBIC
детали изображения станут более четким, чем в случае использования фильтра по умолчанию Image.NEAREST
.
1 2 3 4 5 6 7 |
from PIL import Image im = Image.open('guido-van-rossum.jpg') im_rotate = im.rotate(45, expand=True, resample=Image.BICUBIC) im_rotate.save('guido_resample_bicubic.jpg', quality=95) im.close() |
Image.NEAREST | Image.BILINEAR | Image.BICUBIC |
Небольшие различия есть, но у данной картинки они не очень видны. Но, например фильтр Image.BILINEAR сделал картинку более гладкой.
Меняем центр изображения при её поворачивании
Вы можете уточнить позицию центра изображения с помощью параметра center
в методе rotate()
.
1 2 3 4 5 6 7 |
from PIL import Image im = Image.open('guido-van-rossum.jpg') im_rotate = im.rotate(45, center=(0, 100)) im_rotate.save('guido_new_center.jpg', quality=95) im.close() |
В случае, когда параметр expand=True
, область выходящего изображения определяется предположением, что картинка крутится по своему изначальному центру.
1 2 3 4 5 6 7 |
from PIL import Image im = Image.open('guido-van-rossum.jpg') im_rotate = im.rotate(45, expand=True, center=(0, 100)) im_rotate.save('guido_new_center_expand.jpg', quality=95) im.close() |
Смещение изображения при поворачивании
Вы можете задать определенное смещение перед вращением изображения с помощью параметра translate
. Параметр translate
требует два координата (смещения в x
направлении, смещения в y
направлении).
Чтобы продемонстрировать данное смещение, мы не будем поворачивать изображение а просто укажем нужное нам смещение.
1 2 3 4 5 6 7 |
from PIL import Image im = Image.open('guido-van-rossum.jpg') im_rotate = im.rotate(0, translate=(100, 50)) im_rotate.save('guido_translate_0.jpg', quality=95) im.close() |
Полученный результат:
Поворот изображения на 45 градусов со смещением:
1 2 3 4 5 6 7 |
from PIL import Image im = Image.open('guido-van-rossum.jpg') im_rotate = im.rotate(45, translate=(100, 50)) im_rotate.save('guido_translate_45.jpg', quality=95) im.close() |
Полученный результат:
Если параметр expand=True
, итоговая область изображения определяется предположением, что картинка вращается без смещения.
1 2 3 4 5 6 7 |
from PIL import Image im = Image.open('guido-van-rossum.jpg') im_rotate = im.rotate(45, translate=(100, 50), expand=True) im_rotate.save('guido_translate_expand_45.jpg', quality=95) im.close() |
Итоговое изображение:
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
- 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»