Spaces:
Running
Running
| from PIL import Image | |
| import gradio as gr | |
| def resize_to_same_height(img1, img2): | |
| target_height = min(img1.height, img2.height) | |
| def resize(img): | |
| aspect_ratio = img.width / img.height | |
| new_width = int(target_height * aspect_ratio) | |
| return img.resize((new_width, target_height), Image.LANCZOS) | |
| return resize(img1), resize(img2) | |
| def resize_to_same_width(img1, img2): | |
| target_width = min(img1.width, img2.width) | |
| def resize(img): | |
| aspect_ratio = img.height / img.width | |
| new_height = int(target_width * aspect_ratio) | |
| return img.resize((target_width, new_height), Image.LANCZOS) | |
| return resize(img1), resize(img2) | |
| def natural_collage(img1, img2, layout="Horizontal"): | |
| img1 = img1.convert("RGB") | |
| img2 = img2.convert("RGB") | |
| if layout == "Horizontal": | |
| img1_resized, img2_resized = resize_to_same_height(img1, img2) | |
| total_width = img1_resized.width + img2_resized.width | |
| height = img1_resized.height | |
| collage = Image.new("RGB", (total_width, height)) | |
| collage.paste(img1_resized, (0, 0)) | |
| collage.paste(img2_resized, (img1_resized.width, 0)) | |
| else: | |
| img1_resized, img2_resized = resize_to_same_width(img1, img2) | |
| total_height = img1_resized.height + img2_resized.height | |
| width = img1_resized.width | |
| collage = Image.new("RGB", (width, total_height)) | |
| collage.paste(img1_resized, (0, 0)) | |
| collage.paste(img2_resized, (0, img1_resized.height)) | |
| return collage | |
| demo = gr.Interface( | |
| fn=natural_collage, | |
| inputs=[ | |
| gr.Image(type="pil", label="First Image"), | |
| gr.Image(type="pil", label="Second Image"), | |
| gr.Radio(["Horizontal", "Vertical"], label="Layout") | |
| ], | |
| outputs=gr.Image(label="Smart Collage"), | |
| title="Mobile-style Collage App", | |
| description="Creates seamless collage like Redmi Film Roll, preserving full image, with no padding or cropping." | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |