#!/usr/bin/env python """Command‑line interface for QR-ASCII-QR.""" import argparse import os from qr_ascii_qr import generate_matrix, render_to_png, render_to_svg def main(): parser = argparse.ArgumentParser(description="Generate an ASCII-character QR code.") parser.add_argument("-d", "--data", required=True, help="Data to encode") parser.add_argument("-o", "--out", required=True, help="Output file prefix (.png or .svg)") parser.add_argument("-s", "--cell-size", type=int, default=20, help="Pixel size of each cell (PNG only)") parser.add_argument("-c", "--charset", default="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", help="Characters to use") parser.add_argument("-e", "--ec-level", default="H", choices=list("LMQH"), help="Error correction level") parser.add_argument("--font", help="TrueType font path (PNG only)") parser.add_argument("--logo", help="Logo image path (PNG only)") parser.add_argument("--svg", action="store_true", help="Force SVG output") parser.add_argument("--three-types", action="store_true", help="Generate three types of QR codes") parser.add_argument("--text-only", action="store_true", help="Generate only text QR code") args = parser.parse_args() matrix = generate_matrix(args.data, args.ec_level) if args.text_only: # 只生成纯文字二维码 ext = args.out.lower().split(".")[-1] if args.svg or ext == "svg": render_to_svg(matrix, args.out, cell_size=args.cell_size, charset=args.charset) else: render_to_png( matrix, args.out, cell_size=args.cell_size, charset=args.charset, font_path=args.font, logo_path=args.logo, render_mode="text" ) print(f"已保存纯文字二维码: {args.out}") elif args.three_types: # 生成三种类型的图片 base_name, ext = os.path.splitext(args.out) if args.svg or ext.lower() == ".svg": # SVG模式 render_to_svg(matrix, f"{base_name}_combined{ext}", cell_size=args.cell_size, charset=args.charset) print(f"Saved {base_name}_combined{ext}") else: # PNG模式 - 生成三张图片 # 1. 纯黑块二维码 solid_file = f"{base_name}_solid{ext}" render_to_png( matrix, solid_file, cell_size=args.cell_size, charset=args.charset, font_path=args.font, logo_path=args.logo, render_mode="solid" ) print(f"已保存纯黑块二维码: {solid_file}") # 2. 纯文字二维码 text_file = f"{base_name}_text{ext}" render_to_png( matrix, text_file, cell_size=args.cell_size, charset=args.charset, font_path=args.font, logo_path=args.logo, render_mode="text" ) print(f"已保存纯文字二维码: {text_file}") # 3. 结合二维码(黑色背景+文字) combined_file = f"{base_name}_combined{ext}" render_to_png( matrix, combined_file, cell_size=args.cell_size, charset=args.charset, font_path=args.font, logo_path=args.logo, render_mode="combined" ) print(f"已保存结合二维码: {combined_file}") else: # 原有的单个文件生成逻辑 ext = args.out.lower().split(".")[-1] if args.svg or ext == "svg": render_to_svg(matrix, args.out, cell_size=args.cell_size, charset=args.charset) else: render_to_png( matrix, args.out, cell_size=args.cell_size, charset=args.charset, font_path=args.font, logo_path=args.logo, ) print(f"Saved {args.out}") if __name__ == "__main__": main()