Kvikontent's picture
Update app.py
e08f6b5 verified
raw
history blame
2.45 kB
import gradio as gr
import requests
import qrcode
import io
from PIL import Image, ImageDraw
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 transparency
def generate_qr_image(url):
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(url)
qr.make(fit=True)
qr_img = qr.make_image(fill_color="black", back_color="white")
qr_img_rgba = qr_img.convert("RGBA")
# Add transparency to the QR code
qr_data = qr_img_rgba.getdata()
new_qr_data = []
for item in qr_data:
if item[0] == 0 and item[1] == 0 and item[2] == 0:
new_qr_data.append((0, 0, 0, 0))
else:
new_qr_data.append(item)
qr_img_rgba.putdata(new_qr_data)
return qr_img_rgba
# Function to query the image from the Hugging Face API
def query_image(text):
API_URL = "https://api-inference.huggingface.co/models/stablediffusionapi/realistic-vision-v51"
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 with transparency
qr_image = generate_qr_image(url)
# Resize the QR code to fit into the generated image
qr_width, qr_height = qr_image.size
api_image_width, api_image_height = api_image.size
qr_image = qr_image.resize((int(qr_width * 0.5), int(qr_height * 0.5)))
# Blend the two images together
final_image = api_image.copy()
final_image.paste(qr_image, (api_image_width - qr_image.width, api_image_height - qr_image.height), qr_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")
# Gradio app interface
gr.Interface(fn=generate_image, inputs=inputs, outputs=output, title="QR Code Image Generator", description="Generate an image with a QR code linked to the input URL and an image from the Hugging Face API", theme="soft").launch()