Генератор QR-кода на Python | С логотипом и текстом
Назад  |  20.07.2026, 22:11:03  |  21
import qrcode, os
from PIL import Image, ImageDraw, ImageFont

# Генератор QR-кода
# pip install pillow qrcode[pil]

def create_qrcode(data, qr_size=10, font_size=32, padding_text=20, logo_file='', down_text='', ttf_file=''):
    qr = qrcode.QRCode(
        error_correction=qrcode.constants.ERROR_CORRECT_H,
        box_size=qr_size,
        border=1,
    )
    qr.add_data(data)
    qr.make(fit=True)
    qr_img = qr.make_image(fill_color='black', back_color='white').convert('RGB')
    
    # Логотип
    if logo_file and os.path.isfile(logo_file):
        logo = Image.open(logo_file).convert('RGBA')
        logo_size = int(qr_img.width * 0.12)
        logo.thumbnail((logo_size, logo_size), Image.Resampling.LANCZOS)

        padding = 3
        bg = Image.new(
            'RGBA',
            (logo.width + padding * 2, logo.height + padding * 2),
            'white'
        )
        bg.paste(logo, (padding, padding), logo)

        x = (qr_img.width - bg.width) // 2
        y = (qr_img.height - bg.height) // 2
        qr_img.paste(bg, (x, y), bg)
    
    if os.path.isfile(ttf_file):
        font = ImageFont.truetype(ttf_file, font_size)
    else:
        font = ImageFont.load_default()
    down_text = down_text.strip()
    if down_text:
        draw = ImageDraw.Draw(qr_img)
        bbox = draw.textbbox((0, 0), down_text, font=font)
        text_w = bbox[2] - bbox[0]
        text_h = bbox[3] - bbox[1]
        gap = 0
        result = Image.new(
            'RGB',
            (qr_img.width, qr_img.height + text_h + padding_text),
            'white'
        )
        result.paste(qr_img, (0, 0))
        draw = ImageDraw.Draw(result)
        draw.text(
            ((result.width - text_w) // 2, qr_img.height + gap),
            down_text,
            fill='black',
            font=font
        )
    else:
        result = qr_img
    result.save('qrcode_result.png')

# ----------------------------------

qr_size = 10 # Размер QR
font_size = 32 # Размер шрифта
padding_text = 20 # Отступ снизу текста
logo_file = 'dist\\logo.png' # Скачать иконки: https://www.flaticon.com/search?word=youtube
down_text = 'Сканируй меня' # Текст снизу
ttf_file = r'dist\GoogleSans-Regular.ttf' # Скачать шрифты: https://fonts.google.com

#create_qrcode('https://www.youtube.com/')
#create_qrcode('https://www.youtube.com/', qr_size, font_size, padding_text, logo_file)
create_qrcode('https://www.youtube.com/', qr_size, font_size, padding_text, logo_file, down_text, ttf_file)
Поделится:
*текст* - жирный, ~текст~ - курсивный, -текст- - зачеркнутый, _текст_ - подчеркнутый
IP-адрес: 216.73.217.134
Часовой пояс: Asia/Almaty
Подробнее

Сервисы

Страницы

Информация

Сейчас онлайн
Всего на сайте: 2
Пользователи: 0
Гости: 1
Люди: 1
Роботы: 1