Seite 1 von 1

PIL ImageGrab direkt in ZipFile speichern ?

Verfasst: Donnerstag 6. Oktober 2011, 09:00
von pingdrei
Hallo,

Mein Plan ist es bei jedem Mausklick einen ImageGrab zu machen und diesen direkt in ein Zipfile als JPG abzulegen.

Ich bin soweit gekommen das es halbwegs funktioniert.
bekomme ein JPG im zip aber leider auch im work direktory.
Wie kann ich verhinder das die JPG files im work abgesaved werden?

hier meine zeilen: :K

a=win32api.GetAsyncKeyState(win32con.VK_LBUTTON)
if a==-32768:
img = ImageGrab.grab()
saveas=os.path.join(Compname+'_'+Username+'_'+strftime("%Y%m%d%H%M%S")+'.jpg')
zfile.write(saveas, img.save(saveas), zipfile.ZIP_DEFLATED)
#print saveas
time.sleep(0)

Re: PIL ImageGrab direkt in ZipFile speichern ?

Verfasst: Freitag 7. Oktober 2011, 20:30
von darktrym
abgesaved?

Was steht denn in saveas drin?

Re: PIL ImageGrab direkt in ZipFile speichern ?

Verfasst: Sonntag 9. Oktober 2011, 14:58
von Boa
Die Methode img.save speichert das Bild ab. Für die zfile.write Methode muss die Datei abgespeichert werden, also wäre es am einfachsten die abgespeicherte Datei im nachhinein zu löschen.

Re: PIL ImageGrab direkt in ZipFile speichern ?

Verfasst: Sonntag 9. Oktober 2011, 15:13
von BlackJack
@pingdrei: Der Aufruf ist falsch, weil als zweites Argument der Name der Datei innerhalb des ZIP-Archivs gefragt ist. Das funktioniert nur zufällig so, weil `Image.save()` den Rückgabewert `None` hat.

Wenn man sich die temporäre Datei sparen möchte, sollte man das Bild in eine Zeichenkette mit den kodierten Bytes umwandeln und diese dann mit der `writestr()`-Methode in das Archiv schreiben.

Re: PIL ImageGrab direkt in ZipFile speichern ?

Verfasst: Montag 10. Oktober 2011, 06:46
von pingdrei
Danke für die Unterstützung!

Ich habe es mal soweit umgebaut das ich zuerst speichere und dann ins zip schreibe und das temp file lösche.

ich werde mich mal mit `writestr()` beschäftigen um die daten direkt ins zip zu bringen.




bis bald!
pingdrei