Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1,55 +1,72 @@
|
|
1 |
import gradio as gr
|
2 |
-
import cv2
|
3 |
import numpy as np
|
4 |
-
from PIL import Image
|
5 |
|
6 |
-
|
7 |
-
|
8 |
-
|
|
|
9 |
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
return design_image, target_image
|
15 |
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
|
20 |
-
#
|
21 |
-
|
22 |
-
y = drag_info['y']
|
23 |
-
scale = drag_info['scale']
|
24 |
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
|
|
|
|
|
|
30 |
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
|
|
|
|
35 |
|
36 |
-
|
37 |
|
38 |
-
#
|
39 |
-
|
40 |
-
|
|
|
|
|
|
|
|
|
|
|
41 |
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
load_btn = gr.Button("Load Images")
|
47 |
-
with gr.Column():
|
48 |
-
drag_info = gr.JSON(label="Drag Info", value={"x": 0, "y": 0, "scale": 1.0})
|
49 |
-
drag_area = gr.Canvas(tool="drag", label="Drag Design Here", width=600, height=400)
|
50 |
-
overlay_result = gr.Image(label="Overlay Result")
|
51 |
|
52 |
-
|
53 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
|
55 |
editor.launch()
|
|
|
1 |
import gradio as gr
|
|
|
2 |
import numpy as np
|
3 |
+
from PIL import Image
|
4 |
|
5 |
+
def overlay_images(x, y, scale, design_img, target_img):
|
6 |
+
# Convert inputs to PIL images
|
7 |
+
design_image = Image.fromarray(design_img)
|
8 |
+
target_image = Image.fromarray(target_img)
|
9 |
|
10 |
+
# Resize the design image based on scale
|
11 |
+
design_image = design_image.resize(
|
12 |
+
(int(design_image.width * scale), int(design_image.height * scale)), Image.ANTIALIAS
|
13 |
+
)
|
|
|
14 |
|
15 |
+
# Create a transparent overlay
|
16 |
+
overlay = Image.new('RGBA', target_image.size, (255, 255, 255, 0))
|
17 |
+
overlay.paste(design_image, (x, y), design_image)
|
18 |
|
19 |
+
# Combine overlay with target image
|
20 |
+
combined = Image.alpha_composite(target_image.convert('RGBA'), overlay)
|
|
|
|
|
21 |
|
22 |
+
return np.array(combined)
|
23 |
+
|
24 |
+
with gr.Blocks() as editor:
|
25 |
+
gr.Markdown("## Drag-and-Drop Image Editor with Resizing")
|
26 |
+
|
27 |
+
with gr.Row():
|
28 |
+
design_img = gr.Image(label="Design Image", type="numpy", tool=None)
|
29 |
+
target_img = gr.Image(label="Target Image", type="numpy", tool=None)
|
30 |
|
31 |
+
overlay_result = gr.Image(label="Overlay Result")
|
32 |
+
|
33 |
+
# Hidden elements to hold drag-drop coordinates and scale
|
34 |
+
x_coord = gr.Number(value=0, visible=False)
|
35 |
+
y_coord = gr.Number(value=0, visible=False)
|
36 |
+
scale_factor = gr.Number(value=1.0, visible=False)
|
37 |
|
38 |
+
apply_overlay = gr.Button("Apply Overlay")
|
39 |
|
40 |
+
# JavaScript for dragging and resizing
|
41 |
+
custom_js = """
|
42 |
+
<script>
|
43 |
+
let img = document.querySelector('img[data-target="design_img"]');
|
44 |
+
let result = document.querySelector('img[data-target="overlay_result"]');
|
45 |
+
let xInput = document.querySelector('input[name="x_coord"]');
|
46 |
+
let yInput = document.querySelector('input[name="y_coord"]');
|
47 |
+
let scaleInput = document.querySelector('input[name="scale_factor"]');
|
48 |
|
49 |
+
img.draggable = true;
|
50 |
+
img.ondragstart = function(event) {
|
51 |
+
event.dataTransfer.setDragImage(new Image(), 0, 0);
|
52 |
+
};
|
|
|
|
|
|
|
|
|
|
|
53 |
|
54 |
+
img.ondragend = function(event) {
|
55 |
+
let rect = result.getBoundingClientRect();
|
56 |
+
xInput.value = event.clientX - rect.left;
|
57 |
+
yInput.value = event.clientY - rect.top;
|
58 |
+
};
|
59 |
+
|
60 |
+
let resizeObserver = new ResizeObserver(entries => {
|
61 |
+
scaleInput.value = img.width / img.naturalWidth;
|
62 |
+
});
|
63 |
+
resizeObserver.observe(img);
|
64 |
+
</script>
|
65 |
+
"""
|
66 |
+
|
67 |
+
html_code = gr.HTML(custom_js)
|
68 |
+
|
69 |
+
# Load the overlayed image on clicking the button
|
70 |
+
apply_overlay.click(overlay_images, [x_coord, y_coord, scale_factor, design_img, target_img], overlay_result)
|
71 |
|
72 |
editor.launch()
|