1+ #!/usr/bin/env python
2+ import rmqrcode
3+ from rmqrcode import rMQR
4+ from rmqrcode import QRImage
5+ from rmqrcode import ErrorCorrectionLevel
6+ from rmqrcode import FitStrategy
7+ from rmqrcode import DataTooLongError
8+ from rmqrcode import IllegalVersionError
9+
10+ import argparse
11+ import sys
12+
13+
14+ def _show_error_and_exit (msg ):
15+ print (msg , file = sys .stderr )
16+ sys .exit (1 )
17+
18+
19+ def _make_qr (data , ecc , version , fit_strategy ):
20+ if version == None :
21+ qr = rMQR .fit (data , ecc = ecc , fit_strategy = fit_strategy )
22+ else :
23+ try :
24+ qr = rMQR (version , ecc )
25+ except IllegalVersionError :
26+ _show_error_and_exit ("Error: Illegal version." )
27+ qr .make (data )
28+
29+ return qr
30+
31+
32+
33+ def _save_image (qr , output ):
34+ image = QRImage (qr )
35+ try :
36+ image .save (output )
37+ except FileNotFoundError as e :
38+ _show_error_and_exit (f"Error: { e } " )
39+
40+
41+ def main ():
42+ parser = _init_argparser ()
43+ args = parser .parse_args ()
44+
45+ if args .ecc == 'M' :
46+ ecc = ErrorCorrectionLevel .M
47+ elif args .ecc == 'H' :
48+ ecc = ErrorCorrectionLevel .H
49+
50+ fit_strategy = FitStrategy .BALANCED
51+ if args .fit_strategy == 'min_width' :
52+ fit_strategy = FitStrategy .MINIMIZE_WIDTH
53+ elif args .fit_strategy == 'min_height' :
54+ fit_strategy = FitStrategy .MINIMIZE_HEIGHT
55+
56+ qr = _make_qr (
57+ args .DATA ,
58+ ecc = ecc ,
59+ version = args .version ,
60+ fit_strategy = fit_strategy
61+ )
62+
63+ _save_image (qr , args .OUTPUT )
64+
65+ print (f"{ qr } " )
66+
67+
68+ def _init_argparser ():
69+ parser = argparse .ArgumentParser ()
70+ parser .add_argument ('DATA' , type = str , help = "Data to encode." )
71+ parser .add_argument ('OUTPUT' , type = str , help = "Output file path" )
72+ parser .add_argument ('--ecc' , help = "Error correction level. (default: M)" , type = str , choices = ["M" , "H" ], default = 'M' )
73+ parser .add_argument ('--version' , help = "rMQR Code version like 'R11x139'." )
74+ parser .add_argument ('--fit-strategy' , choices = ["min_width" , "min_height" , "balanced" ], help = "Strategy how to determine rMQR Code size." , dest = "fit_strategy" )
75+ return parser
76+
77+
78+ if __name__ == "__main__" :
79+ main ()
0 commit comments