Как повернуть изображение используя Pillow
Метод rotate() из модуля Image применяется для поворачивания изображения в зависимости от указанных градусов.
Содержание статьи
Загружаем и сохраняем картинку: guido-van-rossum.jpg
Данный код выведет наше изображение.
Угол вращения картинки в Pillow
В методе rotate() указываем угол вращения изображения в градусах в качестве первого аргумента. Направление вращения будет против часовой стрелки.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Поворачиваем изображение на 90 градусов:
Полученный результат с повернутой картинкой на 90 градусов против часовой стрелки:
Поворачиваем изображение на 45 градусов через PIL в Python:
Поворачиваем изображение полностью
Как видно на картинках в примерах выше, по умолчанию размер готового изображения равен размеру изначального изображения, а части повернутого изображения которые попали за пределами изначального размера отсекаются. Если мы поставим параметр expand на True , то повернутое изображение удовлетворит наши требования.
Теперь изображение выглядит так как мы ожидали. Она повернулась полностью, без черных границ по сторонам.
Поворачиваем изображение на 45 градусов.
Фильтры NEAREST, BILINEAR и BICUBIC в Pillow
Параметр resample можно использовать для указания определенного фильтра, который будет использоваться при поворачивании изображения.
- Image.NEAREST (ближайший сосед / по умолчанию);
- Image.BILINEAR ;
- Image.BICUBIC .
С помощью фильтра Image.BICUBIC детали изображения станут более четким, чем в случае использования фильтра по умолчанию Image.NEAREST .
Image.NEAREST | Image.BILINEAR | Image.BICUBIC |
Небольшие различия есть, но у данной картинки они не очень видны. Но, например фильтр Image.BILINEAR сделал картинку более гладкой.
Меняем центр изображения при её поворачивании
Вы можете уточнить позицию центра изображения с помощью параметра center в методе rotate() .
Поворот и отображение изображения на 45, 90, 180, 270 градусов в Python
Чтобы повернуть изображение на угол с помощью Pillow, вы можете использовать метод rotate() для объекта Image, который вращает изображение против часовой стрелки.
Синтаксис
Синтаксис метода rotate() показан в следующем блоке кода.
- angle – в градусах против часовой стрелки;
- resample – необязательный фильтр передискретизации. Это может быть один из PIL.Image.NEAREST (использовать ближайшего соседа), PIL.Image.BILINEAR (линейная интерполяция в среде 2 × -2) или PIL.Image.BICUBIC (интерполяция кубическим сплайном в среде 4 × 4). Если опущено или если изображение имеет режим «1» или «P», устанавливается значение PIL.Image.NEAREST;
- expand – необязательное расширение. Если задано значение true, выходное изображение расширяется до размера, достаточного для размещения всего повернутого изображения. Если false или опущено, сделайте выходное изображение того же размера, что и входное изображение. Обратите внимание, что flag расширения предполагает вращение вокруг центра и отсутствие смещения;
- center – необязательный центр вращения (кортеж из двух элементов). Начало координат – левый верхний угол. По умолчанию это центр изображения;
- translate – необязательный перевод после поворота (двухкортежный);
- fillcolor – необязательный цвет для области за пределами повернутого изображения.
Пример 1: повернуть изображение на 45 градусов
В следующем примере мы повернем изображение на 45 градусов против часовой стрелки.
Размер исходного изображения сохраняется. Вы можете настроить размер выходного изображения в соответствии с поворотом.
Пример 2
В следующем примере мы настроим размер выходного изображения в соответствии с поворотом, используя параметр expand = True.
Пример 3: поворот на 90 градусов
Вы можете повернуть изображение на 90 градусов против часовой стрелки, задав угол = 90. Мы также указываем expand = True, чтобы повернутое изображение подстраивалось под размер вывода.
Пример 4: поворот на 180 градусов
В этом примере Python Pillow мы повернем изображение на 180 градусов.
Отображение изображения
Чтобы показать или отобразить изображение в Pillow, вы можете использовать метод show() для объекта изображения.
Метод show() записывает изображение во временный файл, а затем запускает программу по умолчанию для отображения этого изображения. По завершении выполнения программы временный файл будет удален.
Пример 1
В следующем примере мы прочитаем изображение и покажем его пользователю в графическом интерфейсе с помощью метода show().
В этом скрипте мы используем ПК с Windows, а программа «Фото» по умолчанию используется для открытия изображений BMP. Следовательно, метод show() отображал изображение с помощью программы Photos.
Пример 2
Вы можете отображать несколько изображений. Все изображения будут сложены, поскольку метод show() запускает отдельные экземпляры программы по умолчанию, которая отображает изображение на вашем компьютере.
В следующем примере мы прочитаем несколько изображений и покажем их пользователю в графическом интерфейсе с помощью метода show().
Rotating Image By Any Angle(Shear Transformation) Using Only NumPy
T hese days, we are spoiled with high end libraries. When It comes to Image Processing and advanced libraries such as OpenCV Rotating Image may sound like a very easy task using inbuilt functions.I am not telling you to code everything from scratch, However, an understanding about how things work will make you a better programmer. So let’s get started.
BITMAPS
A typical computer image these days uses 24 bits to represent the color of each pixel. Eight bits are used to store the intensity of the red part of a pixel (00000000 through 11111111), giving 256 distinct values. Eight bits are used to store the green component, and eight bits are used to store the blue component.
Each pixel has a coordinate pair (x,y) describing its position on two orthogonal axes from defined origin O.It is around this origin we are going to rotate this image.What we need to do is take the RGB values at every (x,y) location, rotate it as needed, and then write these values in the new location, considering (x,y) with respect to the origin we assumed.The new location is obtained by using the transformation matrix.
When image will be rotated ,the dimension of the frame containing it will change so to find the new dimensions we use this formula,
now let’s code it
ALIASING
So our resultant image is rotated by 15 degrees ,so it really worked,but what are those black dots?This is a problem called aliasing.Multiplying by sines and cosines on the integer coordinates of the source image gives real number results, and these have to be rounded back to integers again to be plotted. Sometimes this number rounding means the same destination location is addressed more than once, and sometimes certain pixels are missed completely. When the pixels are missed, the background shows through. This is why there are holes.The aliasing problem gets worse when angles are closesr to the diagonals. Here are a few examples of images at different rotations:
What can we do about this? There are a variety of solutions. One of them is to oversample the source image. We can pretend that each of the original source pixels is really a grid of n x n smaller pixels (all of the same color), and calculate the destination coordinates of each of these subpixels and plot these
A more refined way is called Area Mapping. For this, you invert the problem, and for each destination pixel, you find which four partial source pixels that it was created from. The color for the destination is calculated by the area-weighted average of the four source pixels (The source pixels that contribute more to the destination pixel have a greater influence on its color). This algorithm not only ensures that there are no gaps in the destination, but also appropriately averages the colors (ensuring both a smoother image and also keeping the average brightness of the rotated image constant).
However, there is a more elegant method, and this is the method that was used many years ago when computing power (and memory) were at a premium and every processor cycle worth its weight in gold. It is called the three shear rotation method.
THREE SHEARS
These method works by expanding 2D rotation matrix into three different matrices.
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.
- 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
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.
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.
4. Rotate image by 180 degrees
In this Python Pillow example, we will rotate the image by 180 degrees.
Summary
Concluding this tutorial of Python Examples, we learned how to rotate an image using Python PIL library.