# -*- coding: utf-8 -*- """app code for remove.ipynb Automatically generated by Colab. Original file is located at https://colab.research.google.com/drive/1GoN403JoCKCLavITeCYoMzFXKctQ83en """ import gradio as gr from PIL import Image import numpy as np def sanitize_hex_color(color): """ Sanitize and validate hex color input. """ if color.startswith('rgb'): rgb_vals = color.strip('rgb()').split(',') if len(rgb_vals) == 3: try: r, g, b = map(int, rgb_vals) return f'#{r:02x}{g:02x}{b:02x}'.upper() except ValueError: raise ValueError("Invalid RGB color format") color = color.strip().upper() color = color.lstrip('#') if len(color) != 6: raise ValueError("Invalid hex color. Use '#RRGGBB' format") try: int(color, 16) except ValueError: raise ValueError("Invalid hexadecimal color") return f'#{color}' def remove_background_color(image, hex_color, tolerance): """ Remove pixels of a specified hex color from an image. """ if isinstance(image, np.ndarray): image = Image.fromarray(image) image = image.convert("RGBA") try: hex_color = sanitize_hex_color(hex_color) target_color = tuple(int(hex_color.lstrip('#')[i:i+2], 16) for i in (0, 2, 4)) except ValueError as e: raise ValueError(str(e)) data = np.array(image) mask = np.all(np.abs(data[:,:,:3] - target_color) <= tolerance, axis=2) alpha_channel = np.where(mask, 0, 255) data[:, :, 3] = alpha_channel return data def color_remover_interface(image, hex_color, tolerance, _=None): """ Gradio interface function for color removal. """ try: if image is None: raise ValueError("Please upload an image") hex_color = sanitize_hex_color(hex_color) processed_image = remove_background_color(image, hex_color, tolerance) return processed_image # Return only the processed image except Exception as e: gr.Warning(str(e)) return image # Return original image in case of error # Deploy using Gradio Client iface = gr.Interface( fn=color_remover_interface, inputs=[ gr.Image(type="numpy", label="Upload Image"), gr.Textbox(label="Hex Color to Remove", placeholder="#FFFFFF"), gr.Slider(minimum=0, maximum=255, value=40, step=1, label="Color Tolerance"), gr.ColorPicker(label="Pick a Color") # Color picker remains ], outputs=[ gr.Image(type="numpy", label="Processed Image") # Removed output textbox ], title="Image Colour Remover", description=""" Remove a specific colour from your image with precision! ### How to Use: 1. Upload an image 2. Choose the colour to remove 3. Adjust the colour tolerance (higher numbers will remove similair colours to hex code entered) 4. See the magic happen! """, ) iface.launch(share=True) # Launch the interface with a shareable link