From 916de838e04c1ceb8f9f421975e89f7c9daf2a44 Mon Sep 17 00:00:00 2001 From: Adusso Date: Sat, 31 May 2014 17:05:46 +0300 Subject: [PATCH 1/3] python 3 readiness --- escpos/constants.py | 90 ++++++++++++++++++++++----------------------- escpos/escpos.py | 16 ++++---- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/escpos/constants.py b/escpos/constants.py index b5fca55..8f533d4 100644 --- a/escpos/constants.py +++ b/escpos/constants.py @@ -1,54 +1,54 @@ """ ESC/POS Commands (Constants) """ # Feed control sequences -CTL_LF = '\x0a' # Print and line feed -CTL_FF = '\x0c' # Form feed -CTL_CR = '\x0d' # Carriage return -CTL_HT = '\x09' # Horizontal tab -CTL_VT = '\x0b' # Vertical tab +CTL_LF = b'\x0a' # Print and line feed +CTL_FF = b'\x0c' # Form feed +CTL_CR = b'\x0d' # Carriage return +CTL_HT = b'\x09' # Horizontal tab +CTL_VT = b'\x0b' # Vertical tab # Printer hardware -HW_INIT = '\x1b\x40' # Clear data in buffer and reset modes -HW_SELECT = '\x1b\x3d\x01' # Printer select -HW_RESET = '\x1b\x3f\x0a\x00' # Reset printer hardware +HW_INIT = b'\x1b\x40' # Clear data in buffer and reset modes +HW_SELECT = b'\x1b\x3d\x01' # Printer select +HW_RESET = b'\x1b\x3f\x0a\x00' # Reset printer hardware # Cash Drawer -CD_KICK_2 = '\x1b\x70\x00' # Sends a pulse to pin 2 [] -CD_KICK_5 = '\x1b\x70\x01' # Sends a pulse to pin 5 [] +CD_KICK_2 = b'\x1b\x70\x00' # Sends a pulse to pin 2 [] +CD_KICK_5 = b'\x1b\x70\x01' # Sends a pulse to pin 5 [] # Paper -PAPER_FULL_CUT = '\x1d\x56\x00' # Full cut paper -PAPER_PART_CUT = '\x1d\x56\x01' # Partial cut paper +PAPER_FULL_CUT = b'\x1d\x56\x00' # Full cut paper +PAPER_PART_CUT = b'\x1d\x56\x01' # Partial cut paper # Text format -TXT_NORMAL = '\x1b\x21\x00' # Normal text -TXT_2HEIGHT = '\x1b\x21\x10' # Double height text -TXT_2WIDTH = '\x1b\x21\x20' # Double width text -TXT_4SQUARE = '\x1b\x21\x30' # Quad area text -TXT_UNDERL_OFF = '\x1b\x2d\x00' # Underline font OFF -TXT_UNDERL_ON = '\x1b\x2d\x01' # Underline font 1-dot ON -TXT_UNDERL2_ON = '\x1b\x2d\x02' # Underline font 2-dot ON -TXT_BOLD_OFF = '\x1b\x45\x00' # Bold font OFF -TXT_BOLD_ON = '\x1b\x45\x01' # Bold font ON -TXT_FONT_A = '\x1b\x4d\x00' # Font type A -TXT_FONT_B = '\x1b\x4d\x01' # Font type B -TXT_ALIGN_LT = '\x1b\x61\x00' # Left justification -TXT_ALIGN_CT = '\x1b\x61\x01' # Centering -TXT_ALIGN_RT = '\x1b\x61\x02' # Right justification +TXT_NORMAL = b'\x1b\x21\x00' # Normal text +TXT_2HEIGHT = b'\x1b\x21\x10' # Double height text +TXT_2WIDTH = b'\x1b\x21\x20' # Double width text +TXT_4SQUARE = b'\x1b\x21\x30' # Quad area text +TXT_UNDERL_OFF = b'\x1b\x2d\x00' # Underline font OFF +TXT_UNDERL_ON = b'\x1b\x2d\x01' # Underline font 1-dot ON +TXT_UNDERL2_ON = b'\x1b\x2d\x02' # Underline font 2-dot ON +TXT_BOLD_OFF = b'\x1b\x45\x00' # Bold font OFF +TXT_BOLD_ON = b'\x1b\x45\x01' # Bold font ON +TXT_FONT_A = b'\x1b\x4d\x00' # Font type A +TXT_FONT_B = b'\x1b\x4d\x01' # Font type B +TXT_ALIGN_LT = b'\x1b\x61\x00' # Left justification +TXT_ALIGN_CT = b'\x1b\x61\x01' # Centering +TXT_ALIGN_RT = b'\x1b\x61\x02' # Right justification # Barcode format -BARCODE_TXT_OFF = '\x1d\x48\x00' # HRI barcode chars OFF -BARCODE_TXT_ABV = '\x1d\x48\x01' # HRI barcode chars above -BARCODE_TXT_BLW = '\x1d\x48\x02' # HRI barcode chars below -BARCODE_TXT_BTH = '\x1d\x48\x03' # HRI barcode chars both above and below -BARCODE_FONT_A = '\x1d\x66\x00' # Font type A for HRI barcode chars -BARCODE_FONT_B = '\x1d\x66\x01' # Font type B for HRI barcode chars -BARCODE_HEIGHT = '\x1d\x68\x64' # Barcode Height [1-255] -BARCODE_WIDTH = '\x1d\x77\x03' # Barcode Width [2-6] -BARCODE_UPC_A = '\x1d\x6b\x00' # Barcode type UPC-A -BARCODE_UPC_E = '\x1d\x6b\x01' # Barcode type UPC-E -BARCODE_EAN13 = '\x1d\x6b\x02' # Barcode type EAN13 -BARCODE_EAN8 = '\x1d\x6b\x03' # Barcode type EAN8 -BARCODE_CODE39 = '\x1d\x6b\x04' # Barcode type CODE39 -BARCODE_ITF = '\x1d\x6b\x05' # Barcode type ITF -BARCODE_NW7 = '\x1d\x6b\x06' # Barcode type NW7 +BARCODE_TXT_OFF = b'\x1d\x48\x00' # HRI barcode chars OFF +BARCODE_TXT_ABV = b'\x1d\x48\x01' # HRI barcode chars above +BARCODE_TXT_BLW = b'\x1d\x48\x02' # HRI barcode chars below +BARCODE_TXT_BTH = b'\x1d\x48\x03' # HRI barcode chars both above and below +BARCODE_FONT_A = b'\x1d\x66\x00' # Font type A for HRI barcode chars +BARCODE_FONT_B = b'\x1d\x66\x01' # Font type B for HRI barcode chars +BARCODE_HEIGHT = b'\x1d\x68\x64' # Barcode Height [1-255] +BARCODE_WIDTH = b'\x1d\x77\x03' # Barcode Width [2-6] +BARCODE_UPC_A = b'\x1d\x6b\x00' # Barcode type UPC-A +BARCODE_UPC_E = b'\x1d\x6b\x01' # Barcode type UPC-E +BARCODE_EAN13 = b'\x1d\x6b\x02' # Barcode type EAN13 +BARCODE_EAN8 = b'\x1d\x6b\x03' # Barcode type EAN8 +BARCODE_CODE39 = b'\x1d\x6b\x04' # Barcode type CODE39 +BARCODE_ITF = b'\x1d\x6b\x05' # Barcode type ITF +BARCODE_NW7 = b'\x1d\x6b\x06' # Barcode type NW7 # Image format -S_RASTER_N = '\x1d\x76\x30\x00' # Set raster image normal size -S_RASTER_2W = '\x1d\x76\x30\x01' # Set raster image double width -S_RASTER_2H = '\x1d\x76\x30\x02' # Set raster image double height -S_RASTER_Q = '\x1d\x76\x30\x03' # Set raster image quadruple +S_RASTER_N = b'\x1d\x76\x30\x00' # Set raster image normal size +S_RASTER_2W = b'\x1d\x76\x30\x01' # Set raster image double width +S_RASTER_2H = b'\x1d\x76\x30\x02' # Set raster image double height +S_RASTER_Q = b'\x1d\x76\x30\x03' # Set raster image quadruple diff --git a/escpos/escpos.py b/escpos/escpos.py index c79bea4..6b3171c 100644 --- a/escpos/escpos.py +++ b/escpos/escpos.py @@ -27,9 +27,9 @@ class Escpos: else: image_border = 32 - (size % 32) if (image_border % 2) == 0: - return (image_border / 2, image_border / 2) + return (image_border // 2, image_border // 2) else: - return (image_border / 2, (image_border / 2) + 1) + return (image_border // 2, (image_border // 2) + 1) def _print_image(self, line, size): @@ -39,7 +39,7 @@ class Escpos: buffer = "" self._raw(S_RASTER_N) - buffer = "%02X%02X%02X%02X" % (((size[0]/size[1])/8), 0, size[1], 0) + buffer = "%02X%02X%02X%02X" % (((size[0]//size[1])//8), 0, size[1], 0) self._raw(buffer.decode('hex')) buffer = "" @@ -66,11 +66,11 @@ class Escpos: lut = [] for b in range(0, len(h), 256): # step size - step = reduce(operator.add, h[b:b+256]) / 255 + step = reduce(operator.add, h[b:b+256]) // 255 # create equalization lookup table n = 0 for i in range(256): - lut.append(n / step) + lut.append(n // step) n = n + h[i+b] im = im.point(lut) @@ -105,7 +105,7 @@ class Escpos: im = Image.open(img).convert("RGB") if im.size[0] > 512: - print "WARNING: Image is wider than 512 and could be truncated at print time " + print("WARNING: Image is wider than 512 and could be truncated at print time ") if im.size[1] > 255: raise ImageSizeError() @@ -127,13 +127,13 @@ class Escpos: pattern_len = len(im_pattern) switch = (switch - 1 ) * (-1) for x in range(pattern_len): - if im_color <= (255 * 3 / pattern_len * (x+1)): + if im_color <= (255 * 3 // pattern_len * (x+1)): if im_pattern[x] == "X": pix_line += "%d" % switch else: pix_line += im_pattern[x] break - elif im_color > (255 * 3 / pattern_len * pattern_len) and im_color <= (255 * 3): + elif im_color > (255 * 3 // pattern_len * pattern_len) and im_color <= (255 * 3): pix_line += im_pattern[-1] break pix_line += im_right From b78f8c98070b6bc2f3310b709df57d2c7917d6e2 Mon Sep 17 00:00:00 2001 From: Adusso Date: Sat, 31 May 2014 17:36:00 +0300 Subject: [PATCH 2/3] escpos module fixed for python 3? --- escpos/constants.py | 92 +++++++++++++++++++++++---------------------- escpos/escpos.py | 11 +++--- escpos/printer.py | 20 +++++----- escpos/utils.py | 9 +++++ setup.py | 1 + 5 files changed, 73 insertions(+), 60 deletions(-) create mode 100644 escpos/utils.py diff --git a/escpos/constants.py b/escpos/constants.py index 8f533d4..6d67dee 100644 --- a/escpos/constants.py +++ b/escpos/constants.py @@ -1,54 +1,56 @@ """ ESC/POS Commands (Constants) """ +from escpos.utils import hex2bytes + # Feed control sequences -CTL_LF = b'\x0a' # Print and line feed -CTL_FF = b'\x0c' # Form feed -CTL_CR = b'\x0d' # Carriage return -CTL_HT = b'\x09' # Horizontal tab -CTL_VT = b'\x0b' # Vertical tab +CTL_LF = hex2bytes('0a') # Print and line feed +CTL_FF = hex2bytes('0c') # Form feed +CTL_CR = hex2bytes('0d') # Carriage return +CTL_HT = hex2bytes('09') # Horizontal tab +CTL_VT = hex2bytes('0b') # Vertical tab # Printer hardware -HW_INIT = b'\x1b\x40' # Clear data in buffer and reset modes -HW_SELECT = b'\x1b\x3d\x01' # Printer select -HW_RESET = b'\x1b\x3f\x0a\x00' # Reset printer hardware +HW_INIT = hex2bytes('1b40') # Clear data in buffer and reset modes +HW_SELECT = hex2bytes('1b3d01') # Printer select +HW_RESET = hex2bytes('1b3f0a00') # Reset printer hardware # Cash Drawer -CD_KICK_2 = b'\x1b\x70\x00' # Sends a pulse to pin 2 [] -CD_KICK_5 = b'\x1b\x70\x01' # Sends a pulse to pin 5 [] +CD_KICK_2 = hex2bytes('1b7000') # Sends a pulse to pin 2 [] +CD_KICK_5 = hex2bytes('1b7001') # Sends a pulse to pin 5 [] # Paper -PAPER_FULL_CUT = b'\x1d\x56\x00' # Full cut paper -PAPER_PART_CUT = b'\x1d\x56\x01' # Partial cut paper +PAPER_FULL_CUT = hex2bytes('1d5600') # Full cut paper +PAPER_PART_CUT = hex2bytes('1d5601') # Partial cut paper # Text format -TXT_NORMAL = b'\x1b\x21\x00' # Normal text -TXT_2HEIGHT = b'\x1b\x21\x10' # Double height text -TXT_2WIDTH = b'\x1b\x21\x20' # Double width text -TXT_4SQUARE = b'\x1b\x21\x30' # Quad area text -TXT_UNDERL_OFF = b'\x1b\x2d\x00' # Underline font OFF -TXT_UNDERL_ON = b'\x1b\x2d\x01' # Underline font 1-dot ON -TXT_UNDERL2_ON = b'\x1b\x2d\x02' # Underline font 2-dot ON -TXT_BOLD_OFF = b'\x1b\x45\x00' # Bold font OFF -TXT_BOLD_ON = b'\x1b\x45\x01' # Bold font ON -TXT_FONT_A = b'\x1b\x4d\x00' # Font type A -TXT_FONT_B = b'\x1b\x4d\x01' # Font type B -TXT_ALIGN_LT = b'\x1b\x61\x00' # Left justification -TXT_ALIGN_CT = b'\x1b\x61\x01' # Centering -TXT_ALIGN_RT = b'\x1b\x61\x02' # Right justification +TXT_NORMAL = hex2bytes('1b2100') # Normal text +TXT_2HEIGHT = hex2bytes('1b2110') # Double height text +TXT_2WIDTH = hex2bytes('1b2120') # Double width text +TXT_4SQUARE = hex2bytes('1b2130') # Quad area text +TXT_UNDERL_OFF = hex2bytes('1b2d00') # Underline font OFF +TXT_UNDERL_ON = hex2bytes('1b2d01') # Underline font 1-dot ON +TXT_UNDERL2_ON = hex2bytes('1b2d02') # Underline font 2-dot ON +TXT_BOLD_OFF = hex2bytes('1b4500') # Bold font OFF +TXT_BOLD_ON = hex2bytes('1b4501') # Bold font ON +TXT_FONT_A = hex2bytes('1b4d00') # Font type A +TXT_FONT_B = hex2bytes('1b4d01') # Font type B +TXT_ALIGN_LT = hex2bytes('1b6100') # Left justification +TXT_ALIGN_CT = hex2bytes('1b6101') # Centering +TXT_ALIGN_RT = hex2bytes('1b6102') # Right justification # Barcode format -BARCODE_TXT_OFF = b'\x1d\x48\x00' # HRI barcode chars OFF -BARCODE_TXT_ABV = b'\x1d\x48\x01' # HRI barcode chars above -BARCODE_TXT_BLW = b'\x1d\x48\x02' # HRI barcode chars below -BARCODE_TXT_BTH = b'\x1d\x48\x03' # HRI barcode chars both above and below -BARCODE_FONT_A = b'\x1d\x66\x00' # Font type A for HRI barcode chars -BARCODE_FONT_B = b'\x1d\x66\x01' # Font type B for HRI barcode chars -BARCODE_HEIGHT = b'\x1d\x68\x64' # Barcode Height [1-255] -BARCODE_WIDTH = b'\x1d\x77\x03' # Barcode Width [2-6] -BARCODE_UPC_A = b'\x1d\x6b\x00' # Barcode type UPC-A -BARCODE_UPC_E = b'\x1d\x6b\x01' # Barcode type UPC-E -BARCODE_EAN13 = b'\x1d\x6b\x02' # Barcode type EAN13 -BARCODE_EAN8 = b'\x1d\x6b\x03' # Barcode type EAN8 -BARCODE_CODE39 = b'\x1d\x6b\x04' # Barcode type CODE39 -BARCODE_ITF = b'\x1d\x6b\x05' # Barcode type ITF -BARCODE_NW7 = b'\x1d\x6b\x06' # Barcode type NW7 +BARCODE_TXT_OFF = hex2bytes('1d4800') # HRI barcode chars OFF +BARCODE_TXT_ABV = hex2bytes('1d4801') # HRI barcode chars above +BARCODE_TXT_BLW = hex2bytes('1d4802') # HRI barcode chars below +BARCODE_TXT_BTH = hex2bytes('1d4803') # HRI barcode chars both above and below +BARCODE_FONT_A = hex2bytes('1d6600') # Font type A for HRI barcode chars +BARCODE_FONT_B = hex2bytes('1d6601') # Font type B for HRI barcode chars +BARCODE_HEIGHT = hex2bytes('1d6864') # Barcode Height [1-255] +BARCODE_WIDTH = hex2bytes('1d7703') # Barcode Width [2-6] +BARCODE_UPC_A = hex2bytes('1d6b00') # Barcode type UPC-A +BARCODE_UPC_E = hex2bytes('1d6b01') # Barcode type UPC-E +BARCODE_EAN13 = hex2bytes('1d6b02') # Barcode type EAN13 +BARCODE_EAN8 = hex2bytes('1d6b03') # Barcode type EAN8 +BARCODE_CODE39 = hex2bytes('1d6b04') # Barcode type CODE39 +BARCODE_ITF = hex2bytes('1d6b05') # Barcode type ITF +BARCODE_NW7 = hex2bytes('1d6b06') # Barcode type NW7 # Image format -S_RASTER_N = b'\x1d\x76\x30\x00' # Set raster image normal size -S_RASTER_2W = b'\x1d\x76\x30\x01' # Set raster image double width -S_RASTER_2H = b'\x1d\x76\x30\x02' # Set raster image double height -S_RASTER_Q = b'\x1d\x76\x30\x03' # Set raster image quadruple +S_RASTER_N = hex2bytes('1d763000') # Set raster image normal size +S_RASTER_2W = hex2bytes('1d763001') # Set raster image double width +S_RASTER_2H = hex2bytes('1d763002') # Set raster image double height +S_RASTER_Q = hex2bytes('1d763003') # Set raster image quadruple diff --git a/escpos/escpos.py b/escpos/escpos.py index 6b3171c..4c38f4c 100644 --- a/escpos/escpos.py +++ b/escpos/escpos.py @@ -12,10 +12,11 @@ import qrcode import operator from PIL import Image -from constants import * -from exceptions import * +from escpos.utils import * +from escpos.constants import * +from escpos.exceptions import * -class Escpos: +class Escpos(object): """ ESC/POS Printer object """ device = None @@ -40,7 +41,7 @@ class Escpos: self._raw(S_RASTER_N) buffer = "%02X%02X%02X%02X" % (((size[0]//size[1])//8), 0, size[1], 0) - self._raw(buffer.decode('hex')) + self._raw(hex2bytes(buffer)) buffer = "" while i < len(line): @@ -49,7 +50,7 @@ class Escpos: i += 8 cont += 1 if cont % 4 == 0: - self._raw(buffer.decode("hex")) + self._raw(hex2bytes(buffer)) buffer = "" cont = 0 diff --git a/escpos/printer.py b/escpos/printer.py index 73f624b..37a0e33 100644 --- a/escpos/printer.py +++ b/escpos/printer.py @@ -11,9 +11,9 @@ import usb.util import serial import socket -from escpos import * -from constants import * -from exceptions import * +from escpos.escpos import * +from escpos.constants import * +from escpos.exceptions import * class Usb(Escpos): """ Define USB printer """ @@ -44,13 +44,13 @@ class Usb(Escpos): try: self.device.detach_kernel_driver(0) except usb.core.USBError as e: - print "Could not detatch kernel driver: %s" % str(e) + print("Could not detatch kernel driver: %s" % str(e)) try: self.device.set_configuration() self.device.reset() except usb.core.USBError as e: - print "Could not set configuration: %s" % str(e) + print("Could not set configuration: %s" % str(e)) def _raw(self, msg): @@ -88,9 +88,9 @@ class Serial(Escpos): self.device = serial.Serial(port=self.devfile, baudrate=self.baudrate, bytesize=self.bytesize, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=self.timeout, dsrdtr=True) if self.device is not None: - print "Serial printer enabled" + print("Serial printer enabled") else: - print "Unable to open serial printer on: %s" % self.devfile + print("Unable to open serial printer on: %s" % self.devfile) def _raw(self, msg): @@ -124,7 +124,7 @@ class Network(Escpos): self.device.connect((self.host, self.port)) if self.device is None: - print "Could not open socket for %s" % self.host + print("Could not open socket for %s" % self.host) def _raw(self, msg): @@ -150,10 +150,10 @@ class File(Escpos): def open(self): """ Open system file """ - self.device = open(self.devfile, "wb") + self.device = open(self.devfile, "wb") if self.device is None: - print "Could not open the specified file %s" % self.devfile + print("Could not open the specified file %s" % self.devfile) def _raw(self, msg): diff --git a/escpos/utils.py b/escpos/utils.py new file mode 100644 index 0000000..de6ca7c --- /dev/null +++ b/escpos/utils.py @@ -0,0 +1,9 @@ +try: + bytes.fromhex + def hex2bytes(hex_string): + return bytes.fromhex(hex_string) + +except: + def hex2bytes(hex_string): + return hex_string.decode('hex') + diff --git a/setup.py b/setup.py index 27197d0..b00a77e 100755 --- a/setup.py +++ b/setup.py @@ -1,5 +1,6 @@ #!/usr/bin/python +from setuptools import setup from distutils.core import setup setup( From 1ce7be523aa90de8bf2fd50038c8d264367bcb6c Mon Sep 17 00:00:00 2001 From: Adusso Date: Tue, 3 Jun 2014 13:36:33 +0300 Subject: [PATCH 3/3] vastly faster image printing supported --- .gitignore | 6 +++- doge.bmp | Bin 0 -> 334854 bytes escpos/escpos.py | 89 +++++++++++++++++------------------------------ 3 files changed, 37 insertions(+), 58 deletions(-) create mode 100644 doge.bmp diff --git a/.gitignore b/.gitignore index 05ea79d..fcc9b77 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ *.py[cod] -.DS_Store \ No newline at end of file +.DS_Store +escpos.egg-info +MANIFEST +dist + diff --git a/doge.bmp b/doge.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5def11903b46df8b6524a65b9c2ae15c7a5ee3d1 GIT binary patch literal 334854 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 literal 0 HcmV?d00001 diff --git a/escpos/escpos.py b/escpos/escpos.py index 4c38f4c..3cee8fc 100644 --- a/escpos/escpos.py +++ b/escpos/escpos.py @@ -5,12 +5,12 @@ @copyright: Copyright (c) 2012 Bashlinux @license: GPL ''' - +import struct import os import time import qrcode import operator -from PIL import Image +from PIL import Image, ImageOps from escpos.utils import * from escpos.constants import * @@ -30,29 +30,19 @@ class Escpos(object): if (image_border % 2) == 0: return (image_border // 2, image_border // 2) else: - return (image_border // 2, (image_border // 2) + 1) + return (image_border // 2, image_border // 2 + 1) - def _print_image(self, line, size): + def _print_image(self, imagedata, n_rows, col_bytes): """ Print formatted image """ i = 0 cont = 0 buffer = "" self._raw(S_RASTER_N) - buffer = "%02X%02X%02X%02X" % (((size[0]//size[1])//8), 0, size[1], 0) - self._raw(hex2bytes(buffer)) - buffer = "" - - while i < len(line): - hex_string = int(line[i:i+8],2) - buffer += "%02X" % hex_string - i += 8 - cont += 1 - if cont % 4 == 0: - self._raw(hex2bytes(buffer)) - buffer = "" - cont = 0 + buffer = struct.pack(' 512: - print("WARNING: Image is wider than 512 and could be truncated at print time ") - if im.size[1] > 255: + im = im.convert("L") + im = ImageOps.invert(im) + im = im.convert("1") + + if im.size[0] > 640: + print("WARNING: Image is wider than 640 and could be truncated at print time ") + if im.size[1] > 640: raise ImageSizeError() + + orig_width, height = im.size + width = ((orig_width + 31) // 32) * 32 + new_image = Image.new("1", (width, height)) + new_image.paste(im, (0, 0, orig_width, height)) - im_border = self._check_image_size(im.size[0]) - for i in range(im_border[0]): - im_left += "0" - for i in range(im_border[1]): - im_right += "0" - - for y in range(im.size[1]): - img_size[1] += 1 - pix_line += im_left - img_size[0] += im_border[0] - for x in range(im.size[0]): - img_size[0] += 1 - RGB = im.getpixel((x, y)) - im_color = (RGB[0] + RGB[1] + RGB[2]) - im_pattern = "1X0" - pattern_len = len(im_pattern) - switch = (switch - 1 ) * (-1) - for x in range(pattern_len): - if im_color <= (255 * 3 // pattern_len * (x+1)): - if im_pattern[x] == "X": - pix_line += "%d" % switch - else: - pix_line += im_pattern[x] - break - elif im_color > (255 * 3 // pattern_len * pattern_len) and im_color <= (255 * 3): - pix_line += im_pattern[-1] - break - pix_line += im_right - img_size[0] += im_border[1] - - self._print_image(pix_line, img_size) + the_bytes = new_image.tobytes() + self._print_image(the_bytes, n_rows=height, col_bytes=width//8) def qr(self, text): """ Print QR Code for the provided string """ @@ -149,7 +117,14 @@ class Escpos(object): qr_code.make(fit=True) qr_img = qr_code.make_image() # Convert the RGB image in printable image - im = qr_img._img.convert("RGB") + im = qr_img._img.convert("1") + width = im.size[0] + height = im.size[1] + while width * 2 <= 640: + width *= 2 + height *= 2 + + im = im.resize((width, height)) self.image(im) def barcode(self, code, bc, width, height, pos, font):