Other tools & libraries for encoding and decoding QR codes
==========================================================

- PyQRCode (https://pypi.org/project/PyQRCode/): encode only, pure Python.
  SVG images generated by it are very nice and concise (a singe Path that
  draws the QR code using 1-pixel horizontal lines scaled using a transform).
  Can create terminal-based QR codes but these are big variants only and use
  ANSI escape codes to specify background colors for whitespace.  Has a helpful
  .text() method that returns a string with a bunch of "001100" for writing
  your own encoder in whatever format you want.  If I ever decide to make
  qr2txt capable of generating instead of just presenting pre-generated QR
  codes, I'll probably base it on this library.

- Python-QRCode (https://pypi.org/project/qrcode/): pure Python, generator
  only.  SVGs use a bunch of rects, but there's a non-standard option to use a
  path (that fills, rather than strokes).  Can create terminal-based QR codes
  using Unicode half-block characters.  Has a command-line tool named ``qr``::

    $ echo hello | qr
    █████████████████████████████
    █████████████████████████████
    ████ ▄▄▄▄▄ █▀ █  █ ▄▄▄▄▄ ████
    ████ █   █ █  █▄ █ █   █ ████
    ████ █▄▄▄█ ███ ▄ █ █▄▄▄█ ████
    ████▄▄▄▄▄▄▄█ ▀▄▀ █▄▄▄▄▄▄▄████
    ████ █▀█▀█▄█ ▄ █ ▄ █▀  ▄█████
    █████  ▄▀█▄▀▀▄ ▄█▄██   ▄█████
    ████▄██▄██▄█ ▀█▀▀▀ ██ █▄▀████
    ████ ▄▄▄▄▄ ██▀▀▀ ▀▄▄█▀ ▄█████
    ████ █   █ ██▄▀█ ██▄▄▀█▄█████
    ████ █▄▄▄█ ██ ████▄    ▄▄████
    ████▄▄▄▄▄▄▄█▄██▄█▄██▄██▄█████
    █████████████████████████████
    ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀

  The output from this tool was the inspiration for my qr2text.  I now see that
  it uses non-breaking spaces instead of regular spaces, how interesting!  Also,
  it seems to be using ANSI color sequences of some sort, because the white is
  brighter than what I get with qr2text?  Looking at the source: yes, it forces
  256-color terminal codes 255 (almost white) for foreground and 232 (almost
  black) for background.  I wonder why?  231 would be pure white, and 16 would
  be pure black...

- ZBar (http://zbar.sourceforge.net/): C, but Python bindings existi
  (https://pypi.org/project/pyzbar/), can encode and decode various 1D and 2D
  barcode formats, including QR.

  This is probably the most realistic choice for decoding QR codes.

- OpenCV has a QR code recognizer/decoder, and also Python bindings
  (https://pypi.org/project/opencv-python-headless/).

- qrcodeutil (https://pypi.org/project/qrcodeutil/) has a pure-Python QR
  decoder, which is reportedly slow.  Depends on Numpy, Pillow, and a few other
  libraries, so not 100% pure-Python.  Seems unfinished?

- qr-codec (https://pypi.org/project/qr-codec/) has a C++ extension module for
  decoding QR codes.

- deqr (https://pypi.org/project/deqr/) has a Cython wrapper around two
  backends (quirc and qrdec).
