Files
brother_ql/brother_ql/create.py
T
2016-02-12 21:40:06 +01:00

73 lines
1.9 KiB
Python
Executable File

#!/usr/bin/env python
from __future__ import division
import sys, argparse, logging
import numpy as np
from PIL import Image
from brother_ql.raster import BrotherQLRaster
try:
stdout = sys.stdout.buffer
except:
stdout = sys.stdout
def hex_format(data):
return ' '.join('{:02X}'.format(byte) for byte in data)
def multiline_hex(data, bpl):
""" data: bytes, bpl: int (bytes to be displayed per line) """
data = hex_format(data).split()
data = [' '.join(data[i:i+bpl]) for i in range(0, len(data), bpl)]
return '\n'.join(data) + '\n'
def main():
parser = argparse.ArgumentParser()
parser.add_argument('image')
parser.add_argument('outfile', nargs='?', type=argparse.FileType('wb'), default=stdout)
parser.add_argument('--model', default='QL-500')
parser.add_argument('--threshold', type=int, default=170)
parser.add_argument('--loglevel', type=lambda x: getattr(logging, x), default=logging.WARNING)
args = parser.parse_args()
logging.basicConfig(level=args.loglevel)
im = Image.open(args.image)
im = im.convert("L")
arr = np.asarray(im, dtype=np.uint8)
arr.flags.writeable = True
white_idx = arr[:,:] < args.threshold
black_idx = arr[:,:] >= args.threshold
arr[white_idx] = 1
arr[black_idx] = 0
qlr = BrotherQLRaster(args.model)
qlr.set_mode()
qlr.set_clear_command_buffer()
qlr.set_initialize()
qlr.set_mode()
qlr.mtype = 0x0A
qlr.mwidth = 62
qlr.mlength = 0
qlr.set_media_and_quality(im.size[1])
qlr.set_autocut(True)
qlr.set_cut_every(1)
qlr.dpi_600 = False
qlr.cut_at_end = True
qlr.set_expanded_mode()
qlr.set_margins()
qlr.set_compression(True)
qlr.set_raster_data(arr)
qlr.print_cmd()
if args.loglevel == logging.DEBUG:
sys.stderr.write(multiline_hex(qlr.data, 16))
args.outfile.write(qlr.data)
if __name__ == "__main__":
main()