STLooo commited on
Commit
fbec382
·
verified ·
1 Parent(s): 28497f0

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -0
app.py ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import cv2
3
+ import numpy as np
4
+
5
+ def merge_images(background, foreground, prefix):
6
+ # 转换图片为 OpenCV 格式
7
+ bg_img = cv2.cvtColor(np.array(background), cv2.COLOR_RGB2BGR)
8
+ fg_img = cv2.cvtColor(np.array(foreground), cv2.COLOR_RGB2BGRA) # 保留透明通道
9
+
10
+ # 合成到左侧 (x=100, y=50)
11
+ bg_img = overlay_image(bg_img, fg_img, 100, 50)
12
+ # 合成到右侧 (x=300, y=50)
13
+ bg_img = overlay_image(bg_img, fg_img, 300, 50)
14
+
15
+ # 返回合成后的图片
16
+ result = cv2.cvtColor(bg_img, cv2.COLOR_BGR2RGB)
17
+ return result
18
+
19
+ def overlay_image(bg, fg, x, y):
20
+ alpha = fg[:, :, 3] / 255.0
21
+ for c in range(3):
22
+ bg[y:y+fg.shape[0], x:x+fg.shape[1], c] = \
23
+ alpha * fg[:, :, c] + (1 - alpha) * bg[y:y+fg.shape[0], x:x+fg.shape[1], c]
24
+ return bg
25
+
26
+ # 构建 Gradio 界面
27
+ with gr.Blocks() as demo:
28
+ gr.Markdown("## 🖼️ 图片合成工具(左右双位置)")
29
+ with gr.Row():
30
+ bg_input = gr.Image(label="上传背景图", type="pil")
31
+ fg_input = gr.Image(label="上传前景图(PNG透明背景)", type="pil")
32
+ prefix_input = gr.Textbox(label="文件名前缀", value="slide")
33
+ btn = gr.Button("合成图片")
34
+ output_image = gr.Image(label="结果预览")
35
+
36
+ btn.click(
37
+ fn=merge_images,
38
+ inputs=[bg_input, fg_input, prefix_input],
39
+ outputs=output_image
40
+ )
41
+
42
+ demo.launch()