#python #rotation #python-imaging-library
Вопрос:
Мне нужно создать программу, которая поворачивает изображение на четверть оборота против часовой стрелки без использования функции поворота в python. Я думаю, что моя программа должна работать, изображение создано, но нет ничего, кроме черного изображения. Мой код:
im = Image.open("smiley.bmp") im.show() largeur, hauteur= im.size px = im.load() def rotation(image): largeur, hauteur= image.size new = im.copy() if largeur gt;1: moitie = largeur//2 a = im.crop((0, 0, moitie, moitie)) # en haut à gauche b = im.crop((moitie,0,hauteur,moitie))# en haut à droite c = im.crop((moitie,moitie,hauteur,hauteur)) # en bas à droite d= im.crop((0,moitie,moitie,hauteur))# en bas à gauche #récursif rotation(a) rotation(b) rotation(c) rotation(d) new.paste(d,(0,0)) #d à la place de a new.paste(a,(moitie,0)) #a à la place de b new.paste(b,(moitie,moitie)) new.paste(c,(0,moitie)) new.save("smiley1.png")
Изображение будет квадратным.
Я использую pycharm и replit python.
Комментарии:
1. Пожалуйста, покажите нам полную полученную вами ошибку, включая обратную трассировку. «некоторые вещи блокируют это» — не полезная отладочная информация.
2. @Kemp,Ошибка не видна на python, просто изображение создано, но нет ничего, кроме черного изображения.
3. Тогда это и есть та важная информация, которая нам нужна. Вы не упомянули, в чем была реальная проблема в вашем первоначальном посте.
4. @Кемп, о, мой плохой друг, но я не знаю, в чем проблема, вот почему.
5. Одна вещь, которую я скажу, заключается в том, что ваша обрезка будет работать по совпадению для квадратного изображения, но будет совершенно неправильной для всего остального. Кроме того, вы вызываете функцию рекурсивно, но никогда ничего не возвращаете и не изменяете входной параметр. Вы просто сохраняете выходной файл снова и снова (в том числе, как только вы дойдете до одного пикселя, вы просто сохраните этот пиксель как целое изображение).
Ответ №1:
Я предполагаю, что вы хотели бы использовать алгоритм рекурсии для решения проблемы, поэтому я немного изменил ваш код.
from PIL import Image im = Image.open("smiley.bmp") im.show() largeur, hauteur= im.size px = im.load() def my_rotate(image,largeur, hauteur): if largeurlt;2: return image moitie = largeur//2 a = image.crop((0, 0, moitie, moitie)) # en haut à gauche b = image.crop((moitie,0,hauteur,moitie))# en haut à droite c = image.crop((moitie,moitie,hauteur,hauteur)) # en bas à droite d = image.crop((0,moitie,moitie,hauteur))# en bas à gauche a = my_rotate(a, moitie, moitie) b = my_rotate(b, moitie, moitie) c = my_rotate(c, moitie, moitie) d = my_rotate(d, moitie, moitie) new=image.copy() new.paste(d,(0,0)) #d à la place de a new.paste(a,(moitie,0)) #a à la place de b new.paste(b,(moitie,moitie)) new.paste(c,(0,moitie)) return new new = im.copy() new = my_rotate(im, largeur, hauteur) new.save("smiley1.png")