1

画像を回転した後、画像を保存するのに問題があります。つまり、画像を回転させた後に関数 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) 

ただし、どこに問題があるのか​​ わかりません。誰かがそれを見つけるのを手伝ってくれることを本当に願っています. ありがとう。

編集済み

以下は、変数をグローバルに宣言する関数です。これは、画像ファイルを開き、ファイルの情報を使用して変数に値を割り当てるために使用されます。

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

以下は、回転関数を呼び出すために私が書いたコードです。誰かがそれを必要とする場合に備えて。

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

2 に答える 2

1

を呼び出すときにsave、元の画像を参照する変数を渡すのではないかと思います。right90ないので、推測するだけreturn imageです。

于 2012-06-03T17:57:05.417 に答える
0

image変数名とimage1?の両方が必要です。それは潜在的に問題の原因になる可能性があると思います.@janne Karilaに同意します.変更された画像を返さない可能性が最も高い.

関数内でimage.show()/を実行して、それが何を示すかを確認できますか?image1.show()right90

于 2012-06-03T18:15:24.250 に答える