initial, still very untested support for PT-P750W

This commit is contained in:
Philipp Klaus
2019-09-02 22:37:38 +02:00
parent 05516a7692
commit 638b365d45
5 changed files with 26 additions and 9 deletions

View File

@@ -9,7 +9,8 @@ from PIL import Image
import PIL.ImageOps, PIL.ImageChops import PIL.ImageOps, PIL.ImageChops
from brother_ql.raster import BrotherQLRaster from brother_ql.raster import BrotherQLRaster
from brother_ql.devicedependent import label_type_specs, ENDLESS_LABEL, DIE_CUT_LABEL, ROUND_DIE_CUT_LABEL, right_margin_addition from brother_ql.devicedependent import ENDLESS_LABEL, DIE_CUT_LABEL, ROUND_DIE_CUT_LABEL, PTOUCH_ENDLESS_LABEL
from brother_ql.devicedependent import label_type_specs, right_margin_addition
from brother_ql import BrotherQLUnsupportedCmd from brother_ql import BrotherQLUnsupportedCmd
from brother_ql.image_trafos import filtered_hsv from brother_ql.image_trafos import filtered_hsv
@@ -102,7 +103,7 @@ def convert(qlr, images, label, **kwargs):
else: else:
dots_expected = dots_printable dots_expected = dots_printable
if label_specs['kind'] == ENDLESS_LABEL: if label_specs['kind'] in (ENDLESS_LABEL, PTOUCH_ENDLESS_LABEL):
if rotate not in ('auto', 0): if rotate not in ('auto', 0):
im = im.rotate(rotate, expand=True) im = im.rotate(rotate, expand=True)
if dpi_600: if dpi_600:
@@ -161,10 +162,14 @@ def convert(qlr, images, label, **kwargs):
qlr.mtype = 0x0B qlr.mtype = 0x0B
qlr.mwidth = tape_size[0] qlr.mwidth = tape_size[0]
qlr.mlength = tape_size[1] qlr.mlength = tape_size[1]
else: elif label_specs['kind'] in (ENDLESS_LABEL, ):
qlr.mtype = 0x0A qlr.mtype = 0x0A
qlr.mwidth = tape_size[0] qlr.mwidth = tape_size[0]
qlr.mlength = 0 qlr.mlength = 0
elif label_specs['kind'] in (PTOUCH_ENDLESS_LABEL, ):
qlr.mtype = 0x00
qlr.mwidth = tape_size[0]
qlr.mlength = 0
qlr.pquality = int(hq) qlr.pquality = int(hq)
qlr.add_media_and_quality(im.size[1]) qlr.add_media_and_quality(im.size[1])
try: try:

View File

@@ -21,6 +21,7 @@ logger = logging.getLogger(__name__)
DIE_CUT_LABEL = None DIE_CUT_LABEL = None
ENDLESS_LABEL = None ENDLESS_LABEL = None
ROUND_DIE_CUT_LABEL = None ROUND_DIE_CUT_LABEL = None
PTOUCH_ENDLESS_LABEL = None
label_type_specs = {} label_type_specs = {}
label_sizes = [] label_sizes = []
# And concerning printer models # And concerning printer models
@@ -61,13 +62,14 @@ def _populate_label_legacy_structures():
We contain this code inside a function so that the imports We contain this code inside a function so that the imports
we do in here are not visible at the module level. we do in here are not visible at the module level.
""" """
global DIE_CUT_LABEL, ENDLESS_LABEL, ROUND_DIE_CUT_LABEL global DIE_CUT_LABEL, ENDLESS_LABEL, ROUND_DIE_CUT_LABEL, PTOUCH_ENDLESS_LABEL
global label_sizes, label_type_specs global label_sizes, label_type_specs
from brother_ql.labels import FormFactor from brother_ql.labels import FormFactor
DIE_CUT_LABEL = FormFactor.DIE_CUT DIE_CUT_LABEL = FormFactor.DIE_CUT
ENDLESS_LABEL = FormFactor.ENDLESS ENDLESS_LABEL = FormFactor.ENDLESS
ROUND_DIE_CUT_LABEL = FormFactor.ROUND_DIE_CUT ROUND_DIE_CUT_LABEL = FormFactor.ROUND_DIE_CUT
PTOUCH_ENDLESS_LABEL =FormFactor.PTOUCH_ENDLESS
from brother_ql.labels import LabelsManager from brother_ql.labels import LabelsManager
lm = LabelsManager() lm = LabelsManager()

View File

@@ -19,6 +19,8 @@ class FormFactor(IntEnum):
ENDLESS = 2 ENDLESS = 2
#: round die-cut labels #: round die-cut labels
ROUND_DIE_CUT = 3 ROUND_DIE_CUT = 3
#: endless P-touch labels
PTOUCH_ENDLESS = 4
class Color(IntEnum): class Color(IntEnum):
""" """
@@ -102,6 +104,7 @@ ALL_LABELS = (
Label("d12", ( 12, 12), FormFactor.ROUND_DIE_CUT, ( 142, 142), ( 94, 94), 113 , feed_margin=35), Label("d12", ( 12, 12), FormFactor.ROUND_DIE_CUT, ( 142, 142), ( 94, 94), 113 , feed_margin=35),
Label("d24", ( 24, 24), FormFactor.ROUND_DIE_CUT, ( 284, 284), ( 236, 236), 42 ), Label("d24", ( 24, 24), FormFactor.ROUND_DIE_CUT, ( 284, 284), ( 236, 236), 42 ),
Label("d58", ( 58, 58), FormFactor.ROUND_DIE_CUT, ( 688, 688), ( 618, 618), 51 ), Label("d58", ( 58, 58), FormFactor.ROUND_DIE_CUT, ( 688, 688), ( 618, 618), 51 ),
Label("pt24", ( 24, 0), FormFactor.PTOUCH_ENDLESS,( 128, 0), ( 128, 0), 0, feed_margin=14),
) )
class LabelsManager(ElementsManager): class LabelsManager(ElementsManager):

View File

@@ -55,6 +55,8 @@ ALL_MODELS = [
Model('QL-820NWB',(150, 11811), two_color=True), Model('QL-820NWB',(150, 11811), two_color=True),
Model('QL-1050', (295, 35433), number_bytes_per_row=162, additional_offset_r=44), Model('QL-1050', (295, 35433), number_bytes_per_row=162, additional_offset_r=44),
Model('QL-1060N', (295, 35433), number_bytes_per_row=162, additional_offset_r=44), Model('QL-1060N', (295, 35433), number_bytes_per_row=162, additional_offset_r=44),
Model('PT-P750W', (31, 14172), number_bytes_per_row=16),
Model('PT-P900W', (57, 28346), number_bytes_per_row=70),
] ]
class ModelsManager(ElementsManager): class ModelsManager(ElementsManager):

View File

@@ -245,13 +245,18 @@ class BrotherQLRaster(object):
while start + row_len <= frame_len: while start + row_len <= frame_len:
for i, frame in enumerate(frames): for i, frame in enumerate(frames):
row = frame[start:start+row_len] row = frame[start:start+row_len]
if second_image:
file_str.write(b'\x77\x01' if i == 0 else b'\x77\x02')
else:
file_str.write(b'\x67\x00')
if self._compression: if self._compression:
row = packbits.encode(row) row = packbits.encode(row)
file_str.write(bytes([len(row)])) translen = len(row) # number of bytes to be transmitted
if self.model.startswith('PT'):
file_str.write(b'\x47')
file_str.write(bytes([translen%256, translen//256]))
else:
if second_image:
file_str.write(b'\x77\x01' if i == 0 else b'\x77\x02')
else:
file_str.write(b'\x67\x00')
file_str.write(bytes([translen]))
file_str.write(row) file_str.write(row)
start += row_len start += row_len
self.data += file_str.getvalue() self.data += file_str.getvalue()