From c05381a10c01037b023bfaf9531f9214a1b7b201 Mon Sep 17 00:00:00 2001 From: brockar Date: Tue, 12 Aug 2025 11:44:53 -0300 Subject: [PATCH] init --- .gitignore | 6 ++++++ qr.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++ requerimments.txt | 2 ++ wpp.png | Bin 0 -> 7690 bytes 4 files changed, 60 insertions(+) create mode 100644 qr.py create mode 100644 requerimments.txt create mode 100644 wpp.png diff --git a/.gitignore b/.gitignore index b7faf40..1b67dff 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,9 @@ +# Images +qr*.jpg +qr*.png + +## Python default gitignore from Github + # Byte-compiled / optimized / DLL files __pycache__/ *.py[codz] diff --git a/qr.py b/qr.py new file mode 100644 index 0000000..3812c44 --- /dev/null +++ b/qr.py @@ -0,0 +1,52 @@ +import qrcode +from PIL import Image, ImageDraw +import urllib.parse + +# WhatsApp URL format: https://wa.me/?text= +# Example: +phone_number = "1111111111111" # Use country code, no + or dashes +message = "Hello, this is a test message!" +encoded_message = urllib.parse.quote(message) +url = f"https://wa.me/{phone_number}?text={encoded_message}" + +# Create QR code with higher error correction to allow for logo overlay +qr = qrcode.QRCode( + version=1, + error_correction=qrcode.constants.ERROR_CORRECT_H, + box_size=10, + border=4, +) + +qr.add_data(url) +qr.make(fit=True) + +qr_img = qr.make_image(fill_color="black", back_color="white").convert("RGB") + +# Open the WhatsApp logo +try: + logo = Image.open("wpp.png") + if logo.mode in ("P", "PA"): + logo = logo.convert("RGBA") + + # Calculate the size for the logo (10% of QR) + qr_width, qr_height = qr_img.size + logo_size = min(qr_width, qr_height) // 5 + logo = logo.resize((logo_size, logo_size), Image.Resampling.LANCZOS) + logo_bg = Image.new("RGB", (logo_size + 20, logo_size + 20), "white") + if logo.mode == "RGBA": + white_bg = Image.new("RGB", logo.size, "white") + white_bg.paste(logo, mask=logo.split()[-1]) + logo = white_bg + logo_bg.paste(logo, (10, 10)) + logo_pos = ((qr_width - logo_bg.width) // 2, (qr_height - logo_bg.height) // 2) + qr_img.paste(logo_bg, logo_pos) + + print("QR code with WhatsApp logo created successfully!") + +except FileNotFoundError: + print("Warning: wpp.png not found. Creating QR code without logo.") +except Exception as e: + print(f"Error processing logo: {e}. Creating QR code without logo.") + +qr_img.save("whatsapp_qr_with_logo.png") +print("QR code saved as 'whatsapp_qr_with_logo.png'") diff --git a/requerimments.txt b/requerimments.txt new file mode 100644 index 0000000..c07f0d7 --- /dev/null +++ b/requerimments.txt @@ -0,0 +1,2 @@ +qrcode +Pillow diff --git a/wpp.png b/wpp.png new file mode 100644 index 0000000000000000000000000000000000000000..4d04291c375fda31c3b37096a3e58b7579ef2706 GIT binary patch literal 7690 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