Bilddaten in Liste Speichern
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
In welcher Form willst du die Daten haben? Die reinen Binärdaten hast du ja mit file().read() bereits eingelesen. Wenn du das Bild als Bild einlesen willst, gibt es PIL.
Mit PIL wärs schon am schönsten, da ich das Bild anschlissend wider zusammensetzen muss. Allerdings scheint mein PIL keine Funktion compress zu haben... Keine ahnung wie das sein kann, sollte doch in PIL vorhanden sein.
Ich muss das Bild einfach in 700 Byte stücke zerschneiden um es dann zu übertragen, das ist das problem
Ich muss das Bild einfach in 700 Byte stücke zerschneiden um es dann zu übertragen, das ist das problem
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Ich verstehe überhaupt nicht was du tun willst. Kannst du mal ein wenig mehr rausrücken?
ok sry.
Ich wil ein belibiges *.jpg file in stücken von 700 Byte über eine Schnittstelle versenden und beim empfänger wider zu einem vollständigen *.jpg zusammensetzen und anzeigen.
Nur hab ich keine ahnung wie ich das ding zerscheiden soll und noch weniger ahnung wie ich es wider zusammenkriege =(
Ich wil ein belibiges *.jpg file in stücken von 700 Byte über eine Schnittstelle versenden und beim empfänger wider zu einem vollständigen *.jpg zusammensetzen und anzeigen.
Nur hab ich keine ahnung wie ich das ding zerscheiden soll und noch weniger ahnung wie ich es wider zusammenkriege =(
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Da reicht es doch völlig die Datei in 700-Byte-Stücke aufzuteilen, ohne sich darum zu scheren ob es eine JPEG-, eine HTML- oder eine andere Datei ist. Solange sie in der richtigen Reihenfolge zusammengesetzt wird.
Erhalten kannst du die Stückchen z.B. mit
Erhalten kannst du die Stückchen z.B. mit
Code: Alles auswählen
f = file("datei")
stuecke = list(iter(lambda: f.read(700), ""))
f.close()
Ok birkenfeld ich hab versucht den code zu verstehen:
das lambda: f.read(700) wird dank des lambdas wie in einer funktion ausgeführt und der return wert von f.read() wird für den iter() als erstes argument verwendet. Was allerdings iter() bewirkt, konnte ich nicht herausfinden. Mein englisch ist für eine solche Beschreibung noch zu schlecht (evt. auch meine Kentnisse in Python).
Was bezweckt denn iter?
Und wie kann ich jetzt eigentlich überprüfen wie gross das erhaltene stück ist? Gibt es da was in Python wie sizeof() in c?
das lambda: f.read(700) wird dank des lambdas wie in einer funktion ausgeführt und der return wert von f.read() wird für den iter() als erstes argument verwendet. Was allerdings iter() bewirkt, konnte ich nicht herausfinden. Mein englisch ist für eine solche Beschreibung noch zu schlecht (evt. auch meine Kentnisse in Python).
Was bezweckt denn iter?
Und wie kann ich jetzt eigentlich überprüfen wie gross das erhaltene stück ist? Gibt es da was in Python wie sizeof() in c?
gorba hat geschrieben:Was bezweckt denn iter?
Code: Alles auswählen
>>> n=range(5)
>>> x=iter(a)
>>> x.next()
0
>>> x.next()
1
>>> x.next()
2
>>> x.next()
3
>>> x.next()
4
>>> x.next()
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
x.next()
StopIteration
>>>
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
@pyStyler: Das ist das iter() mit einem Argument und verhält sich ganz unterschiedlich zu iter() mit zwei Argumenten.
@gorba: Das iter() mit zwei Argumenten iter(func, ende) ruft func() für jeden Schleifendurchlauf auf, solange bis func() einmal den Wert ende zurückgibt. Dann wird die Schleife beendet.
Das lambda wird also nicht nur einmal ausgeführt, sondern bei jedem Schleifendurchlauf. Ist die Datei aufgebraucht, gibt read(), also auch das lambda "" zurück, und die Schleife wird beendet.
@gorba: Das iter() mit zwei Argumenten iter(func, ende) ruft func() für jeden Schleifendurchlauf auf, solange bis func() einmal den Wert ende zurückgibt. Dann wird die Schleife beendet.
Das lambda wird also nicht nur einmal ausgeführt, sondern bei jedem Schleifendurchlauf. Ist die Datei aufgebraucht, gibt read(), also auch das lambda "" zurück, und die Schleife wird beendet.
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Natürlich. Deswegen gibt es ja auch zwei Formen, die sich eben ganz unterschiedlich verhalten.
Ich kriege nun die Teile nicht mehr zusammen, dacht ich mache so in der art was:
Wobei dann in picData z.b. der 1ste teil des Bildes stehen würde. Allerdings schaut mien jpg nacher ein wenig komisch aus... Von was kommt das? Ich verändere ja die daten nicht..
Code: Alles auswählen
f=open('test123.jpg', 'w')
f.write(picData)
So funktioniert es bei mir (nur mit dem rb bzw. wb, sonst kann ich das Ergebnis gar nicht öffnen):
Was genau meinst du mit "es sieht komisch aus"?
Code: Alles auswählen
f = open("TestBild.jpg", 'rb')
stuecke = list(iter(lambda: f.read(700), ""))
f.close()
x = file("2ndTest.jpg", 'wb')
for i in stuecke:
x.write(i)
x.close()
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
len() ?
In einem Dateiobjekt geht das auch mit:
In einem Dateiobjekt geht das auch mit:
Code: Alles auswählen
f = file(...) # FileObjekt erzeugen
f.seek(0,2) # Am Ende der Daten springen
f_len = f.tell() # Aktuelle Position
f.seek(0) # Zurück zum Anfang springen
print "Datei größe in Bytes:", f_len
Es geht auch etwas einfacher:jens hat geschrieben:Code: Alles auswählen
f = file(...) # FileObjekt erzeugen f.seek(0,2) # Am Ende der Daten springen f_len = f.tell() # Aktuelle Position f.seek(0) # Zurück zum Anfang springen print "Datei größe in Bytes:", f_len
Code: Alles auswählen
import os
f_len = os.stat(...).st_size
print "Dateigrösse : %s Bytes" % f_len
Genau das hatte ich im Sinn ... aber scheinbar gerade nicht im Kopf