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

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

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

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

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

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

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

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

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

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

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)
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Hast Du irgendwo die Anleitung zu Image/PIL, den das neue img Objekt hat keine tostring Methode mehr :-(
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Ähm... Den Link habe ich schon gepostet, einfach runterscrollen :roll:

Bei mir geht das ohne Probleme

Code: Alles auswählen

>>> a = Image.open("blabla.jpg").convert("L").resize((32,32),Image.ANTIALIAS).tostring()
>>> len(a)
1024
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Danke vielmals :-)

Er druckt zwar trotzdem blödsinn, aber das werde ich hoffentlich noch hinbekommen, jedenfalls noch vielen Dank für die Hilfe ;-)

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

Hast du dir das 32x32 Bild mal angesehen? Kann gut sein, dass der resize-Filter da Blödsinn macht. Ich würde mir gute Testbilder suchen (Schachbrett, Dreieck, Kreis, etc.) [die auch schon 32x32 sind und von daher nicht resized werden müssen) Da kann man in der Regel gut feststellen, wo es hakt.

Außerdem muss es natürlich nicht 32x32 sein ;)
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Hallo,

also irgendwie bekomme ich es nicht hin, das das Bild auch tatsächlich gedruckt wird. Habe zwar wirre Schwarzpunkte, jedoch kein Bild.

Habe ein simples Bild genommen und dieses dann umgewandelt, somit besteht das bild dann nur aus 255 und 0.

Ich habe die Steuercodes für den FS und GS probiert, jedoch beide male ohne Erfolg.

Lg cool_zero
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

cool_zero hat geschrieben:also irgendwie bekomme ich es nicht hin, das das Bild auch tatsächlich gedruckt wird.
Hi!

Ich frage mich nur, warum du nicht auf meine Hinweise eingegangen bist. Gibt es irgendeine Anweisung von oben, dass du es dir nicht einfach machen darfst?

- Treiber installieren.
- Testen ob der Ausdruck mit irgendeiner Textverarbeitung oder Grafikprogramm funktioniert
- Mit wxPython drucken.

http://www.python-forum.de/post-38457.html#38457
http://www.python-forum.de/post-38450.html#38450

mfg
Gerold
Zuletzt geändert von gerold am Montag 26. Juni 2006, 08:00, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
cool_zero
User
Beiträge: 23
Registriert: Mittwoch 14. Juni 2006, 14:33

Ich habe diese Gründe schon mehrmals belegt oder?

Wie bereits mehrmals geschrieben soll das ganze minimalistisch wie möglich gehalten werden.

Keine Treiber usw. Es muss doch irgendwie zu schaffen sein das ganze mit Druckersteuercodes zu drucken, deshalb würde ich eben Eure Hilfe brauchen.

Lg cool_zero
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

cool_zero hat geschrieben:Keine Treiber usw.
Nein, ich will jetzt nicht darauf eingehen, warum du keinen Treiber installieren darfst. Ich wünsch dir einfach nur viel Glück bei deinem Vorhaben.

mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten