import gradio as gr import requests import qrcode import io from PIL import Image import os # Get the Hugging Face API token from the environment variable hf_token = os.environ.get("hf_token") # Function to generate a QR code with transparent fill color def generate_qr_image(url, image_size): qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=60, # Set a default box size border=0.5, # Set a default border size ) qr.add_data(url) qr.make(fit=True) qr_img = qr.make_image(fill_color="black", back_color="white").convert("RGBA") # Convert black color pixels to transparent data = qr_img.getdata() new_data = [] for item in data: if item[:3] == (0, 0, 0): # Change black pixels to transparent new_data.append((0, 0, 0, 0)) else: new_data.append(item) qr_img.putdata(new_data) qr_img = qr_img.resize(image_size) return qr_img # Function to query the image from the Hugging Face API def query_image(text): API_URL = "https://api-inference.huggingface.co/models/goofyai/3d_render_style_xl" headers = {"Authorization": f"Bearer {hf_token}"} response = requests.post(API_URL, headers=headers, json={"inputs": text}) return response.content # Gradio app function def generate_image(url, text): # Generate image from Hugging Face API image_bytes = query_image(text) api_image = Image.open(io.BytesIO(image_bytes)) # Generate QR code image qr_image = generate_qr_image(url, api_image.size) # Create a blank image with transparency final_image = Image.new('RGBA', api_image.size, (255, 255, 255, 0)) # Position the QR code in the image qr_position = ((final_image.width - qr_image.width) // 2, (final_image.height - qr_image.height) // 2) final_image.paste(qr_image, qr_position, qr_image) # Composite the API image and the final image with the QR code final_image = Image.alpha_composite(api_image.convert("RGBA"), final_image) return final_image # Inputs and outputs for Gradio interface inputs = [ gr.Textbox(lines=1, label="URL"), gr.Textbox(lines=2, label="Prompt for Image"), ] output = gr.Image(type="pil", label="Generated Image") examples = [ ["https://example.com/1", "A colorful sunset over the ocean"], ["https://example.com/2", "A cute puppy playing in the park"], ["https://example.com/3", "A green mountains landscape"] ] # Gradio app interface gr.Interface( fn=generate_image, inputs=inputs, outputs=output, title="QR Code Image Generator ✨", description="Generate an image with a transparent QR code linked to the input URL and an image from the Dalle-3 API", examples=examples, theme="soft", cache_examples=False # Disable example caching ).launch()