Spaces:
Sleeping
Sleeping
import qrcode | |
import gradio as gr | |
from io import BytesIO | |
from PIL import Image, ImageDraw, ImageFont | |
def generate_vcard(name, contact_number_work, contact_number_mobile, email, designation, website, work_address): | |
vcard = f""" | |
BEGIN:VCARD | |
VERSION:3.0 | |
FN:{name} | |
TEL;TYPE=WORK,VOICE:{contact_number_work} | |
TEL;TYPE=CELL:{contact_number_mobile} | |
EMAIL;TYPE=INTERNET:{email} | |
TITLE:{designation} | |
URL:{website} | |
ADR;TYPE=WORK:;;{work_address} | |
END:VCARD | |
""" | |
qr = qrcode.QRCode( | |
version=1, | |
error_correction=qrcode.constants.ERROR_CORRECT_L, | |
box_size=10, | |
border=4, | |
) | |
qr.add_data(vcard) | |
qr.make(fit=True) | |
img = qr.make_image(fill_color="black", back_color="white") | |
buffer = BytesIO() | |
img.save(buffer, format="PNG") | |
buffer.seek(0) | |
return Image.open(buffer) | |
def create_business_card(name, contact_number_work, contact_number_mobile, email, designation, website, work_address, user_image_path): | |
qr_code_img = generate_vcard(name, contact_number_work, contact_number_mobile, email, designation, website, work_address) | |
card_width, card_height = 600, 300 | |
card = Image.new('RGB', (card_width, card_height), 'white') | |
draw = ImageDraw.Draw(card) | |
try: | |
# Load and resize the user image | |
user_image = Image.open(user_image_path).convert("RGBA") | |
user_image = user_image.resize((150, 150), Image.ANTIALIAS) | |
card.paste(user_image, (20, 75), user_image) | |
except Exception as e: | |
print(f"Error loading image: {e}") | |
# Paste QR code on the card | |
qr_code_img = qr_code_img.resize((100, 100), Image.ANTIALIAS) | |
card.paste(qr_code_img, (480, 20)) | |
# Add text to the business card | |
draw.text((190, 50), f"Name: {name}", fill="black") | |
draw.text((190, 70), f"Work Contact Number: {contact_number_work}", fill="black") | |
draw.text((190, 90), f"Mobile Contact Number: {contact_number_mobile}", fill="black") | |
draw.text((190, 110), f"Work Email: {email}", fill="black") | |
draw.text((190, 130), f"Designation: {designation}", fill="black") | |
draw.text((190, 150), f"Work Website: {website}", fill="black") | |
draw.text((190, 170), f"Work Address: {work_address}", fill="black") | |
buffer = BytesIO() | |
card.save(buffer, format="PNG") | |
buffer.seek(0) | |
return Image.open(buffer) | |
iface = gr.Interface( | |
fn=create_business_card, | |
inputs=[ | |
gr.Textbox(label="Name"), | |
gr.Textbox(label="Work Contact Number"), | |
gr.Textbox(label="Mobile Contact Number"), | |
gr.Textbox(label="Work Email"), | |
gr.Textbox(label="Designation"), | |
gr.Textbox(label="Work Website"), | |
gr.Textbox(label="Work Address"), | |
gr.Image(type="filepath", label="Upload Image (optional)") | |
], | |
outputs=gr.Image(type="pil"), | |
title="NMZH-QR-Code & Business Card Generator", | |
description="Fill in your details, upload an image, and generate a business card with a QR code containing your information." | |
) | |
iface.launch() | |