gaur3009 commited on
Commit
1cdc356
·
verified ·
1 Parent(s): 7d5defa

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +58 -41
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, ImageOps
5
 
6
- # Initialize global variables
7
- design_image = None
8
- target_image = None
 
9
 
10
- def load_images(design_path, target_path):
11
- global design_image, target_image
12
- design_image = Image.open(design_path).convert("RGBA")
13
- target_image = Image.open(target_path).convert("RGBA")
14
- return design_image, target_image
15
 
16
- def overlay_images(drag_info):
17
- if not drag_info or not design_image or not target_image:
18
- return target_image
19
 
20
- # Extract drag position and scale
21
- x = drag_info['x']
22
- y = drag_info['y']
23
- scale = drag_info['scale']
24
 
25
- # Resize the design image
26
- resized_design = design_image.resize(
27
- (int(design_image.width * scale), int(design_image.height * scale)),
28
- Image.ANTIALIAS
29
- )
 
 
 
30
 
31
- # Overlay design onto target
32
- overlay = Image.new('RGBA', target_image.size, (255, 255, 255, 0))
33
- overlay.paste(resized_design, (x, y), resized_design)
34
- combined_image = Image.alpha_composite(target_image, overlay)
 
 
35
 
36
- return combined_image
37
 
38
- # Gradio Interface
39
- with gr.Blocks() as editor:
40
- gr.Markdown("## Drag-and-Drop Image Editor")
 
 
 
 
 
41
 
42
- with gr.Row():
43
- with gr.Column():
44
- design_path = gr.Image(label="Design Image")
45
- target_path = gr.Image(label="Target Image")
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
- load_btn.click(load_images, inputs=[design_path, target_path], outputs=[drag_info, drag_area])
53
- drag_area.edit(overlay_images, inputs=drag_info, outputs=overlay_result)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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()