Bild an Drucker senden

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.
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Montag 19. Juni 2006, 09:39

cool_zero hat geschrieben:

Code: Alles auswählen

            # Define NV bit image
            # Command = 1C 71 n [xL xH yL yH d1...dk]1...[xL xH yL yH d1...dk]n
            cmd = ''.join(map(chr, (0x1c, 0x71, 1, 2, 0, 2, 0, 0x93)))
Was ist xL? Was ist n? was ist d?

Verrate uns doch, WAS für einen Drucker du hast, am besten, du verlinkst zur Anleitung
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Beitragvon Mad-Marty » Montag 19. Juni 2006, 09:41

Hmmm das ganze riecht nach
"jetzt ist in einer woche studienabgabe und ich muss anfangen was zu machen"


Auch das du absolut nicht weisst wie du ihn ansteuern sollst ist problematisch.

Da muss es doch wenigstens mal ein beispiel gegeben haben ?
Poste das mal.

Tja so ohne alles wirst du das wohl nicht mehr schaffen.
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Beitragvon cool_zero » Montag 19. Juni 2006, 09:52

Also es handelt sich um einen Thermodrucker (SRP-350) die Anleitung der Steuercodes befindet sich hier: http://www.tauris.com/support/bondrucke ... nglish.pdf

@Mad-Marty... Nein es handelt sich nicht um eine Studienabgabe, da ich kein Student bin studiere ich somit auch nicht ;-)

Das ganze ist ein "Firmen" - Projekt, und da ich neu in Python bin und ich mit solcher Thematik noch nie was zu tun gehabt habe ist es für mich eben schwieriger dieses Problem zu lösen.
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Montag 19. Juni 2006, 12:47

Ähm... Wenn du ein 16x16 Image erzeugen willst, musst du auch 4 Bytes angeben.Oh, und anscheinend kann der Drucker doch 8-bit Graustufen. Dass heisst, statt einer 1 musst du 255 verwenden

Code: Alles auswählen

cmd = ''.join(map(chr, (0x1c, 0x71, 1, 1, 0, 1, 0,   0,255,0,255,0,255,0,255))) /code]

Das musst du übrigens nur ein einziges mal machen.

Wenn du das Bitmap eh jedesmal übertragen willst (z.B, weil es sich oft ändert), kannst du auch ein "downloaded image" nehmen: (Seite 21 in dem PDF) Allerdings kannst du da nur kleinere Bilder nehmen.

Ich wollte jetzt noch Code posten, wie du [url=http://de.wikipedia.org/Tux]Tux
als Bitmap in den Speicher bekommst, der Code wäre aber zu lang geworden.
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Beitragvon cool_zero » Montag 19. Juni 2006, 12:54

Also ich habe jetzt mal deinen code probiert

Code: Alles auswählen

cmd = ''.join(map(chr, (0x1c, 0x71, 1, 1, 0, 1, 0,   0,255,0,255,0,255,0,255))) /code]


Jedoch leuchtet da nur die ERROR-led und sonst tut sich gar nichts bis auf das, das ich den Durcker aus und wieder einschalten muss.

Verstehst du den Syntax Befehl? Kannst Du mir den ev. erklären?

Lg
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Montag 19. Juni 2006, 12:57

Huh? Laut Anleitung darf d hier nicht 0 sein...

Probiere mal 1,255,1,255,.... anstatt 0,255
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Beitragvon cool_zero » Montag 19. Juni 2006, 13:01

Nein sorry, geht immer noch nicht

Das Problem ist das ich nichtmal den Syntax verstehe, wenn Du mir das Nahe bringen könntest wäre das perfekt ;-)
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Beitragvon cool_zero » Montag 19. Juni 2006, 13:04

Hier nochmals was ich genau mache:

Code: Alles auswählen

# Drucker initialisieren
cmd = ''.join(map(chr, (0x1b,0x40)))

# NV bit image definieren
cmd = ''.join(map(chr, (0x1c, 0x71, 1, 1, 0, 1, 0, 1, 255, 1, 255, 1, 255, 1, 255)))

# NV bit image drucken
cmd = ''.join(map(chr, (0x1c, 0x70, 1, 0)))

# Zeilenvorschub
cmd = ''.join(map(chr, (0x1b, 0x4a, 1)))


Und dazwischen eben immer die Kommandos ausführen

Lg
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Montag 19. Juni 2006, 13:05

Ich verstehe ihn ja auch nicht ganz...

0x1c 71 = Befehl
1 = n, Nummer des Bildes
1 0 = xL xH, Low- und Highbyte der Auflösung / 8. Hier also 1, also 8 punkte breit
1 0 = yl yH, dito für y
1 255 1 255 ... = die d1-d8, also die Werte für die Dots

Versuch es erstmal mit dem GS * Befehl, der sieht einfacher aus, und
es wird auch nichts ins NV geschrieben, vielleicht geht das nicht.
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Beitragvon cool_zero » Montag 19. Juni 2006, 13:29

Ja danke mit dem GS funktionierts mal, jetzt brauch eich da nur irgendwie ein Bild zusammen bekommen :-(
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Montag 19. Juni 2006, 13:33

http://www.pythonware.com/products/pil/

Damit dann das Bild laden, in Graustufen umwandeln und verkleinern. Diese Daten dann an den Drucker senden.

Z.B.

Code: Alles auswählen

import Image
im = Image.load("Datei.gif")
im.convert("L") # Graustufen
im.resize( (32,32), Image.ANTIALIAS)
image_string = im.tostring()
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Beitragvon cool_zero » Montag 19. Juni 2006, 14:19

Dies ladet mal die gif datei und speichert es in einer anderen Datei wieder ab.

Code: Alles auswählen

import Image
import os, sys

im = Image.open(sys.argv[1])
im.convert("L") # Graustufen
im.resize( (32,32), Image.ANTIALIAS)
image_string = im.tostring()
out = open("test.dat", "wb")
out.write(image_string)
out.close()


und nun sollte ich es hiermit ausdrucken können, da das bild an sich ja 32x32 ist:

Code: Alles auswählen

    cmd = ''.join(map(chr, (0x1D, 0x2A, 32, 32)))
    img = open(sys.argv[1], "rb")
    for line in img:
        for i in line:
            cmd += i

Nun sollte ich doch das bild drucken, jedoch passiert rein gar nichts :-(
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Montag 19. Juni 2006, 14:43

for line in ... geht nur (und macht auch nur Sinn) bei textdateien. Mach stattdessen

Code: Alles auswählen

cmd += img.read()
Außerdem musst du 32 noch durch 8 teilen. Das Kommando lautet also 1D,2A, 04, 04
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Beitragvon cool_zero » Montag 19. Juni 2006, 14:49

da kommen aber trotzdem nur lauter punkte raus, die nichts mit irgendwas zu tun haben, sieht nichtmal bild ähnlich aus
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Montag 19. Juni 2006, 14:54

Oops. convert und resize liefern ein neues Bild zurück... So ist es richtig

Code: Alles auswählen

img = img.convert("L")
img = img.resize( (32,32), Image.ANTIALIAS)

# oder als Einzeiler
img = img.convert("L").resize((32,32),Image.ANTIALIAS)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder