Spaces:
Running
Running
| import gradio as gr | |
| from rembg import remove | |
| from PIL import ImageOps, ImageDraw | |
| def process_image(foreImg, flip, backImg, left, top, method, hscale, vscale, width, height, isLoc): | |
| if foreImg is None: | |
| return None | |
| imwidth, imheight = foreImg.size | |
| if not backImg is None: | |
| if method == 'horizontal scale factor': | |
| bgwidth, _ = backImg.size | |
| scale = bgwidth * hscale / imwidth | |
| imwidth = int(imwidth * scale) | |
| imheight = int(imheight * scale) | |
| elif method == 'vertical scale factor': | |
| _, bgheight = backImg.size | |
| scale = bgheight * vscale / imheight | |
| imwidth = int(imwidth * scale) | |
| imheight = int(imheight * scale) | |
| else: | |
| if width > 0: | |
| imwidth = width | |
| if height > 0: | |
| imheight = height | |
| if isLoc: | |
| if backImg is None: | |
| return None | |
| draw = ImageDraw.Draw(backImg) | |
| draw.rectangle([(left, top), (imwidth + left, imheight + top)], outline=(255, 0, 0), width=4) | |
| return backImg | |
| image = remove(foreImg) | |
| if flip: | |
| image = ImageOps.mirror(image) | |
| image = image.resize((imwidth, imheight)) | |
| if backImg is None: | |
| return image | |
| backImg.paste(image, (left, top), image) | |
| return backImg | |
| app = gr.Interface( | |
| title='Combine Images', | |
| fn=process_image, | |
| inputs=[ | |
| gr.Image(label='foreground', type='pil'), | |
| gr.Checkbox(label='flip left and right'), | |
| gr.Image(label='background', type='pil'), | |
| gr.Slider(maximum=4000, step=1, label='left'), | |
| gr.Slider(maximum=4000, step=1, label='top'), | |
| gr.Radio(['horizontal scale factor', 'vertical scale factor', 'size (width and height)'], label='size specification method', value='horizontal scale factor'), | |
| gr.Slider(minimum=0.01, maximum=1.0, step=0.01, label='horizontal scale factor', value=0.5), | |
| gr.Slider(minimum=0.01, maximum=1.0, step=0.01, label='vertical scale factor', value=0.5), | |
| gr.Slider(maximum=4000, step=1, label='width'), | |
| gr.Slider(maximum=4000, step=1, label='height'), | |
| gr.Checkbox(label='check location only'), | |
| ], | |
| outputs='image', | |
| allow_flagging='never', | |
| concurrency_limit=20, | |
| examples=[['examples/foreground.jpg', False, 'examples/background.jpg', 720, 540, 'size (width and height)', 0.5, 0.5, 256, 256, False]], | |
| #cache_examples=False | |
| ) | |
| app.launch() | |