#!/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()