TIMBOVILL commited on
Commit
e7b5496
·
verified ·
1 Parent(s): 5dbde27

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -22
app.py CHANGED
@@ -1,36 +1,48 @@
1
  import gradio as gr
2
  from PIL import Image
3
  import numpy as np
4
- import io
5
 
6
- def brightness_to_opacity(image):
7
- # Ensure it's RGB
8
- img = image.convert("RGB")
9
- img_array = np.array(img)
10
 
11
- # Compute grayscale (luminance)
12
- gray = np.dot(img_array[...,:3], [0.299, 0.587, 0.114]).astype(np.uint8)
 
13
 
14
- # Use grayscale as alpha
15
- alpha = gray
 
16
 
17
- # Optional: set RGB to white (or use img_array to preserve color)
18
- white_rgb = np.ones_like(img_array) * 255
19
- rgba_array = np.dstack((white_rgb, alpha))
20
 
21
- # Convert to Image and return
22
- result_img = Image.fromarray(rgba_array.astype(np.uint8), mode="RGBA")
23
- return result_img
 
24
 
25
- # Gradio Interface
 
 
 
 
 
26
  iface = gr.Interface(
27
- fn=brightness_to_opacity,
28
- inputs=gr.Image(type="pil", label="Upload Image"),
29
- outputs=gr.Image(type="pil", label="Output (Brightness Opacity)"),
30
- title="Brightness to Opacity Converter",
31
- description="This tool converts image brightness into opacity. Bright areas become visible, dark areas become transparent."
 
 
 
 
 
 
 
32
  )
33
 
34
- # Launch the app
35
  if __name__ == "__main__":
36
  iface.launch()
 
1
  import gradio as gr
2
  from PIL import Image
3
  import numpy as np
 
4
 
5
+ def brightness_to_opacity_overlay(foreground_img, background_img, invert_opacity=False):
6
+ if foreground_img is None or background_img is None:
7
+ return None
 
8
 
9
+ # Resize foreground to match background
10
+ bg = background_img.convert("RGBA")
11
+ fg = foreground_img.convert("RGB").resize(bg.size)
12
 
13
+ # Convert foreground to grayscale (luminance)
14
+ fg_array = np.array(fg)
15
+ luminance = np.dot(fg_array[...,:3], [0.299, 0.587, 0.114]).astype(np.uint8)
16
 
17
+ # Optionally invert the opacity
18
+ alpha = 255 - luminance if invert_opacity else luminance
 
19
 
20
+ # Set RGB to white, combine with alpha
21
+ white_rgb = np.ones_like(fg_array) * 255
22
+ rgba_array = np.dstack((white_rgb, alpha)).astype(np.uint8)
23
+ mask_image = Image.fromarray(rgba_array, mode="RGBA")
24
 
25
+ # Overlay mask_image on background
26
+ combined = Image.alpha_composite(bg, mask_image)
27
+
28
+ return combined
29
+
30
+ # Gradio UI
31
  iface = gr.Interface(
32
+ fn=brightness_to_opacity_overlay,
33
+ inputs=[
34
+ gr.Image(type="pil", label="Mask Source (Brightness to Alpha)"),
35
+ gr.Image(type="pil", label="Background Image"),
36
+ gr.Checkbox(label="Invert Opacity", value=False)
37
+ ],
38
+ outputs=gr.Image(type="pil", label="Final Composite"),
39
+ title="Brightness-to-Alpha Overlay Tool",
40
+ description=(
41
+ "This tool uses the brightness of the first image as its opacity mask, "
42
+ "optionally inverts it, resizes it to match the second image, and overlays the result."
43
+ )
44
  )
45
 
46
+ # Run the app
47
  if __name__ == "__main__":
48
  iface.launch()