8 Stimmen

Wie schließt man ein Bild?

Ich versuche, eine Bilddatei zu bearbeiten und die Änderungen wieder in der Originaldatei zu speichern. Das Problem, das ich habe, ist das Überschreiben des Originalbildes; es scheint keinen zuverlässigen Weg zu geben, den Griff auf filename .

Dieser Inhalt muss wieder in derselben Datei gespeichert werden, da externe Prozesse darauf angewiesen sind, dass der Dateiname gleich bleibt.

def do_post_processing(filename):
    image = Image.open(str(filename))
    try:
        new_image = optimalimage.trim(image)
    except ValueError as ex:
        # The image is a blank placeholder image.
        new_image = image.copy()
    new_image = optimalimage.rescale(new_image)
    new_image.save('tmp.tif')
    del image

    os.remove(str(filename))
    os.rename('tmp.tif', str(filename))

del image funktionierte, bis ich den Exception-Handler hinzufügte, mit dem ich eine Kopie des Bildes erstellte. Ich habe auch versucht, den Zugriff auf eine close() Attribut von Image und with image kein Erfolg.

16voto

David Z Punkte 121773

Sie können ein dateiähnliches Objekt anstelle eines Dateinamens an die Funktion Image.open Funktion. Versuchen Sie also Folgendes:

def do_post_processing(filename):
    with open(str(filename), 'rb') as f:
        image = Image.open(f)
        ...
        del new_image, image
    os.remove(str(filename))
    os.rename(...)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X