Назад |
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)