Поворот изображения на 90 градусов - PullRequest
1 голос
/ 03 апреля 2020
def rotate_picture_90_left(img: Image) -> Image:
    """Return a NEW picture that is the given Image img rotated 90 degrees
    to the left.

    Hints:
    - create a new blank image that has reverse width and height
    - reverse the coordinates of each pixel in the original picture, img,
        and put it into the new picture
    """
    img_width, img_height = img.size
    pixels = img.load()  # create the pixel map
    rotated_img = Image.new('RGB', (img_height, img_width))
    pixelz = rotated_img.load()
    for i in range(img_width):
        for j in range(img_height):
            pixelz[i, j] = pixels[i, j]
    return rotated_img

Я считаю, что мой код не работает из-за нового изображения, которое я создал, а также из-за обратной ширины, длины и обращения координат в исходном изображении. Как я могу исправить свой код, чтобы правильно повернуть изображение?

1 Ответ

0 голосов
/ 03 апреля 2020

Вам необходимо учитывать следующие логи c при преобразовании координат:

  • y поворачиваясь к x
  • x поворачиваясь к y, но переходя от конец к началу

Вот код:

from PIL import Image

def rotate_picture_90_left(img: Image) -> Image:
    w, h = img.size
    pixels = img.load()
    img_new = Image.new('RGB', (h, w))
    pixels_new = img_new.load()
    for y in range(h):
        for x in range(w):
            pixels_new[y, w-x-1] = pixels[x, y]
    return img_new

Пример:

enter image description hereenter image description here

...