Spaces:
Sleeping
Sleeping
import gradio as gr | |
import cv2 | |
import numpy as np | |
from PIL import Image | |
# Function to add watermark (logo or text) to the image | |
def add_watermark(image, watermark_type, text=None, logo=None, opacity=1.0): | |
image_logow = image.resize((500, 300)) | |
image_logow = np.array(image_logow.convert('RGB')) | |
h_image, w_image, _ = image_logow.shape | |
if watermark_type == "Logo" and logo is not None: | |
logo = logo.resize((int(w_image * 0.3), int(h_image * 0.1))) # Resize logo to 30% of the image width | |
logo = np.array(logo.convert('RGB')) | |
h_logo, w_logo, _ = logo.shape | |
# Center placement for logo | |
center_y = int(h_image / 2) | |
center_x = int(w_image / 2) | |
top_y = center_y - int(h_logo / 2) | |
left_x = center_x - int(w_logo / 2) | |
bottom_y = top_y + h_logo | |
right_x = left_x + w_logo | |
# Get ROI and add logo with opacity | |
roi = image_logow[top_y: bottom_y, left_x: right_x] | |
result = cv2.addWeighted(roi, 1, logo, opacity, 0) | |
# Replace the ROI on the image | |
image_logow[top_y: bottom_y, left_x: right_x] = result | |
return Image.fromarray(image_logow) | |
elif watermark_type == "Text" and text: | |
# Add text watermark at the bottom-right corner | |
cv2.putText(image_logow, text=text, org=(w_image - 100, h_image - 10), fontFace=cv2.FONT_HERSHEY_COMPLEX, | |
fontScale=0.6, color=(0, 0, 255), thickness=2, lineType=cv2.LINE_AA) | |
return Image.fromarray(image_logow) | |
return image # Return original image if no watermark added | |
# Create the Gradio interface | |
def gradio_interface(): | |
with gr.Blocks() as demo: | |
gr.Markdown("## Image Watermarking App") | |
gr.Markdown(""" | |
### Add Watermarks to Your Images | |
This application allows you to add custom watermarks to your images. You can either add a **Text Watermark** or use a **Logo Watermark**. | |
**Steps**: | |
1. Upload your image. | |
2. If using a logo watermark, upload your logo. | |
3. Select the type of watermark (text or logo). | |
4. Customize the watermark by adding text or adjusting logo opacity. | |
5. See the output image with the watermark applied. | |
""") | |
# Upload original image and logo | |
image_input = gr.Image(label="Upload Image", type="pil") # Upload original image | |
logo_input = gr.Image(label="Upload Logo (optional, for Logo Watermark)", type="pil") # Upload logo (optional) | |
# Select watermark type and adjust parameters | |
watermark_type = gr.Radio(["Text", "Logo"], label="Watermark Type", value="Text") | |
text_input = gr.Textbox(label="Watermark Text (for Text Watermark)", value="MyArt.Inc", placeholder="Enter text for text watermark") | |
opacity_slider = gr.Slider(0.1, 1.0, step=0.1, label="Logo Opacity (for Logo Watermark)", value=1.0) | |
# Output watermarked image | |
output_image = gr.Image(label="Watermarked Image") | |
# Function to update the watermark based on user input | |
def update_watermark(image, watermark_type, text, logo, opacity): | |
if watermark_type == "Logo" and logo is None: | |
return "Please upload a logo for the logo watermark." | |
return add_watermark(image, watermark_type, text, logo, opacity) | |
# Link inputs to output | |
inputs = [image_input, watermark_type, text_input, logo_input, opacity_slider] | |
gr.Button("Apply Watermark").click(update_watermark, inputs, output_image) | |
demo.launch() | |
# Run the interface | |
gradio_interface() | |