【问题标题】:Program to rotate an image using pillow without rotate fuction error使用枕头旋转图像的程序没有旋转功能错误
【发布时间】:2021-12-27 10:15:12
【问题描述】:

我需要制作一个程序,将图像逆时针旋转四分之一圈,而不使用 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 >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。

【问题讨论】:

  • 请向我们展示您收到的完整错误信息,包括回溯。 “有些东西阻止了它”不是有用的调试信息。
  • @Kemp,该错误在python上是不可见的,只是创建了图像但没有什么只是黑色图像。
  • 那么这就是我们需要的重要信息。您没有在原始帖子中提及实际问题。
  • @Kemp 哦,对不起,我不知道问题出在哪里,这就是原因。
  • 我要说的一件事是,您的裁剪将巧合地适用于方形图像,但对于其他任何东西都是完全错误的。此外,您递归调用该函数,但从不返回任何内容或修改输入参数。您只需一遍又一遍地保存输出文件(包括一旦您降低到单个像素,您只需将该像素保存为整个图像)。

标签: python rotation python-imaging-library


【解决方案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 largeur<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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2018-12-30
    • 2019-05-03
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多