Bitmap einlesen und 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
riven
User
Beiträge: 35
Registriert: Mittwoch 27. September 2006, 23:01

Hallo,

Über GPIB kann man von einem Oszilloskop den Screenshot als Bitmap-Datei auf dem Rechner abspeichern.

Wie kann ich es mit Python machen ?
Das Problem, das ich habe, ist das Abspeichern der Daten, die über GPIB kommen.

Das Auslesen der GPIB-Strings kann ich schon.

Danke
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Hey riven

Schau dir mal die Python Image Library(PIL) an.
Dort gibt es die Möglichkeit von einem String einzulesen. Anbei der Link zum Manual. Siehe dort Seite 8, "Reading from a String"
http://www.pythonware.com/products/pil ... dbook.pdf

greets george
riven
User
Beiträge: 35
Registriert: Mittwoch 27. September 2006, 23:01

hallo, es geht darum, den inhalt einer bmp-datei als bmp abzuspeichern.
wie kann ich wissen, mit welchem zeichen eine bitmap-datei endet und in python deutlich machen ?
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Hey riven,

anbei mal ein Beispiel wie ein Image als String abgelegt ist und wie man damit in Python umgeht

Code: Alles auswählen

import StringIO
import PIL
import Image

def getBuffer():
    """
    Der Buffer wurde aus der Datei images.py aus den wxPython-Demos 
    entnommen
    """
    return \
('\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x16\x00\x00\x00\x16\x08\x06\
\x00\x00\x00\xc4\xb4l;\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\
\x04\xb9IDAT8\x8d\x8d\x95[l\x14U\x18\xc7\x7fgn;;\xbb\xdbv/\x14[J\xa1\\*\xb7\
\x16\xe5"E@\xd2\x82\x12!\r\x12\x02\xc6H\x82D\x8d\x89\x89\x89\xf8 \x89\x89\
\xf0\x82\x0f\xea\x8b\x86\x07/\x81\x17\x13#JH$"P\xc1\xa8\x14\x11)5`\xb17*mi\
\xa1\xf4\xc2\x96vw\xbb;\xbb\xb33>\x0ctA.z\x92\xefe\xce\x9c\xdf\xf9\xce\xf7\
\xff\x9f\xf3\t\xfesl\xf7\xa2\xa7"\xd8\x9a\x01\x96\x83l%HjC\xb0\xc7|\xd8*\xf1\
\xc0\x19\xcf\xf6j\x1c^F\xd6\x9f\xc2\x93W\x84\xe6U\x00H\'\xd2\x98\xb1\x1e\xb2\
\xa9\x13\xc8\xec%\xf9\xd1\xb9\xff\x076\xde)"\x9b\xfa\x18\xa3pSx\xce\x12\x16U\
\x95S1;\xc4\x84\xa0\x86\x95\x85\xab\x03&\xe7/\x0e\xd1\xd4\xd0B\xac\xe3w\x9b\
\xe4\xf0\xe7\xf8\xad\x1dD\xf7\x8c>\x18\xec\xdbQA\xd6>d\x94//{~\xeb*^Z\xe7\
\xa3l\x02X\x16\xa4\xd2\x90\xb5\xdd\xdf\xcc,\\\xec\x81/\x0e\x0fs\xf2\xdb:\xac\
\x9es\x8d\x08\xf99\x92\x1f\xf4\xde\x0b\xd6\xdf\x9a\x8c\x90\xeb#\x8bk\xa7\xec\
~w\x05\x1b\x97\xc0\xf5a\xe8\xec\x87\x84\xe9B%\x01\xb2\x04\x92\x04>\x0f \xc1\
\x81S\xb0\x7f\xdfQ\x92\xad?6b\xa4kng.\x8f\x83\xe5\xaa/\xfd\xb3k\x9ex\x7f\xf7\
j\xd6/\x82\xd6^\x18\x8aA&\x0b\xaa\x02s&\xbb\x1bD\xe3\x90\xb6 \x96\x82\xb1\
\x14\x94O\x02+8\x93\x8e\x8eh\xb1=\xd8\x17${\xe6\xfb\x1cX{s=y\xa5;\xb7m\xdf\
\xcc\xd6U\n\x17\xba`d\x0c\xcc\x0ch\n\xd4TBI\x18\xf2\r\xf8\xe3\xb2\x0bN[\xee|\
\xd2\x84\xe20\\1\'1\xd8\xd1\xb4\x001\xff\x08\xd6\x99k\x12\x00\x92\xf2Z\xc9\
\x82\'\xd9\\\xa3\xd3\xda\x0b\x83\xa3\x10K\x82*Cu\x05\xf8u\xf7P\xcd\xdd\x16#\
\t\x88\xa7r1\x9a\x84\xac\x05\x15s\x83\x18eU\x12B\xbc\n\xa0\x90\xb7+\x84\xaa-\
\xadZV\x8e\xae@{\x8f\x9b\xcd\xa4\x10<\xf3\xf8\xadZ\x02G\xcf\x9a\xd4\xfd\xa9\
\xa0( DN !\xb9\xb5\x8f\x04 8}6\xa9\xaeS\xab\xed\xfc]\x86\x84\x9c-\x92\x0b\
\x1e)\x985=\x9f\xe6+\xd0\xd2\x0b\xb2\x80\xb5\x0bs\xd0\x86\xb64\xbf]R\x08\xe5\
\xc9\xe4\xfb\xdc\xef\x86\xc7\x15q$\x01\xa3cn\xd6y\xe1\x08J T\x82\x99\x9d\xa2\
(\xaa\xc8\xf3\x04\x82\x08Y\xe2|\xa7\x9b\xcd\x96\x95\xe0\xd5r.\xac\x9c\xa6\
\xf1\xd8\x8c\x9c\x85l\x07\x1c\xc7u\xca\'u\xd0\xd8\xe1\n,\xab\x1a\xb2\x91\xaf\
)\xe9\x1b\x11\x05\xc5\x8b\xeaQH\xa4\xe1\xea0\x94\x84\x9c[5\xcd9\xd1\xa3\xdes\
\x8d\xc6G\xd8\xef0\x14\x17\x8ce \xed\x80\xeaQqdM(B\xf7\xc4!\xcdX\xc6\xe1FR\
\xd0\xd9\x01\xef\x1d\xcc\xb0s\xb3:\x0e\xafo\xcep\xa6\xdd&\xe0u3\xb5\x1d\xb0m\
\xd79\xc7\x9b\x15F\x922\x08\xd0=\x16\x02+#k\xc6\xb0\xe2\x91\x94\xeb\x96\x19\
\x8b\xdf\x8c\x8d\xf9#!\x1f\xe9a\xc1\xa1\x8b*\xba\xd7\xe2\xedZ\x05\x10TNU\xf9\
\xba\xc1\xe1d\x03x\x14\x17|[>\x8f\n>?h*\x8c\x0e\xc6\xb0m\xf3zBR\xba\xe5t\xf4\
\xd8\x98Z\xb8n\x8d\x11\x998u\xda\x8c \x89\x0c\x18\x86\xa0\xa5_b4aQ5]BW\x05\
\xd5s\x05\xdd\xc3\x82aS\xe0\xf7\t\x0c\xaf\xc0\xf0\x82\xc7\xe3F\xc0\x0f\xfd\
\x1d\x9d\x8c\\\xeb:\x9cn}\xe3+\t@\x92\xe5\xbdW\xda:\xc8:6\xc5\x110|\x10\n\n\
\xea\xfeV\xd8{\xca\x02\x1c\xbc*\xbc\xb8\x14\xbc>\xf0\xdd\x11\x86\x0f&\x86\
\x01\xcb$\xda}\tY\xd3\xf6\x8d\xdf\xbc\xf4\x8a-\x7fI}\xb1Uh\xde\xd2Ys\xc3\xa8\
282\x18\xba\xa0\xfd\x86D<i\x111\xe0x\xbb\xc3@RB\xd7AUA\xd5 \x92\x07\xba\x0eM\
\xbf63\xd4\xd3s`\xa4a\xdb\x87wI\x1f\\\xb9\x7f\x9e"+\xf5\x8b\xd7,-X\xb4\xa4\
\x98t\x06FR`\xd9`e\x1ddll!\xa1H\x02\x07P%(\xf0\xba\x0f\xd1\xe9\x9f;i\xfa\xa5\
\xf1\xb2\xb0\xa5\xe5C\xf5\x1b\xfb\xee\xf6\x14\x10\xae\xf9\xb6ZQ\xa5\x83\x95\
\xcb+\x82\xcbV\x94R\x10\x90\x183!\x99\xc9=\x99\x8a\x04\x86\x06\xba\x06\x83Q\
\x8b\x93?u\xd2z\xb6\xb9[\xe0\xd4\x0e\x9c\xd8\xd0\x94\x93\xf5_c\xe2\xd3\xdf\
\xcds$>-,-Z6\x7f\xe1d\x1e\x9dY@8_Cu\xfb\x07f\xc6a(j\xd2\xd2v\x93\x0b\xe7\xba\
\x88\xf6\r\x1dV\x85\xf5\xfa\xb5\x1f6\xf4\xdc\xc9\xb9\x7fk\xda\xf4\x8d\\\x98\
\xf0\xbf \x84\xf4\x8a\x11\xf0.,\x08\x05\xfc\x86O\xc7q\x1c\x12\xf1$7\xa3\xb1\
\x91d<u\x1a\xf8l\xe0\xc8\xb3\x87\xee\x87xp\xcf\xbb}\x82\xda\xba2\xdb\x16\xe5\
6v\x04[vd\xd9\xe9W-\xab\xed\xea\xb1\xb5\xbd\x0f[\xf7\x0f@\x01\xd7\x0c\xb0\
\xdfs2\x00\x00\x00\x00IEND\xaeB`\x82'  )

def getImage():
    im = Image.open(StringIO.StringIO(getBuffer()))
    return im

#Beispiel als GIF speichern
im = getImage()
im.save(r'testGif.gif', 'GIF')
del (im)
#Beispiel als Bitmap speichern
im = Image.open(r'testGif.gif')
im.save(r'testBmp.bmp', 'BMP')
del (im)



Wie die String-Daten aus deinem GPIB-Gerät aussehen kann ich so nicht wissen. Das mußt du Testen. Kriegst du das gesamte Bitmap als einen String oder in Teilen, usw....
Das obige Beispiel soll dir halt mal zeigen, wie so etwas gehandelt wird.
Mit PIL kannst du sehr viele gängigen Formate erzeugen und die Formate konvertieren.

greets george
riven
User
Beiträge: 35
Registriert: Mittwoch 27. September 2006, 23:01

danke, habs hinbekommen.
gibt es die möglichkeit mit python, bmp in jpg zu konvertieren?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

riven hat geschrieben:gibt es die möglichkeit mit python, bmp in jpg zu konvertieren?
Ja. BMP-Datei mit PIL öffnen und als JPEG speichern.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Wenn das Oszilloskop ein zweifarbiges Bild liefert, dann sollte man aber lieber PNG oder GIF nehmen. Da ist die Qualität besser als bei JPEG.
Benutzeravatar
stasikz
User
Beiträge: 18
Registriert: Donnerstag 5. Juli 2007, 21:34

Dieses Thread ist schon etwas alt, aber ich wollte kein neues eröffnen, da mein Problem ähnlich ist.
Ich möchte ein JPEG-Bild in ein Schwarz/weisses BMP (PNG oder GIF) Bild abzuspeichern. Wenn ich z.B bild.save("datei.bmp", "BMP") mache dann wird es gespeichert, aber in farbe, welche Funktion soll ich benutzen um es in ein Schwarz/Weiss Bild zu konvertieren.
Ach ja noch was: kennt jemand eine alternative Adresse zum PIL handbook, weil die offizielle siete scheint im moment offline zu sein.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Wahrscheinlich so:
Farbe in Graustufe, dann in Schwarz-Weiß umwandeln mit

Code: Alles auswählen

im.convert('L').convert('1') # ungetestet
Dabei wird jeder nicht schwarze Punkt des Graustufenbildes weiß dargestellt. Falls Du statt Schwarz-Weiß Graustufe meinst, lässt Du einfach convert('1') weg.
MfG
HWK
Antworten