From 083793e9eabf2181ea8c0634bbcbaa818389ba94 Mon Sep 17 00:00:00 2001 From: Zachary Vance Date: Mon, 31 May 2021 19:25:26 -0700 Subject: [PATCH] Improve written directions, layout directions correctly --- example.png | Bin 25848 -> 23121 bytes qr-backup | 57 ++++++++++++++++++++++++++++++++++------------------ 2 files changed, 37 insertions(+), 20 deletions(-) diff --git a/example.png b/example.png index 58aa9e92b67ad5965c3801fd36a4b97f5dc7881a..6b605a4235c8da456144a79983378be120a7031d 100644 GIT binary patch literal 23121 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 U{-jRn@4cd(j=0(1v-OGl4bZ%oY5)KL literal 25848 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 R$G?8kL{&)(U5Ydd{5MHLG&=wQ diff --git a/qr-backup b/qr-backup index daa88f9..75f87c8 100755 --- a/qr-backup +++ b/qr-backup @@ -8,7 +8,7 @@ Requirements to make the PDF: python 'qrcode' library, imagemagick, img2pdf Requirements to restore from the PDF: zbar (only) """ import PIL, PIL.Image, PIL.ImageDraw, PIL.ImageFont, PIL.ImageOps -import base64, gzip, hashlib, logging, math, os, subprocess, sys, qrcode +import base64, datetime, gzip, hashlib, logging, math, os, subprocess, sys, qrcode assert sys.version_info >= (3,6), "Python 3.6 is required. Submit a patch removing f-strings to fix it, sucka!" HELP='''Usage: qr-codes.py [OPTIONS] FILE @@ -123,7 +123,7 @@ def show_help(status=1): print(HELP) sys.exit(status) -def add_label(image, text, side="bottom", max_fontsize=24): +def add_label(image, text, side="bottom", max_fontsize=24, label=None): """ Add a label. The fontsize is max_fontsize if possible, otherwise it's shrunk down. The label is aligned to the bounding box of the image (lines up with margins). @@ -138,7 +138,10 @@ def add_label(image, text, side="bottom", max_fontsize=24): max_width = right-left # Generate a label that fits. The fontsize will be reduced if needed. No word wrap is performed. - label = generate_label(text, max_width=image.size[0], max_fontsize=max_fontsize) + if label is None: + label = generate_label(text, max_width=image.size[0], max_fontsize=max_fontsize) + else: + assert label.size[0] <= max_width, "Premade label is too wide" label_bbox = PIL.ImageOps.invert(image.copy().convert("L")).getbbox() # Layout @@ -154,7 +157,7 @@ def add_label(image, text, side="bottom", max_fontsize=24): assert False, "Unknown side for label: {}".format(side) return labeled -def generate_label(text, max_width, max_fontsize=24, margin=0): +def generate_label(text, max_width, max_fontsize=24): # to do, maybe some fancy word wrap test_im = PIL.Image.new(mode="1", size=(1,1), color=1) test_draw = PIL.ImageDraw.Draw(test_im) @@ -277,6 +280,7 @@ if __name__ == "__main__": restore_file = "file" nice_cmd = ' '.join([x for x in ["qr-backup", "--qr-version", str(qr_version), "--dpi", str(dpi), "--scale", str(scale), "--error-correction", "LMQH"[error_correction], "--page", str(page_w_points), str(page_h_points), '--compress' if use_compression else '--no-compress', '--base64' if use_base64 else None, "--filename", restore_file] if x is not None]) + backup_date = datetime.date.today().strftime("%Y-%m-%d") # open the file (or stdin, if "-" is passed as the file) if file_path == "-": @@ -312,6 +316,28 @@ if __name__ == "__main__": # Generate QR codes code_digits, qrs = qr_codes(content, error_correction=error_correction, version=qr_version, scale=scale) + # Instructions depend on the command line option + HOWTO = f'This is a {backup_date} paper backup of a computer file called: {restore_file}' + HOWTO += '\nTo restore this file from the command line in Linux:' + HOWTO += f'\n Step 1 (webcam option): zbarcam --raw | tee -a /tmp/qrs | cut -c1-{code_digits} # Scan each code at least once in any order' + HOWTO += f'\n Step 1 (scanner option): zbarimg -q --raw *.png >>/tmp/qrs' + HOWTO += f'\n Step 2 (restore): sort -u /tmp/qrs | cut -c{code_digits+1}-' + if use_base64: + HOWTO += ' | base64 -d' + else: + HOWTO += ' | tr -d "\\n" | tr "\\b" "\\n"' # Update if NEWLINE_ESCAPE is updated. + if use_compression: + HOWTO += ' | gunzip' + HOWTO += f' >{restore_file}' + HOWTO += f'\nStep 3 (verify): sha256sum {restore_file} # {sha256sum}' + HOWTO += f'\nThis backup was generated with: {nice_cmd}' + + # Calculate QR padding produced by qrcode module + example_qr = qrs[0].make_image().copy() + qr_bbox = PIL.ImageOps.invert(example_qr.copy().convert("L")).getbbox() + qr_lpad, qr_tpad, qr_rpad, qr_bpad = qr_bbox[0], qr_bbox[1], example_qr.size[0]-qr_bbox[2], example_qr.size[1]-qr_bbox[3] + qr_hpad, qr_vpad = qr_lpad + qr_rpad, qr_tpad + qr_bpad + # Output QR codes with labels to Pillow Image objects labeled = [] for i, qr in enumerate(qrs): @@ -327,8 +353,11 @@ if __name__ == "__main__": page_w_pixel, page_h_pixel = math.floor(page_w_points/72.0*dpi), math.floor(page_h_points/72.0*dpi) # 1 "dot" = 1 pixel. !!important note, DPI is not used yet, which is probably some config bug in Pillow logging.info(f"Page is: {page_w_pixel}x{page_h_pixel}px") + + howto_label = generate_label(HOWTO, page_w_pixel - qr_hpad) + howto_height = howto_label.size[1] - page_w_qr, page_h_qr = math.floor((page_w_pixel-2) // qr_w_pixel), math.floor((page_h_pixel-2) // qr_h_pixel) + page_w_qr, page_h_qr = math.floor((page_w_pixel-2) // qr_w_pixel), math.floor((page_h_pixel-2-howto_height) // qr_h_pixel) qr_per_page = page_w_qr * page_h_qr if qr_per_page == 0: logging.error("Not even 1 QR fits on the given page. Forcing output anyway...") @@ -351,24 +380,12 @@ if __name__ == "__main__": page = PIL.Image.new(mode="1", size=(page_w_pixel, page_h_pixel), color=1) page_rows = rows[page_start:page_start+page_h_qr] page_qrs = v_merge(page_rows) - - HOWTO = f'(page {page_num+1}/{num_pages}) generated using: {nice_cmd}' - HOWTO += f'\nTo restore {restore_file}, run in Linux:' - HOWTO += f'\nStep 1 (webcam option): zbarcam --raw | tee -a /tmp/qrs | cut -c1-{code_digits} # Scan each code at least once in any order' - HOWTO += f'\nStep 1 (scanner option): zbarimg -q --raw *.png >>/tmp/qrs' - HOWTO += f'\nStep 2 (restore): sort -u /tmp/qrs | cut -c{code_digits+1}-' - if use_base64: - HOWTO += ' | base64 -d' - else: - HOWTO += ' | tr -d "\\n" | tr "\\b" "\\n"' # Update if NEWLINE_ESCAPE is updated. - if use_compression: - HOWTO += ' | gunzip' - HOWTO += f' >{restore_file}' - HOWTO += f'\nStep 3 (verify): sha256sum {restore_file} # {sha256sum}' - + page_complete = add_label(page_qrs, HOWTO, side="top", max_fontsize=24) page_draw = PIL.ImageDraw.Draw(page) page_draw.rectangle(((0,0), (page_w_pixel-1, page_h_pixel-1)), outline=0, fill=1, width=1) # Rectangle for debugging print cutoff, and to look nice. + page_num = generate_label("page {}/{}".format(page_num+1, num_pages), max_width=example_qr.size[0]/2) + page.paste(page_num, (page.size[0]-page_num.size[0]-1-qr_rpad, page.size[1]-page_num.size[1]-11)) page.paste(page_complete, (1,1)) pages.append(page)