- Python Pillow – Rotate Image 45, 90, 180, 270 degrees
- Syntax of PIL Image.rotate()
- Examples
- 1: Rotate given image by 45 degrees
- 2. Rotate image and adjust the output size
- 3. Rotate image by 90 degrees
- 4. Rotate image by 180 degrees
- Summary
- Введение в обработку изображений в Python при помощи Pillow
- Давайте начнем
- Конвертирование расширения изображения
- Обрезка изображения
- Геометрическое преобразование
- Изменение размера изображения
- Поворот изображения
- Генератор изображений
- Фильтрация изображений
- Пример использования
- Чтение изображения из открытого файла
- Чтение изображения из URL
- Создание новых изображений
- Рисование прямоугольников на изображениях
- Пример исползования
- Рисование текста на изображениях
- Как повернуть изображение используя Pillow
- Угол вращения картинки в Pillow
- Поворачиваем изображение полностью
- Фильтры NEAREST, BILINEAR и BICUBIC в Pillow
- Меняем центр изображения при её поворачивании
Python Pillow – Rotate Image 45, 90, 180, 270 degrees
To rotate an image by an angle with Python Pillow, you can use rotate() method on the Image object. rotate() method rotates the image in counter clockwise direction.
In this tutorial, we shall learn how to rotate an image, using PIL Python library, with the help of example programs.
Syntax of PIL Image.rotate()
The syntax of rotate() method is as shown in the following code block.
Image.rotate(angle, resample=0, expand=0, center=None, translate=None, fillcolor=None)
- angle – In degrees counter clockwise.
- resample – An optional resampling filter. This can be one of PIL.Image.NEAREST (use nearest neighbour), PIL.Image.BILINEAR (linear interpolation in a 2×2 environment), or PIL.Image.BICUBIC (cubic spline interpolation in a 4×4 environment). If omitted, or if the image has mode “1” or “P”, it is set PIL.Image.NEAREST. See Filters.
- expand – Optional expansion flag. If true, expands the output image to make it large enough to hold the entire rotated image. If false or omitted, make the output image the same size as the input image. Note that the expand flag assumes rotation around the center and no translation.
- center – Optional center of rotation (a 2-tuple). Origin is the upper left corner. Default is the center of the image.
- translate – An optional post-rotate translation (a 2-tuple).
- fillcolor – An optional color for area outside the rotated image.
Examples
1: Rotate given image by 45 degrees
In the following example, we will rotate the image by 45 degrees in counter clockwise direction.
Python Program
from PIL import Image #read the image im = Image.open("sample-image.png") #rotate image angle = 45 out = im.rotate(angle) out.save('rotate-output.png')
Input Image – sample-image.png
Output Image – rotate-image.png
The size of the original image is preserved. You can make the size of the output image adjust to the rotation.
2. Rotate image and adjust the output size
In the following example, we will adjust the size of output image to the rotation, by using the parameter expand=True.
from PIL import Image #read the image im = Image.open("sample-image.png") #rotate image angle = 45 out = im.rotate(angle, expand=True) out.save('rotate-output.png')
3. Rotate image by 90 degrees
You can rotate an image by 90 degrees in counter clockwise direction by providing the angle=90. We also give expand=True, so that the rotated image adjusts to the size of output.
from PIL import Image #read the image im = Image.open("sample-image.png") #rotate image by 90 degrees angle = 90 out = im.rotate(angle, expand=True) out.save('rotate-output.png')
4. Rotate image by 180 degrees
In this Python Pillow example, we will rotate the image by 180 degrees.
from PIL import Image #read the image im = Image.open("sample-image.png") #rotate image by 180 degrees angle = 180 out = im.rotate(angle, expand=True) out.save('rotate-output.png')
Summary
Concluding this tutorial of Python Examples, we learned how to rotate an image using Python PIL library.
Введение в обработку изображений в Python при помощи Pillow
Бывает такой заходишь на почту и видишь очередную подборку статей, которые никогда не прочитаешь, но тут так сошлись звезды, что и открыл статью, и прочел, и придумал, где на практике пригодится. А теперь хочу поделиться статьей с Хабром, чтобы если кому-то нужен будет простой и понятный гайд по работе с изображениями на Python — пожалуйста.
Pillow — это свободно распространяемая библиотека для работы с изображениями (далее Imaging Library) на Python с открытым исходным кодом, которая добавляет вашему коду поддержку открытия, изменения и сохранения изображений в различных расширениях.
Давайте начнем
Самый важный класс в Imaging Library Python — это класс Image, определенный в одноименном модуле. Мы используем open(), чтобы открыть изображение в нашей локальной директории, как показано ниже:
from PIL import Image sample = Image.open('pena.jpg')
Это просто! Теперь вы умеете считывать изображения с помощью Pillow, а значит можно приступать к обработке изображения с его помощью. Вы также можете проверить тип изображения, которое мы только что загрузили.
type(sample) PIL.JpegImagePlugin.JpegImageFile
Вы можете посмотреть свойства изображения, например:
sample.format 'JPEG' sample.size (640, 640) sample.mode 'RGB'
Кроме того, вы можете вывести на экран изображение, используя метод show
sample.show() #Открывает в новом окне, расширение изображения меняется на PNG
Конвертирование расширения изображения
Когда вы закончите работать с изображением при помощи библиотеки Pillow в изначальном расширении, вы можете пересохранить его в других форматах, например, их jpg сделать png или многие другие.
Для примера, давайте попробуем написать простую программу на Python для преобразования всех изображений в каталоге вашего проекта, которые находятся в формате jpg, в формат png.
import os import sys from PIL import Image jpg_images = [image for image in os.listdir() if image.endswith('.jpg')] for jpg_image in jpg_images: try: new_name = jpg_image.split('.')[0] + '.png' Image.open(jpg_image).save(new_name) except IOError as error: print('Couldn\'t read <> '.format(jpg_image))
После того, как вы запустите приведенный выше код, в каталоге проекта, состоящем из изображений в формате jpg, откроются все изображения и преобразуются в .png, как показано на скриншоте. Вы можете повторить тот же процесс для преобразования изображений в другие преобразований.
Обрезка изображения
Pillow также может использоваться для обрезки изображения, при этом вы можете получить производный прямоугольник выбранного изображения, указав координаты, по которым преобразовать изображение.
from PIL import Image picture = Image.open('pena.png') cord = (10, 10, 640, 340) # лево, верх, право, низ new_picture = picture.crop(cord) new_picture.show()
Как мы видим, изображение было успешно обрезано. Координаты обрезанной поверхности представлены диагональными координатами.
При этом первые две точки находятся (x, y) от верхней левой диагональной точки, а следующие две точки (x2, y2) также являются диагональной точкой снизу справа.
Геометрическое преобразование
С помощью Pillow мы можем выполнять некоторые геометрические преобразования над изображением, включая изменение размера и поворот изображения.
Эти знания играют большую роль при генерации данных для глубокого обучения путем преобразования одного изображения в тонны других изображений с разных ракурсов.
Изменение размера изображения
from PIL import Image image = Image.open('pena.png') resized_image = image.resize((320, 320)) resized_image.save('resized.png')
Когда вы запустите приведенный выше код, вы должны увидеть новое изображение с измененным размером в вашем каталоге с размером 320 на 320.
Поворот изображения
from PIL import Image image = Image.open('pena.png') rotated_img = image.rotate(80) rotated_img.save('./rotation/rotated_img.png')
Используйте функцию вращения для создания 360 изображений одного из того же изображения под разными углами — это поможет сгенерировать данные, которые вы потенциально можете использовать для обучения своей модели глубокого обучения.
Генератор изображений
from PIL import Image images = ['pena.jpg'] for img in images: try: org_img = Image.open(img) for angle in range(1, 361): image_name = str(angle)+'.jpg' new_img = org_img.rotate(angle) new_img.save('./rotation/'+image_name) except IOError: print('Couldn\'t read <>'.format(img))
После запуска скрипта, вы должны увидеть 360 изображений одного и того же исходного изображения с разным поворотом, как показано ниже.
Фильтрация изображений
Фильтрация — это метод изменения или улучшения изображения. Например, вы можете отфильтровать изображение, чтобы выделить определенные особенности или удалить другие.
Фильтрация изображений используется для получения различных результатов, как, например,- сглаживание, повышение резкости, удаление шума и обнаружение краев.
В библиотеке Pillow доступно множество фильтров, включая BLUR, BoxBlur, CONTOUR, FIND_EDGES, Filter, GaussianBlur, Kernel, MaxFilter, MedianFilter, SHARPEN, SMOOTH и т.д.
Пример использования
Давайте попробуем найти края на изображении ниже, используя фильтр FIND_EDGES.
from PIL import Image from PIL import Image, ImageFilter image = Image.open('pena.jpg') edges = image.filter(ImageFilter.FIND_EDGES) edges.show()
Таким же образом вы можете экспериментировать с другими фильтрами в Python библиотеке Pillow в зависимости от того, что вы пытаетесь сделать.
Чтение изображения из открытого файла
Кроме того, вы можете использовать Pillow для чтения изображения из файлового объекта Python, как показано ниже
from PIL import Image image = Image.open(open('pena.jpg', 'rb'))
Чтение изображения из URL
В этом случае вам придется использовать Pillow в сочетании с запросами. Запросы должны будут отправлять GET-request на сервер, чтобы получить необработанные байты изображения, а уже Pillow считает эти байты.
import requests from PIL import Image url = 'http://pena.marketing/images/Logo1.png' raw = requests.get(url, stream=True).raw Image.open(raw).show()
Создание новых изображений
С помощью Pillow вы также можете создать новое пустое изображение, которое может понадобиться для различных целей. Используйте Image.new() для создания совершенно нового изображения.
new = Image.new(mode, shape, color)
Пример использования:
from PIL import Image new_img = Image.new('RGB', (500, 500), 'blue') new_img.show()
Рисование прямоугольников на изображениях
Pillow также может использоваться для рисования прямоугольника на изображениях. Обычно это делают при обнаружении объекта. При этом вы можете нарисовать не просто прямоугольник, а рамку над обнаруженным объектом.
Пример исползования
Давайте попробуем нарисовать прямоугольную рамку внутри пустого изображения.
from PIL import Image, ImageDraw new_img = Image.new('RGB', (400, 400), 'black') pencil = ImageDraw.Draw(new_img) pencil.rectangle((200, 50, 300, 300), fill ='green') new_img.show()
Первые две координаты представляют (x, y) левой верхней части, а следующие две (x2, y2) представляют координатную точку правой нижней части.
Рисование текста на изображениях
Мы также можем использовать библиотеку Pillow для рисования текста на изображениях.
from PIL import Image , ImageDraw, ImageFont new_img = Image.new('RGB', (200, 200), 'black') font = ImageFont.load_default() pencil = ImageDraw.Draw(new_img) pencil.text((100,100),'Hello World', font=font, fill='blue', size = 36) new_img.show()
Как повернуть изображение используя Pillow
Метод rotate() из модуля Image применяется для поворачивания изображения в зависимости от указанных градусов.
Загружаем и сохраняем картинку: guido-van-rossum.jpg
Данный код выведет наше изображение.
Угол вращения картинки в Pillow
В методе rotate() указываем угол вращения изображения в градусах в качестве первого аргумента. Направление вращения будет против часовой стрелки.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Поворачиваем изображение на 90 градусов:
Полученный результат с повернутой картинкой на 90 градусов против часовой стрелки:
Поворачиваем изображение на 45 градусов через PIL в Python:
Поворачиваем изображение полностью
Как видно на картинках в примерах выше, по умолчанию размер готового изображения равен размеру изначального изображения, а части повернутого изображения которые попали за пределами изначального размера отсекаются. Если мы поставим параметр expand на True , то повернутое изображение удовлетворит наши требования.
Теперь изображение выглядит так как мы ожидали. Она повернулась полностью, без черных границ по сторонам.
Поворачиваем изображение на 45 градусов.
Фильтры NEAREST, BILINEAR и BICUBIC в Pillow
Параметр resample можно использовать для указания определенного фильтра, который будет использоваться при поворачивании изображения.
С помощью фильтра Image.BICUBIC детали изображения станут более четким, чем в случае использования фильтра по умолчанию Image.NEAREST .
Image.NEAREST | Image.BILINEAR | Image.BICUBIC |
Небольшие различия есть, но у данной картинки они не очень видны. Но, например фильтр Image.BILINEAR сделал картинку более гладкой.
Меняем центр изображения при её поворачивании
Вы можете уточнить позицию центра изображения с помощью параметра center в методе rotate() .