diff --git a/assets/lock.png b/assets/lock.png new file mode 100644 index 0000000000..35d0b9080e Binary files /dev/null and b/assets/lock.png differ diff --git a/assets/lock.toi b/assets/lock.toi new file mode 100644 index 0000000000..e3d557f6f5 Binary files /dev/null and b/assets/lock.toi differ diff --git a/tools/png2toi b/tools/png2toi index 23a59b82ec..915b73a796 100755 --- a/tools/png2toi +++ b/tools/png2toi @@ -5,11 +5,15 @@ import struct import zlib if len(sys.argv) < 2: - print('Usage png2toi image.png') + print('Usage png2toi image.png [mode]') sys.exit(1) ifn = sys.argv[1] +gray = False +if len(sys.argv) >= 3 and sys.argv[2] == 'g': + gray = True + if not ifn.endswith('.png'): print('Must provide PNG file') sys.exit(2) @@ -18,22 +22,40 @@ im = Image.open(ifn) w, h = im.size print('Opened %s ... %d x %d @ %s' % (ifn, w, h, im.mode)) -if not im.mode == 'RGB': - print('PNG file must use RGB mode') - sys.exit(3) +if not gray: + if not im.mode == 'RGB': + print('PNG file must use RGB mode') + sys.exit(3) +else: + if not im.mode == 'L': + print('PNG file must use grayscale mode') + sys.exit(3) + if w % 2 > 0: + print('PNG file must have width divisible by 2') + sys.exit(4) pix = im.load() ofn = '%s.toi' % ifn[:-4] with open(ofn, 'wb') as f: - f.write(bytes('TOIa', 'ascii')) + if not gray: + f.write(bytes('TOIa', 'ascii')) + else: + f.write(bytes('TOIg', 'ascii')) f.write(struct.pack('>HH', w, h)) data = bytes() - for j in range(h): - for i in range(w): - r, g, b = pix[i, j] - c = ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | ((b & 0xF8) >> 3) - data += struct.pack('>H', c) + if not gray: + for j in range(h): + for i in range(w): + r, g, b = pix[i, j] + c = ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | ((b & 0xF8) >> 3) + data += struct.pack('>H', c) + else: + for j in range(h): + for i in range(w // 2): + l1, l2 = pix[i * 2, j], pix[i * 2 + 1, j] + c = (l1 & 0xF0) | (l2 >> 4) + data += struct.pack('>B', c) z = zlib.compressobj(level=9, wbits=10) zdata = z.compress(data) + z.flush() zdata = zdata[2:-4] # strip header and checksum