import StarTSPImage from PIL import Image, ImageDraw, ImageFont, ImageOps import textwrap import random import paho.mqtt.client as mqtt # The callback for when the client receives a CONNACK response from the server. def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) # Subscribing in on_connect() means that if we lose the connection and # reconnect then subscriptions will be renewed. client.subscribe("print") # The callback for when a PUBLISH message is received from the server. def on_message(client, userdata, msg): with open("printer/locations.txt") as locations: lines = locations.read().splitlines() location = random.choice(lines) with open("printer/actions.txt") as actions: lines = actions.read().splitlines() action = random.choice(lines) with open("printer/adverbs.txt") as adverb: lines = adverb.read().splitlines() adverb = random.choice(lines) if random.randint(0,1): im=Image.open("printer/image.jpg") else: im=Image.open("printer/image2.jpg") # f = ImageFont.load_default() f = ImageFont.truetype("printer/SilkRemington-Regular.otf", 40) txt=Image.new('L', (1000,230)) d = ImageDraw.Draw(txt) text = "While {}, {}, {}".format(location, action, adverb) text_short = "By the DJ, offer a stranger a drink" text_long = "In the outdoor area, ask someone would you rather be known for always being honest or always being kind" lines = textwrap.wrap(text, width=23) if len(lines) > 2: im=Image.open("printer/image.jpg") else: im=Image.open("printer/image2.jpg") y = 0 n = 0 for line in lines: n += 1 width, height = f.getsize(line) d.text(((1000-width)/2, y), line, font=f, fill=255) y += height w=txt.rotate(-90, expand=1) print(n) im.paste( ImageOps.colorize(w, (0,0,0), (0,0,0)), ( (n-5)*20 + 127, 5), w) im.show() im.save("image_tmp.jpg") raster = StarTSPImage.imageToRaster(im, cut=True) printer = open('/dev/usb/lp0', "wb") #printer.write(raster) client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect("", 1883, 60) # Blocking call that processes network traffic, dispatches callbacks and # handles reconnecting. # Other loop*() functions are available that give a threaded interface and a # manual interface. client.loop_forever()