Python PIL旋转后保存图像

时间:2012-06-03 17:46:17

标签: python image save rotation python-imaging-library

旋转后保存图像时遇到问题。我的意思是,当我在旋转图像后调用函数save时,没有任何反应。旧图像保持不变,我的另存为函数也出现同样的问题。我想问题在于我的旋转功能:

 def right90 (root, image, panel, filemenu):
        image = image.transpose(Image.ROTATE_90)
        image1 = ImageTk.PhotoImage(image)
        root.geometry("%dx%d+%d+%d" % (image.size[0], image.size[1], 0, 0))
        panel.configure(image = image1)
        panel.pack(side='top', fill='both', expand='yes')
        panel.image = image1

以下是我使用的保存功能。我猜似乎没有任何问题。

def save(image, filename):
    image.save(filename) 

但是,我似乎无法弄清问题所在。我真的希望有人能帮助我找到它。谢谢。

被修改

下面是我声明变量global的函数。这用于打开图像文件并使用文件的信息为变量赋值。

def display(root):
    global filename
    filename = askopenfilename(filetypes=[("All Files","*"),("All Picture Files","*bmp; *.png; *.jpg; *.jpeg; *.jpe; *.tif; *.tiff")])

    global image
    global panel
    try:
        image = Image.open(filename)
        image1 = ImageTk.PhotoImage(file=filename)
        root.geometry("%dx%d+%d+%d" % (image.size[0], image.size[1], 0, 0))
        panel.configure(image = image1)
        panel.pack(side='top', fill='both', expand='yes')
        panel.image = image1

    except NameError:        
        image = Image.open(filename)
        image1 = ImageTk.PhotoImage(file=filename)
        root.geometry("%dx%d+%d+%d" % (image.size[0], image.size[1], 0, 0))
        panel= Label(root, image = image1)
        panel.pack(side='top', fill='both', expand='yes')
        panel.image = image1

以下是我编写的用于调用rotate函数的代码。如果有人需要它。

rotatemenu.choices.add_command(label="rotate right 90°", command = lambda:img.right90(root, image, panel, filemenu))

2 个答案:

答案 0 :(得分:1)

我怀疑当你致电save时,你会传递一个引用原始图像的变量。只是猜测,因为right90没有return image

答案 1 :(得分:0)

是否有必要同时拥有变量名imageimage1?我认为这可能是问题的根源,我同意@janne Karila,你很可能不会返回更改的图像。

您可以在image.show()功能中执行image1.show() / right90并查看其显示内容吗?