PIL speichert veränderte Bild-Dateien falsch ab

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.
Vicane
User
Beiträge: 2
Registriert: Dienstag 12. Juni 2007, 20:39

PIL speichert veränderte Bild-Dateien falsch ab

Beitragvon Vicane » Mittwoch 12. März 2008, 15:55

Guten Tag Python-Community,

ich hab folgendes Problem.

ich lese ein Bild mit PIL ein (getdata) und bearbeite dann die Pixelfarben. Nun möchte ich die veränderten Pixel in einem neuem Bild abspeichern.

sieht wie folgt aus:

Code: Alles auswählen

outfile = open("test.bmp", "w")
# hier werden die alten Pixel nacheinander
# durch die veraenderten Pixel ersetzt
for pixel in datal:
    print pixel # zur Kontrolle
    im.putdata(tuple(pixel))
im.save(outfile)


Beim Print werden die Pixel noch richtig ausgegeben (also wie ich es wollte), bloß nachdem ich das Bild abspeichere werden die Pixel verändert.

MfG Vicane
BlackJack

Beitragvon BlackJack » Mittwoch 12. März 2008, 17:46

Das sieht nicht aus als würde es überhaupt funktionieren. `putdata()` erwartet eine Sequenz mit *allen* Pixeln und Du setzt da immer nur eins.

Zeig doch mal bitte ein möglichst kleines Beispiel was das Problem hat und das man auch ausprobieren kann.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Mittwoch 12. März 2008, 22:29

Wenn Du ein File-Objekt zum Speichern verwendest, was ja eigentlich nicht nötig ist, muss dies im Binary-Mode ('wb') geöffnet werden und save muss das Bild-Format übergeben werden.
MfG
HWK
Vicane
User
Beiträge: 2
Registriert: Dienstag 12. Juni 2007, 20:39

Beitragvon Vicane » Donnerstag 13. März 2008, 12:06

erst mal danke für eure mühen.

@Blackjack
wenn ich alle "pixel" auf einmal übertragen möchte gibt es ein Error.

@HWK
Das Bild im Binary-Modus abzuspeichern verändert auch nichts an der Lage.

Ich hab mir nun überlegt erstmal eine Kopie vom Bild zumachen. An der Kopie kann ich dann erstmal per load() die Pixel direkt verändert ohne das Bild nochmal abzuspeichen zu müssen.

ungefähr so

Code: Alles auswählen

infile = open("test.bmp", "rb")
im = Image.open(infile)
pix = im.load()
pix[0,0] = (245,244,43)
BlackJack

Beitragvon BlackJack » Donnerstag 13. März 2008, 12:19

Äh, vielleicht solltest Du dann heraus finden warum es einen Fehler gibt und das Problem beheben!?

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder