| import gradio as gr |
| from PIL import Image |
| import rembg |
| import io |
|
|
| |
| def process_images(images, remove_bg): |
| |
| final_collage = Image.new("RGBA", (2480, 3508), (255, 255, 255, 0)) |
|
|
| |
| x_offset = 0 |
| y_offset = 0 |
| for image in images: |
| img = Image.open(image) |
|
|
| |
| if remove_bg: |
| img = Image.open(io.BytesIO(rembg.remove(image.read()))) |
| |
| |
| img.thumbnail((500, 500)) |
| |
| |
| final_collage.paste(img, (x_offset, y_offset), img if img.mode == 'RGBA' else None) |
| |
| |
| y_offset += img.height |
| if y_offset + img.height > final_collage.height: |
| y_offset = 0 |
| x_offset += img.width |
|
|
| |
| if x_offset + img.width > final_collage.width: |
| break |
|
|
| return final_collage |
|
|
| |
| with gr.Blocks() as demo: |
| gr.Markdown("## Sticker Collage Creator (A4)") |
|
|
| |
| images = gr.Files(label="Upload your images", type="file", file_count="multiple", file_types=["image"]) |
| |
| |
| remove_bg = gr.Checkbox(label="Remove background?", value=True) |
| |
| |
| output = gr.Image(label="Collage", type="pil") |
|
|
| |
| submit = gr.Button("Create Collage") |
| submit.click(process_images, inputs=[images, remove_bg], outputs=output) |
|
|
| demo.launch() |