master
Your Name 5 years ago
parent 6c578da591
commit 710bfdcd2b

@ -0,0 +1,33 @@
import requests
import json
r = requests.get("http://127.0.0.1:5000/api/getcontent")
data = r.json()
def getcategory(category):
counter = 0
output=[]
for post in data:
if data[post]["category"] == category:
output.append(data[post]["title"])
counter+=1
if counter == 0:
print("Nothing found")
return output
def get(category, number):
counter = 1
output = []
for post in data:
if data[post]["category"] == category:
if counter == number:
output.append(data[post]["title"])
output.append(data[post]["content"])
counter+=1
return output
#getcategory("thesis")
#get("thesis", 2) #thesis, exercise or term

@ -0,0 +1,95 @@
import argparse
import sys
import os
import six
from random import randint
from PIL import Image, ImageOps
ESC = b'\x1B'
ETX = b'\x03'
SO = b'\x0E'
GRAPHIC = b'\x1B'+b'\x2A'+b'\x01' #1B 2A
LINE_FEED = b'\n'
CARIDGE_RET = b'\x0D'
DATA = bytearray()
COLUMNS = 2000
H = COLUMNS // 256
L = COLUMNS % 256
def _to_column_format(im, line_height):
"""
Extract slices of an image as equal-sized blobs of column-format data.
:param im: Image to extract from
:param line_height: Printed line height in dots
"""
width_pixels, height_pixels = im.size
top = 0
left = 0
blobs = []
while left < width_pixels:
remaining_pixels = width_pixels - left
box = (left, top, left + line_height, top + height_pixels)
#transform: (size, method, data=None, resample=0, fill=1)
slice = im.transform((line_height, height_pixels), Image.EXTENT, box)
bytes = slice.tobytes()
blobs.append(bytes)
left += line_height
return blobs
def _int_low_high(inp_number, out_bytes):
""" Generate multiple bytes for a number: In lower and higher parts, or more parts as needed.
to generate the H and L value
:param inp_number: Input number
:param out_bytes: The number of bytes to output (1 - 4).
"""
max_input = (256 << (out_bytes * 8) - 1);
if not 1 <= out_bytes <= 4:
raise ValueError("Can only output 1-4 byes")
if not 0 <= inp_number <= max_input:
raise ValueError("Number too large. Can only output up to {0} in {1} byes".format(max_input, out_bytes))
outp = b'';
for _ in range(0, out_bytes):
outp += six.int2byte(inp_number % 256)
inp_number = inp_number // 256
return outp
def print(filename):
im = Image.open(filename)
basewidth = 350
# Initial rotate. mirror, and extract blobs for each 8 or 24-pixel row
# Convert to black & white via greyscale (so that bits can be inverted)
im = im.transpose(Image.ROTATE_270).transpose(Image.FLIP_LEFT_RIGHT)
height_pixels, width_pixels = im.size
if width_pixels > basewidth:
wpercent = (basewidth/float(im.size[0]))
hsize = int((float(im.size[1])*float(wpercent)))
im = im.resize((basewidth,hsize), Image.NEAREST)
height_pixels, width_pixels = im.size
im = im.resize((height_pixels,int(width_pixels*1.5)), Image.ANTIALIAS)
im = im.convert("L") # Invert: Only works on 'L' images
im = ImageOps.invert(im) # Bits are sent with 0 = white, 1 = black in ESC/POS
im = im.convert("1") # Pure black and white
#im.show()
line_height = 1
blobs = _to_column_format (im, line_height * 8);
height_pixels, width_pixels = im.size
with open('/dev/tty', 'wb') as fp:
fp.write(ESC+b"@")
fp.write(ESC+b"\x7B"+b"\x41")
fp.write(ESC + b"3" + six.int2byte(22)); # Adjust line-feed size
fp.write(CARIDGE_RET)
for blob in blobs:
fp.write(GRAPHIC + _int_low_high( width_pixels, 2 ) + blob)
fp.write(LINE_FEED)
#fp.write(GRAPHIC + bytes([L,H]) + DATA)
fp.write(ESC + b"2"); # Reset line-feed size

@ -3,10 +3,13 @@ import sys
import os
import six
from random import randint
import random
from PIL import Image, ImageOps
import curses
import sys, termios, tty, os, time
import apirequest
import imageprinter
import requests
class Printer():
ESC = b'\x1B'
@ -22,6 +25,9 @@ class Printer():
def printchar(self,char):
with open(self.target, 'wb') as printer:
if self.debug:
printer.write(bytes(str(char), 'utf-8'))
else:
printer.write(self.ESC+b"\x7B"+b"\x41")
char=self.strokes*" "+char
printer.write(bytes(str(char), 'utf-8'))
@ -33,9 +39,12 @@ class Printer():
def printstring(self,string):
with open(self.target, 'wb') as printer:
printer.write(self.ESC+b"\x7B"+b"\x41")
printer.write(bytes(str(string), 'utf-8'))
printer.write(self.ESC+b"\x25"+b"\x46"+b"\x0F"+b"\x00"+b"\x04"+b"\x08"+b"\x00")
if self.debug:
printer.write(bytes(str(string), 'utf-8'))
else:
printer.write(self.ESC+b"\x7B"+b"\x41")
printer.write(bytes(str(string), 'utf-8'))
printer.write(self.ESC+b"\x25"+b"\x46"+b"\x0F"+b"\x00"+b"\x04"+b"\x08"+b"\x00")
self.newline()
@ -49,27 +58,34 @@ class Printer():
class Terminal():
lineinput = ""
commandMode = False
commandMode = True
writeloop = True
def __init__(self,printer):
def __init__(self,printer, persons):
self.printer = printer
self.persons = persons
def waittostart(self):
self.writeloop = True
while self.writeloop:
char = self.getch()
self.writeloop = False
self.lineinput = ""
continue
def waitforinput(self):
term.writeloop = True
self.writeloop = True
while self.writeloop:
char = self.getch()
self.lineinput+=char
print(self.lineinput)
if (ord(char) == 27):
print("exit publication :-(")
exit(0)
if (ord(char) == 13):
self.printer.newline()
self.checkforcommand(self.lineinput)
self.command(self.lineinput)
self.lineinput = ""
else:
print(char)
self.lineinput+=char
self.printer.printchar(char)
def getch(self):
@ -83,21 +99,99 @@ class Terminal():
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
def checkforcommand(self, command):
print("received command:"+command)
if command == "help":
def command(self, command):
#print("received command: "+str(command))
if "help" == str(command):
self.printer.printstring("type commands to print the publication")
self.printer.printstring("help:")
self.printer.printstring(" get help on the commands")
#self.writeloop = False
elif str(command).split(" ")[0] == "exercise" or str(command).split(" ")[0] == "thesis":
part = str(command).split(" ")[0]
try:
arguments = str(command.strip()).split(" ")
arguments.pop(0)
for i,arg in enumerate(arguments):
if arg.isdigit():
number = int(arg)
if number > len(apirequest.getcategory(part)):
self.printer.printstring("Number must be inbetween 1 and "+ str(len(apirequest.getcategory(part))))
else:
result = apirequest.get(part, number)
for line in result:
self.printer.printstring(line)
self.printer.newline()
else:
raise Exeption("not a number")
except:
self.printer.printstring("ERROR: no argument given. Usage: "+part+" <number>")
elif str(command).split(" ")[0] == "whois":
if str(command).split(" ")[1] in self.persons:
self.printer.printstring(self.persons[str(command).split(" ")[1]])
else:
self.printer.printstring("Sorry not found, try " + random.choice(list(self.persons)))
elif "exit" == str(command):
self.printer.printstring("Imprint")
result = apirequest.get("imprint", 1)
for line in result:
self.printer.printstring(line)
self.printer.newline()
main()
else:
self.printer.printstring("~ command not found. try help for a list of available commands")
self.printer.newline()
#if the command is valid we want to execute the command and continue the story
#self.writeloop = False
persons = {
"Kittler":"Friedrich A. Kittler (June 12, 1943 October 18, 2011) was a literary scholar and a media theorist. His works relate to media, technology, and the military. ",
"Alex":"Alexander Roidl created Poetic Software as part of his Master's thesis"
}
printer = Printer()
term = Terminal(printer)
printer.printstring("W E L C O M E !")
printer.printstring("---------------")
printer.printstring("POETIC SOFTWARE")
printer.printstring("---------------")
printer.printstring("type help for help")
term.waitforinput()
printer.printstring("write a command")
term.waitforinput()
term = Terminal(printer, persons)
def printimagefromurl(url):
page = requests.get(url)
f_ext = os.path.splitext(url)[-1]
f_name = 'img{}'.format(f_ext)
with open(f_name, 'wb') as f:
f.write(page.content)
imageprinter.print(f_name)
def main():
term.waittostart()
printer.printstring("W E L C O M E !")
printimagefromurl('https://apod.nasa.gov/apod/image/1701/potw1636aN159_HST_2048.jpg')
printer.printstring("---------------")
printer.printstring("POETIC SOFTWARE")
printer.printstring("---------------")
printer.printstring("type help for help")
printer.newline()
result = apirequest.get("introduction", 1)
for line in result:
printer.printstring(line)
printer.newline()
printer.printstring("theses on POETIC SOFTWARE")
result = apirequest.getcategory("thesis")
for i, line in enumerate(result):
printer.printstring(str(i+1)+" "+line)
printer.newline()
printer.printstring("exercises in POETIC SOFTWARE")
result = apirequest.getcategory("exercise")
for i, line in enumerate(result):
printer.printstring(str(i+1)+" "+line)
printer.newline()
printer.printstring("SELECT which one to see, for exercise type: exercise <number> and for thesis type: thesis <number>")
printer.newline()
term.waitforinput()
main()

@ -56,49 +56,40 @@ def _int_low_high(inp_number, out_bytes):
return outp
parser = argparse.ArgumentParser(description='Process some imagefile')
parser.add_argument('--img',dest="img",
help='pass image to print')
args = parser.parse_args()
filename = args.img
im = Image.open(filename)
basewidth = 350
# Initial rotate. mirror, and extract blobs for each 8 or 24-pixel row
# Convert to black & white via greyscale (so that bits can be inverted)
im = im.transpose(Image.ROTATE_270).transpose(Image.FLIP_LEFT_RIGHT)
height_pixels, width_pixels = im.size
if width_pixels > basewidth:
wpercent = (basewidth/float(im.size[0]))
hsize = int((float(im.size[1])*float(wpercent)))
im = im.resize((basewidth,hsize), Image.NEAREST)
height_pixels, width_pixels = im.size
im = im.resize((height_pixels,int(width_pixels*1.5)), Image.ANTIALIAS)
im = im.convert("L") # Invert: Only works on 'L' images
im = ImageOps.invert(im) # Bits are sent with 0 = white, 1 = black in ESC/POS
im = im.convert("1") # Pure black and white
line_height = 1
blobs = _to_column_format (im, line_height * 8);
#generate random Data
for i in range(COLUMNS):
DATA.append(randint(0,255))
height_pixels, width_pixels = im.size
with open('/dev/usb/lp0', 'wb') as fp:
fp.write(ESC+b"@")
fp.write(ESC+b"\x7B"+b"\x41")
fp.write(ESC + b"3" + six.int2byte(22)); # Adjust line-feed size
fp.write(CARIDGE_RET)
for blob in blobs:
fp.write(GRAPHIC + _int_low_high( width_pixels, 2 ) + blob)
fp.write(LINE_FEED)
#fp.write(GRAPHIC + bytes([L,H]) + DATA)
fp.write(ESC + b"2"); # Reset line-feed size
def print(filename):
im = Image.open(filename)
basewidth = 350
# Initial rotate. mirror, and extract blobs for each 8 or 24-pixel row
# Convert to black & white via greyscale (so that bits can be inverted)
im = im.transpose(Image.ROTATE_270).transpose(Image.FLIP_LEFT_RIGHT)
height_pixels, width_pixels = im.size
if width_pixels > basewidth:
wpercent = (basewidth/float(im.size[0]))
hsize = int((float(im.size[1])*float(wpercent)))
im = im.resize((basewidth,hsize), Image.NEAREST)
height_pixels, width_pixels = im.size
im = im.resize((height_pixels,int(width_pixels*1.5)), Image.ANTIALIAS)
im = im.convert("L") # Invert: Only works on 'L' images
im = ImageOps.invert(im) # Bits are sent with 0 = white, 1 = black in ESC/POS
im = im.convert("1") # Pure black and white
line_height = 1
blobs = _to_column_format (im, line_height * 8);
height_pixels, width_pixels = im.size
with open('/dev/tty', 'wb') as fp:
fp.write(ESC+b"@")
fp.write(ESC+b"\x7B"+b"\x41")
fp.write(ESC + b"3" + six.int2byte(22)); # Adjust line-feed size
fp.write(CARIDGE_RET)
for blob in blobs:
fp.write(GRAPHIC + _int_low_high( width_pixels, 2 ) + blob)
fp.write(LINE_FEED)
#fp.write(GRAPHIC + bytes([L,H]) + DATA)
fp.write(ESC + b"2"); # Reset line-feed size

Loading…
Cancel
Save