Программа для поворота изображения с помощью подушки без ошибки функции поворота

#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")