pip install qrcode
#!/usr/bin/env python3
import argparse
import sys
from pathlib import Path
from typing import Optional
import qrcode
from qrcode.constants import ERROR_CORRECT_M
def make_qr_png(data: str, out: Path | str = "qrcode.png", *,
box_size: int = 10, border: int = 4,
error_correction: Optional[int] = None,
fill_color: str = "black", back_color: str = "white") -> Path:
"""
Простая генерация QR в PNG.
:param data: строка для кодирования
:param out: путь к файлу (png)
:param box_size: размер модуля в пикселях
:param border: ширина 'тихой зоны' в модулях
:param error_correction: уровень коррекции (по умолчанию M)
:param fill_color: цвет «чернил»
:param back_color: цвет фона
:return: путь к сохранённому файлу
"""
if not data:
raise ValueError("Пустая строка для кодирования")
ec = error_correction or ERROR_CORRECT_M
qr = qrcode.QRCode(
version=None,
error_correction=ec,
box_size=box_size,
border=border,
)
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill_color=fill_color, back_color=back_color)
out_path = Path(out)
out_path.parent.mkdir(parents=True, exist_ok=True)
img.save(out_path)
return out_path
def main(argv: list[str]) -> int:
p = argparse.ArgumentParser(description="Простой генератор QR -> PNG")
p.add_argument("data", nargs="?", help="Текст или URL (если не указан — читаем из stdin)")
p.add_argument("-o", "--out", default="qrcode.png", help="Файл вывода (png)")
p.add_argument("--box", type=int, default=10, help="Размер модуля (px)")
p.add_argument("--border", type=int, default=4, help="Тихая зона (модули)")
p.add_argument("--fg", default="black", help="Цвет кода")
p.add_argument("--bg", default="white", help="Цвет фона")
args = p.parse_args(argv)
data = args.data
if data is None:
if sys.stdin.isatty():
p.print_help()
return 1
data = sys.stdin.read().strip()
try:
out_path = make_qr_png(
data,
args.out,
box_size=args.box,
border=args.border,
fill_color=args.fg,
back_color=args.bg,
)
print(f"QR saved -> {out_path}")
return 0
except Exception as e:
print(f"Error: {e}", file=sys.stderr)
return 2
if __name__ == "__main__":
raise SystemExit(main(sys.argv[1:]))
python qr_gen.py "https://pypi.org" -o exmp.png
Где использовать:
* автоматизация рассылок и маркетинг;
* визитки, упаковка, QR на продукте;
* генерация кодов прямо в скриптах или веб-приложениях.
#python #code #soft
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43❤13🔥8🫡3