Forum: Projekte & Code Screenshots von TDS4XX automatisch abspeichern, mit Python


von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

Ich habe folgendes kleines Programm zum automatischen Abspeichern von 
TDS4XX Screenshots geschreiben.

Dabei wartet es auf den Empfang des Screenshots, speichert ihn nach dem 
Empfangen automatisch ab, zeigt ihn an und wartet auf den nächsten.

Die Sendeparameter sind dabei:
Bardrate=19200,
Bytesize=8
Parity='N'
Stopbits=1,
xonxoff=0,
rtscts=1

Beim abspeichern wird die BMP-Datei dabei zu PNG umgewandelt, dadurch 
werden aus 38KB nur noch ~5-8KB.

Zur Nutzung sind die Python-Libs Erweiterungen PIL und serial nötig.
1
from PIL import Image
2
import sys
3
import serial
4
import io
5
import os
6
7
flag = 0
8
cnt = 0
9
s = bytearray()
10
ser = serial.Serial('COM1', 19200, bytesize=8,parity='N', stopbits=1, timeout=1, xonxoff=0, rtscts=1)
11
durchl =0
12
Bytes1=0
13
Bytes2=0
14
fileformat = '.bmp'
15
while 1:
16
    while flag == 0:
17
        Bytes2=len(s)
18
        s = s + ser.read()     
19
        if Bytes2 == Bytes1 and Bytes2 > 0 :             #Wenn Inhalt drinn ist
20
            flag = 1
21
        Bytes1=Bytes2
22
    f = open('Screen' + str(cnt) + fileformat, 'w+b')
23
    binary_format = bytearray(s)
24
    f.write(binary_format)
25
    f.close()
26
27
28
    im=Image.open('Screen' + str(cnt) + fileformat)
29
    a=im.rotate(270,0,1)
30
    a.show()
31
    a.save('Screen' + str(cnt) + '.png')
32
    os.remove('Screen' + str(cnt) + fileformat) 
33
    flag=0
34
    Bytes1=0
35
    Bytes2=0
36
    s = bytearray()
37
    cnt=cnt+1

Nun möchte ich jedoch auch Farb-Plots im EPS-Format abspeichern können, 
so einen zeigt der EPS-Screen.

Dabei gibt es in Zeile 29 bei der Umwandlung/Drehen von EPS zu PNG ein 
problem.
1
"Unable to locate Ghostscript on paths"

Dabei habe ist Ghostscript 9.26 installiert und auch als 
PATH-Umgebungsvariable angegeben.

Wäre sehr schön wenn jemand wüsste wie man dass Problem löst?

Grüße und Vielen Dank,
Matthias

von Walter T. (nicolas)


Lesenswert?

Matthias schrieb:
> Nun möchte ich jedoch auch Farb-Plots im EPS-Format abspeichern können

Schluß ins Blaue: Ich würde meinen Latex-Workflow von DVIPS mal langsam 
richtung PDFLatex umstellen. Es hat mittlerweile fast nur noch Vorteile.


Zu Deiner eigentlichen Frage: Funktioniert die Konvertierung mit 
Ghostscript denn in der normalen Kommandozeile?

von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Walter T. schrieb:
> Zu Deiner eigentlichen Frage: Funktioniert die Konvertierung mit
> Ghostscript denn in der normalen Kommandozeile?

Gute Frage, ich habe Ghostscript noch nie verwendet, wollte es auch nur 
in diesem Zusammenhang nutzen.

Aber nun hat sich dass Problem wohl von alleine gelöst, es funktioniert.
Warum?
Ich habe nun mindestens 2 mal neu Gestartet und als Path für den 
aktuellen benutzer ist:
C:\Program Files\gs\gs9.26\bin
eingetragen...

Nun spielt es auch keine Rolle ob das Oszi EPS oder BMP sendet, in 
beiden Fällen wird ein PNG erzeugt und abgespeichert.

Auch dass aus EPS erzeugte PNG ist somit nur ~7KB groß und ermöglicht 
eine bessere Unterscheidbarkeit von Kanälen und MATH-Funktionen.

Hier nochmal der endgültige Code:
1
from PIL import Image
2
import sys
3
import serial
4
import io
5
import os
6
7
flag = 0
8
cnt = 0
9
s = bytearray()
10
ser = serial.Serial('COM1', 19200, bytesize=8,parity='N', stopbits=1, timeout=3, xonxoff=0, rtscts=1)
11
durchl =0
12
Bytes1=0
13
Bytes2=0
14
fileformat = '.bmp'
15
while 1:
16
    while flag == 0:
17
        Bytes2=len(s)
18
        s = s + ser.read()     # read up to one hundred bytes
19
        if Bytes2 == Bytes1 and Bytes2 > 0 :             #Wenn Inhalt drinn ist
20
            flag = 1
21
        Bytes1=Bytes2
22
    f = open('Screen' + str(cnt) + fileformat, 'w+b')
23
    binary_format = bytearray(s)
24
    f.write(binary_format)
25
    f.close()
26
27
28
    im=Image.open('Screen' + str(cnt) + fileformat)
29
    a=im.rotate(270,0,1)
30
    a.show()
31
    a.save('Screen' + str(cnt) + '.png')
32
    im.close()
33
    os.remove('Screen' + str(cnt) + fileformat) 
34
    flag=0
35
    Bytes1=0
36
    Bytes2=0
37
    s = bytearray()
38
    cnt=cnt+1

Grüße, vielen Dank und manchem vielleicht noch einigen Spass damit :)
Matthias

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.