Seite 1 von 1
PIL-Problem: Wie schließe ich ein Bild
Verfasst: Montag 21. September 2009, 10:10
von meneliel
Hallo,
ich habe folgendes Problem: ich öffne ein jpg und lese die exif-Daten aus mit
im._getexif(). Anschließend möchte ich das Aufnahmedatum in den Dateinamen schreiben. Allerdings kam da folgende Fehermeldung
WindowsError: [Error 32] Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird
Ich nehme an, das JPG kann nicht umbenannt werden, weil es noch geöffnet ist vom Auslesen der Bildinformationen. Ich habe allerdings keine close-Funktion gefunden. Ich behelfe mir jetzt wie folgt:
Code: Alles auswählen
im = Image.open(pic)
exdata = im._getexif()
date = exdata[36868][0:4] +"_" + exdata[36868][5:7] + "_" + exdata[36868][8:10]
name = str(date) + "_" + suffix + "_" + str(n)
print name
del(im)
os.rename(os.path.join(path,pic), os.path.join(path,"%s.jpg")%(name))
Gibt es eine elegantere Lösung?
Verfasst: Montag 21. September 2009, 11:15
von Leonidas
Du könntest ``Image.open()`` ein ``file``-Objekt übergeben und es dann selbst schließen.
Verfasst: Montag 21. September 2009, 18:00
von HWK
Ich habe das bisher auch immer mit del gemacht.
MfG
HWK
Verfasst: Montag 21. September 2009, 18:09
von BlackJack
@HWK: Wobei das aber leider nicht 100% zuverlässig ist. Selbst bei CPython kann man Situation bekommen, wo es noch, nicht ganz so offensichtliche, Referenzen geben kann.
Re: PIL-Problem: Wie schließe ich ein Bild
Verfasst: Montag 21. September 2009, 19:24
von Darii
meneliel hat geschrieben:Gibt es eine elegantere Lösung?
Re: PIL-Problem: Wie schließe ich ein Bild
Verfasst: Dienstag 22. September 2009, 12:38
von HWK
Offensichtlich existiert das File-Objekt nach im.save() nicht mehr, im.fp ist also None.
MfG
HWK
Re: PIL-Problem: Wie schließe ich ein Bild
Verfasst: Dienstag 22. September 2009, 13:00
von Hyperion
HWK hat geschrieben:Offensichtlich existiert das File-Objekt nach im.save() nicht mehr, im.fp ist also None.
MfG
HWK
Kann man dann nicht davon ausgehen, dass das vom "im"-Objekt selber geschlossen wird?
Re: PIL-Problem: Wie schließe ich ein Bild
Verfasst: Dienstag 22. September 2009, 13:19
von HWK
Hyperion hat geschrieben:Kann man dann nicht davon ausgehen, dass das vom "im"-Objekt selber geschlossen wird?
Offensichtlich. Aber die Ursprungsdatei kann ich trotzdem nicht löschen. Erst nach einem
del funktioniert es bei mir.
MfG
HWK
Verfasst: Dienstag 22. September 2009, 15:07
von Hyperion
Tja, da hilft dann wohl nur ein Blick in den Sourcecode. In der Doku steht dazu ja wirklich nichts explizites, außer wann das Lesen passiert.
Wobei auch das Attribut "fp" dort nicht erwähnt wird, oder ich habs übersehen.
Eine Alternative könnte es doch sein, mit StringIO zu arbeiten. Damit könnte man den Dateizugriff vor PIL kapseln und die Datei unabhängig von der Bildmanipulation schließen oder was auch immer.
Verfasst: Dienstag 22. September 2009, 17:28
von HWK
So ähnlich hat es Leonidas ja schon vorgeschlagen.
MfG
HWK
Re: PIL-Problem: Wie schließe ich ein Bild
Verfasst: Mittwoch 15. Dezember 2010, 09:51
von meneliel
Hallo Ihr,
ich habe mit dem Script seit neustem ein Problem. Habe noch ein bisschen dran herum gebastelt, allerdings an der Zeile:
Code: Alles auswählen
os.rename(os.path.join(path,pic), os.path.join(path,"%s.jpg")%(name))
nichts geändert.
Nun bekomme ich ständig die Fehlermeldung:
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Users\Maria\Desktop\rename_pics.py", line 37, in <module>
os.rename(os.path.join(path,pic), os.path.join(path,"%s.jpg")%(name))
WindowsError: [Error 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch
Ich kann mir das nicht erklären. Da das ja schon funktionierte. Und den Eingabe-Pfadnamen habe ich geprüft, ob er existiert und bekomme ich ein True zurück. Den Ausgabepfadnamen hab ich mir ausgeben lassen und da sieht auch nix verkehrt dran aus. Ich habe jetzt schon ne ganze Weile nix mehr programmiert, vielleicht bin ich einfach aus der Übung und sehe daher den Wald vor lauter Bäumen nicht, weiß aber auch nicht mehr, was ich noch ändern/überprüfen kann.
Achso: das Script geschrieben hatte ich damals für WinXP, nutze es jetzt unter Vista, aber selbst da lief es im Sommer schon mal.
Vielen Dank für Eure Hilfe.
Re: PIL-Problem: Wie schließe ich ein Bild
Verfasst: Mittwoch 15. Dezember 2010, 09:56
von EyDu
Dann lass dir doch mal die Ergebnisse der einzelnen Schritte ausgeben, dann kommst du von alleine auf deinen Fehler.
Re: PIL-Problem: Wie schließe ich ein Bild
Verfasst: Mittwoch 15. Dezember 2010, 10:02
von meneliel
Auch das hatte ich letzte Woche schon probiert. Nehme das wohl aber noch ein weiteres Mal in Angriff.
Re: PIL-Problem: Wie schließe ich ein Bild
Verfasst: Mittwoch 15. Dezember 2010, 10:10
von meneliel
.... okay, man sollte natürlich auch daran denken, dass ein ":" im Ausgabedateinamen nicht geht ... Da guck ich 2 Wochen lang diese Fehlermeldung und die Aus- und Eingabepfade an und komm erst drauf, nach dem Posten hier. Entschuldigung für die Störung.
![Embarassed :oops:](./images/smilies/icon_redface.gif)
Re: PIL-Problem: Wie schließe ich ein Bild
Verfasst: Mittwoch 15. Dezember 2010, 11:41
von Leonidas
Also, naja, es geht schon, nur nicht auf allen Platformen. Die ext-Dateisysteme akzeptieren problemlos Doppelpunkte.