[gelöst] PILAnfaenger: Pixelwerte aendern und Bild speichern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BlackJack

Beitragvon BlackJack » Freitag 23. Februar 2007, 22:34

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.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Beitragvon Masaru » Samstag 24. Februar 2007, 01:14

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
merlin_emrys
User
Beiträge: 110
Registriert: Freitag 3. März 2006, 09:47

Beitragvon merlin_emrys » Samstag 24. Februar 2007, 08:51

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.
BlackJack

Beitragvon BlackJack » Samstag 24. Februar 2007, 10:19

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.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Beitragvon Masaru » Sonntag 25. Februar 2007, 14:50

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.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]