From 645ea69c369785e5df4131866d72b09c200c37ba Mon Sep 17 00:00:00 2001
From: Jacek Kowalski <Jacek@jacekk.info>
Date: Tue, 03 May 2016 17:26:17 +0000
Subject: [PATCH] Add support for image printing
---
test_image.py | 14 ++++++++++++++
axiohm.py | 44 ++++++++++++++++++++++++++++++++++++++++++++
test_image.png | 0
3 files changed, 58 insertions(+), 0 deletions(-)
diff --git a/axiohm.py b/axiohm.py
index 1dba9ed..cc141b3 100644
--- a/axiohm.py
+++ b/axiohm.py
@@ -53,6 +53,11 @@
PITCH_STANDARD = 0
PITCH_COMPRESSED = 1
+ IMAGE_MODE_8DOT_SINGLE = 0
+ IMAGE_MODE_8DOT_DOUBLE = 1
+ IMAGE_MODE_24DOT_SINGLE = 32
+ IMAGE_MODE_24DOT_DOUBLE = 33
+
def __init__(self, **kwargs):
self.serial = serial.Serial(**kwargs)
self.currentStation = self.STATION_RECEIPT
@@ -322,6 +327,45 @@
self.moveAbsolute(startingPosition)
self.printLineUnicode(''.join([line[column] for line in lines]))
+ # IMAGES
+
+ def selectLogo(self, id):
+ self.serial.write("\x1d\x23" + chr(id % 256))
+
+ def printLogo(self, mode = 0):
+ self.serial.write("\x1d\x2f" + chr(mode % 4))
+
+ def printImage(self, image, modeNumber = 33):
+ assert self.currentStation == self.STATION_RECEIPT, \
+ 'Printing images on slip station is not supported yet'
+
+ # Pillow library image
+ image = image.convert("1")
+ from bitstring import BitArray
+ bits = BitArray(bytes=image.tobytes())
+
+ mode = {
+ self.IMAGE_MODE_8DOT_SINGLE: { "height": 8, "width": 288 },
+ self.IMAGE_MODE_8DOT_DOUBLE: { "height": 8, "width": 576 },
+ self.IMAGE_MODE_24DOT_SINGLE: { "height": 24, "width": 288 },
+ self.IMAGE_MODE_24DOT_DOUBLE: { "height": 24, "width": 576 },
+ }[modeNumber]
+
+ if image.height % mode['height'] > 0:
+ bits.append(BitArray(length = image.width * (mode['height'] - image.height % mode['height'])))
+
+ for startLine in xrange(0, image.height, mode['height']):
+ printData = b''
+ start = startLine * image.width
+ end = start + image.width * mode['height']
+ for x in xrange(0, min(image.width, mode['width'])):
+ printData += ( bits[start + x : end : image.width].bytes )
+
+ length = int(len(printData) / (mode['height'] / 8))
+ self.serial.write("\x1b\x2a" + chr(modeNumber) + chr(length % 256) + chr(int(length / 256)))
+ self.serial.write(printData)
+ self.serial.write("\r\n")
+
# SLIP
def waitForSlip(self):
diff --git a/test_image.png b/test_image.png
new file mode 100644
index 0000000..8e31b40
--- /dev/null
+++ b/test_image.png
Binary files differ
diff --git a/test_image.py b/test_image.py
new file mode 100755
index 0000000..4dc7c44
--- /dev/null
+++ b/test_image.py
@@ -0,0 +1,14 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+from axiohm import Axiohm
+import sys
+
+from PIL import Image
+
+printer = Axiohm(port = '/dev/ttyS0', baudrate = 19200, xonxoff = True)
+printer.reset()
+printer.selectReceipt()
+
+image = Image.open('test_image.png')
+printer.printImage(image, printer.IMAGE_MODE_24DOT_DOUBLE)
--
Gitblit v1.9.1