PIL ImageGrab direkt in ZipFile 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.
Antworten
pingdrei
User
Beiträge: 2
Registriert: Donnerstag 6. Oktober 2011, 08:51

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)
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

abgesaved?

Was steht denn in saveas drin?
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

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.
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.
pingdrei
User
Beiträge: 2
Registriert: Donnerstag 6. Oktober 2011, 08:51

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
Antworten