Files
receipt_maker/receipt.py
2025-11-18 16:07:55 +00:00

111 lines
3.2 KiB
Python
Executable File

#!/usr/bin/env python3
from escpos import *
from PIL import Image
import os
import subprocess
import time
import random
import requests
from urllib.parse import quote
# Return T20II printer
def get_T20II_usb():
p = printer.Usb(0x04b8, 0x0202) #, profile="TM-T20II")
# p.set_with_default(align='center', font='a', bold=False, width=2, height=2, custom_size=True, smooth=True)
return p
def get_T20II_ethernet():
p = printer.Network("192.168.192.168", port=9100)#, profile="TM-T20II")
# p.set_with_default(align='center', font='a', bold=False, width=2, height=2, custom_size=True, smooth=True)
return p
def resize_image_to_fullwidth(img_src_name, target_width=576):
# Make fullwidth dir
os.makedirs('img_fullwidth', exist_ok=True)
# Open the image
img = Image.open(img_src_name)
# Get original dimensions
width, height = img.size
# Calculate new height to maintain aspect ratio
aspect_ratio = height / width
new_height = int(target_width * aspect_ratio)
# Resize the image
resized_img = img.resize((target_width, new_height), Image.LANCZOS)
# Save the resized image
name, ext = os.path.splitext(img_src_name)
filename_no_ext = os.path.splitext(os.path.basename(img_src_name))[0]
# Build destination filename
dest_name = f"img_fullwidth/{filename_no_ext}_fullwidth{ext}"
resized_img.save(dest_name)
return dest_name
def get_random_bant_image():
# Create img directory if it doesn't exist
os.makedirs('img', exist_ok=True)
# Fetch the catalog JSON for /bant/
url = "https://a.4cdn.org/bant/catalog.json"
response = requests.get(url)
response.raise_for_status()
catalog = response.json()
# Flatten the list of threads from all pages
threads = [thread for page in catalog for thread in page['threads']]
# Filter threads that have images (tim and ext fields)
image_threads = [
thread for thread in threads
if 'tim' in thread and 'ext' in thread and thread['ext'].lower() not in ['.gif', '.mp4', '.webm']
]
if not image_threads:
return None # No images found
# Choose a random thread with an image
thread = random.choice(image_threads)
# Construct image URL
image_url = f"https://i.4cdn.org/bant/{thread['tim']}{thread['ext']}"
filename = f"img/{thread['tim']}{thread['ext']}"
# Download and save image
img_response = requests.get(image_url)
img_response.raise_for_status()
with open(filename, 'wb') as f:
f.write(img_response.content)
return filename
def print_random_bant_image(p, sh_file):
img = get_random_bant_image()
filename_no_ext = os.path.splitext(os.path.basename(img))[0]
p.textln(filename_no_ext)
fimg = resize_image_to_fullwidth(img)
try:
p.image(fimg, impl='bitImageColumn');
except:
subprocess.run(["bash", sh_file], check=True)
p = get_T20II_ethernet()
p.cut()
def main():
script_dir = os.path.dirname(os.path.abspath(__file__))
sh_file = os.path.join(script_dir, "connect_recipt.sh")
subprocess.run(["bash", sh_file], check=True)
p = get_T20II_ethernet()
print_random_bant_image(p, sh_file)
return
if __name__ == "__main__":
main()