Update code to better handle the raspberry pi mode
This commit is contained in:
105
src/printer.py
105
src/printer.py
@@ -98,46 +98,37 @@ class Printer(object):
|
||||
|
||||
return True
|
||||
|
||||
def print_sms(self, msg, signature="Guest") -> None:
|
||||
clean_msg = str(msg)
|
||||
def print_sms(self, msg, signature="",bold=False):
|
||||
clean_msg = str(msg) + "\n"
|
||||
clean_signature = str(signature)
|
||||
|
||||
if len(clean_msg) > 4096 or len(clean_msg) < 3 :
|
||||
if len(clean_msg) > 4096:
|
||||
self.app.logger.warning("Could not print message of this length: " + str(len(clean_msg)))
|
||||
raise Exception("Could not print message of this length :" + str(len(clean_msg)) + ", needs to between 3 and 4096 caracters long.")
|
||||
raise Exception("Could not print message of this length :" + str(len(clean_msg)) + ", needs to be below 4096 caracters long.")
|
||||
|
||||
if len(signature) > 256 or len(signature) < 1:
|
||||
if len(signature) > 256:
|
||||
self.app.logger.warning("Could not print signature of this length: " + str(len(clean_signature)))
|
||||
raise Exception("Could not print signature of this length :" + str(len(clean_signature)) + ", needs to between 3 and 256 caracters long.")
|
||||
|
||||
self.check_paper()
|
||||
raise Exception("Could not print signature of this length :" + str(len(clean_signature)) + ", needs to be below 256 caracters long.")
|
||||
|
||||
try:
|
||||
self.printer.open(self.usb_args);
|
||||
self.printer.set(align='left', font='a', bold=False, underline=0, width=1, height=1, density=8, invert=False, smooth=True, flip=False, double_width=False, double_height=False, custom_size=False)
|
||||
self.printer.set(align='left', font='a', bold=True, underline=1, width=1, height=1, density=6, invert=False, smooth=True, flip=False, double_width=False, double_height=False, custom_size=False)
|
||||
self.printer.textln(clean_msg)
|
||||
self.printer.textln("")
|
||||
self.printer.set(align='left', font='b', bold=False, underline=1, width=1, height=1, density=9, invert=False, smooth=True, flip=False, double_width=False, double_height=False, custom_size=False)
|
||||
self.printer.textln("> " + clean_signature + " @ " + strftime("%Y-%m-%d %H:%M:%S", gmtime()))
|
||||
self.printer.textln("")
|
||||
self.printer.textln("Printed by LittlePrinter ")
|
||||
self.printer.textln("n07070.xyz/articles/littleprynter")
|
||||
self.printer.textln("")
|
||||
self.printer.cut()
|
||||
self.printer.set(align='center', font='a', bold=bold)
|
||||
self.printer.textln(clean_msg )
|
||||
if clean_signature:
|
||||
self.printer.textln(clean_signature )
|
||||
self.printer.close()
|
||||
except Exception as e:
|
||||
self.app.logger.error("Unable to print because : " + str(e))
|
||||
raise e
|
||||
|
||||
self.app.logger.info("Printed text")
|
||||
return True
|
||||
|
||||
def print_img(self, path, sign) -> None:
|
||||
def print_img(self, path, sign="",center=True,process=False):
|
||||
clean_signature = str(sign)
|
||||
|
||||
if len(sign) > 256 or len(sign) < 1:
|
||||
if len(sign) > 256:
|
||||
self.app.logger.warning("Could not print signature of this length: " + str(len(clean_signature)))
|
||||
raise Exception("Could not print signature of this length :" + str(len(clean_signature)) + ", needs to between 3 and 256 caracters long.")
|
||||
raise Exception("Could not print signature of this length :" + str(len(clean_signature)) + ", needs to be below 256 caracters long.")
|
||||
|
||||
if not os.path.isfile(str(path)):
|
||||
self.app.logger.warning("File does not exist : " + str(path))
|
||||
@@ -145,31 +136,61 @@ class Printer(object):
|
||||
else:
|
||||
self.app.logger.debug("Printing file from " + str(path))
|
||||
|
||||
try:
|
||||
self.app.logger.debug("Proccessing the image")
|
||||
path = process_image(self, path)
|
||||
except Exception as e:
|
||||
self.app.logger.error(str(e))
|
||||
raise e
|
||||
if process:
|
||||
try:
|
||||
self.app.logger.debug("Proccessing the image")
|
||||
path = process_image(self, path)
|
||||
except Exception as e:
|
||||
self.app.logger.error(str(e))
|
||||
return False
|
||||
else:
|
||||
self.app.logger.warning("Not proccessing the image")
|
||||
|
||||
|
||||
try:
|
||||
self.check_paper()
|
||||
self.printer.open(self.usb_args)
|
||||
self.printer.image(path)
|
||||
self.printer.textln("Printed by LittlePrynter ")
|
||||
self.printer.textln("n07070.xyz/articles/littleprynter")
|
||||
self.printer.textln(clean_signature + " @ " + strftime("%Y-%m-%d %H:%M:%S", gmtime()))
|
||||
self.printer.cut()
|
||||
self.printer.image(path,center=center)
|
||||
self.printer.close()
|
||||
self.app.logger.debug("Printed an image : " + str(path))
|
||||
os.remove(path)
|
||||
self.app.logger.debug("Removed image.")
|
||||
self.app.logger.debug("Removed image : " + str(path))
|
||||
except Exception as e:
|
||||
self.printer.close()
|
||||
self.app.logger.error(str(e))
|
||||
return False
|
||||
|
||||
self.app.logger.info("Printed a picture")
|
||||
return True
|
||||
|
||||
def qr(self, content):
|
||||
try:
|
||||
self.printer.open(self.usb_args)
|
||||
self.printer.qr(content, center=True)
|
||||
self.printer.close()
|
||||
except Exception as e:
|
||||
self.printer.close()
|
||||
self.app.logger.error(str(e))
|
||||
return False
|
||||
|
||||
self.app.logger.info("Printed a QR")
|
||||
return True
|
||||
|
||||
|
||||
|
||||
def cut(self):
|
||||
try:
|
||||
self.printer.open(self.usb_args)
|
||||
self.printer.cut()
|
||||
self.printer.close()
|
||||
except Exception as e:
|
||||
self.printer.close()
|
||||
self.app.logger.error(str(e))
|
||||
raise e
|
||||
|
||||
self.app.logger.info("Did a cut")
|
||||
return True
|
||||
|
||||
|
||||
def process_image(self, path):
|
||||
brightness_factor = 1.5 # Used only if image is too dark
|
||||
brightness_threshold = 100 # Brightness threshold (0–255)
|
||||
@@ -187,9 +208,9 @@ def process_image(self, path):
|
||||
original_img.thumbnail((max_width, max_height), Image.LANCZOS)
|
||||
self.app.logger.debug("Resized the image")
|
||||
|
||||
# Convert to grayscale for dithering
|
||||
dithered_img = original_img.convert("L").convert("1") # Dithering using default method (Floyd–Steinberg)
|
||||
self.app.logger.debug("Dithered the image")
|
||||
# # Convert to grayscale for dithering
|
||||
# dithered_img = original_img.convert("L").convert("1") # Dithering using default method (Floyd–Steinberg)
|
||||
# self.app.logger.debug("Dithered the image")
|
||||
|
||||
# Compute brightness of original image (grayscale average)
|
||||
grayscale = original_img.convert("L")
|
||||
@@ -204,9 +225,9 @@ def process_image(self, path):
|
||||
enhancer = ImageEnhance.Brightness(original_img)
|
||||
original_img = enhancer.enhance(brightness_factor)
|
||||
|
||||
# Reduce contrast
|
||||
contrast_enhancer = ImageEnhance.Contrast(original_img)
|
||||
original_img = contrast_enhancer.enhance(contrast_factor)
|
||||
# # Reduce contrast
|
||||
# contrast_enhancer = ImageEnhance.Contrast(original_img)
|
||||
# original_img = contrast_enhancer.enhance(contrast_factor)
|
||||
|
||||
# Final resize check
|
||||
if original_img.height > max_height:
|
||||
|
||||
Reference in New Issue
Block a user