Seite 1 von 1

PIL speichert veränderte Bild-Dateien falsch ab

Verfasst: Mittwoch 12. März 2008, 15:55
von Vicane
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

Verfasst: Mittwoch 12. März 2008, 17:46
von BlackJack
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.

Verfasst: Mittwoch 12. März 2008, 22:29
von HWK
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

Verfasst: Donnerstag 13. März 2008, 12:06
von Vicane
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)

Verfasst: Donnerstag 13. März 2008, 12:19
von BlackJack
Äh, vielleicht solltest Du dann heraus finden warum es einen Fehler gibt und das Problem beheben!?