Seite 1 von 1

Verfasst: Freitag 23. Februar 2007, 22:34
von BlackJack
Masaru hat geschrieben:
lumax hat geschrieben:"del image " zum Schliessen halte ich uebrigens fuer eine schlechte API ...
Korrekt .... aber der Author von PIL hat nun einmal ein "close" oder komplettes Einlesen mit nachfolgendem "close" mittels der Methode Image.open() ist leider nicht implementiert BlackJack.
Doch genau das ist implementiert Masaru. Wenn das Bild in den Speicher geladen wurde, dann wird die Datei geschlossen.

Code: Alles auswählen

In [24]: a = Image.open('_scan0011.png')

In [25]: print a.fp
<open file '_scan0011.png', mode 'rb' at 0xb77b90f8>

In [26]: a.getpixel((10, 10))
Out[26]: 254

In [27]: print a.fp
None
Also wird hier über ein Problem diskutiert das es für das gegebene Programm gar nicht gibt.

Verfasst: Samstag 24. Februar 2007, 01:14
von Masaru

Code: Alles auswählen

>>> import Image
>>> i = Image.open(r'd:\work\Masaru.gif')
>>> i.getpixel((0,0))
0
>>> import os
>>> os.remove(r'd:\work\Masaru.gif')
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
OSError: [Errno 13] Permission denied: 'd:\\work\\Masaru.gif'
Diskussionen sind einfach doch etwas herliches :roll:

Achja ...

Code: Alles auswählen

...
>>> del(i)
>>> os.remove(r'd:\work\Masaru.gif')
>>> # keine Fehlermeldung geraised

Verfasst: Samstag 24. Februar 2007, 08:51
von merlin_emrys
BlackJack hat geschrieben:Doch genau das ist implementiert Masaru. Wenn das Bild in den Speicher geladen wurde, dann wird die Datei geschlossen.
...
Also wird hier über ein Problem diskutiert das es für das gegebene Programm gar nicht gibt.
Okay, vielen Dank für die Erklärung :-) !
Ich hab' das Manual vielleicht doch arg "selektiv" gelesen, der Hinweis ist mir irgendwie entgangen. Aber gut, das vereinfacht die Sache schon - zumindest insofern, daß das Original immer unverändert bleibt, bis man es explizit überspeichert. Wenn allerdings das Programm zwischendurch abbricht, kann man sich nicht mal im Bild schauen, wie weit die Änderungen schon fortgeschritten waren... oder hat PIL für sowas eine Funktion :-o ? Ich bin auf Hinweise zu "show" gestossen, aber da ich keinen Unix-Rechner zur Hand habe, kann ich damit nicht arbeiten.

Verfasst: Samstag 24. Februar 2007, 10:19
von BlackJack
Masaru hat geschrieben:

Code: Alles auswählen

>>> import Image
>>> i = Image.open(r'd:\work\Masaru.gif')
>>> i.getpixel((0,0))
0
>>> import os
>>> os.remove(r'd:\work\Masaru.gif')
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
OSError: [Errno 13] Permission denied: 'd:\\work\\Masaru.gif'
Das scheint vom Dateityp abhängig zu sein. Bei PNG ist bei mir die Datei nach dem einlesen geschlossen bei GIF nicht.

Verfasst: Sonntag 25. Februar 2007, 14:50
von Masaru
BlackJack hat geschrieben:... Das scheint vom Dateityp abhängig zu sein. Bei PNG ist bei mir die Datei nach dem einlesen geschlossen bei GIF nicht.
Ist dann wirklich ein interessantes und zudem nicht einheitliches Verhalten der PIL. Entsprechend sollten wir dieses Thema ein wenig tiefer doch weiter diskutieren.

Ich schaue mir einmal die Dateityp-Klassen in der PIL die Tage genaue an.