Seite 1 von 1

Bitmap einlesen und speichern

Verfasst: Donnerstag 26. Oktober 2006, 13:45
von riven
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

Verfasst: Donnerstag 26. Oktober 2006, 14:37
von george
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

Verfasst: Donnerstag 26. Oktober 2006, 17:03
von riven
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 ?

Verfasst: Freitag 27. Oktober 2006, 07:49
von george
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

Verfasst: Freitag 27. Oktober 2006, 13:21
von riven
danke, habs hinbekommen.
gibt es die möglichkeit mit python, bmp in jpg zu konvertieren?

Verfasst: Freitag 27. Oktober 2006, 14:35
von Leonidas
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.

Verfasst: Freitag 27. Oktober 2006, 16:14
von 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.

Verfasst: Freitag 17. August 2007, 20:24
von stasikz
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.

Verfasst: Freitag 17. August 2007, 20:56
von HWK
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