這是一個專業的圖像背景處理工具,基于Python開發,主要功能包括:1. 智能背景去除 - 使用rembg庫的深度學習模型自動識別并移除圖片背景。 2. 背景自定義 - 支持純色背景替換,保留透明通道(Alpha通道)。3. 高級參數調節 - 提供5種專業級圖像處理參數。4. 實時預覽 - 雙窗口對比顯示原圖與處理效果5.多格式保存 - 支持保存為PNG/JPEG格式。
首先,定義了一個create_widgets方法,這個方法負責構建用戶界面,包括控制面板、滑塊、按鈕、圖像顯示區域和狀態欄。
- 主框架創建:使用ttk.Frame創建主框架main_frame,并填充整個窗口。這通常是GUI布局的起點,用于容納其他組件。
- 左側控制面板:在main_frame左側創建一個控制面板control_frame,寬度為300像素,垂直填充。這里會放置參數調節滑塊、顏色選擇按鈕和操作按鈕。
- 參數調節滑塊:調用create_slider方法創建多個滑塊,分別控制去背景強度、邊緣柔化、背景模糊、對比度和亮度。每個滑塊有不同的范圍和步長,例如對比度和亮度使用0.1的步長。
- 顏色選擇組件:包括一個按鈕和一個畫布,用于選擇背景顏色。按鈕觸發choose_color方法,畫布顯示當前選中的顏色。
- 操作按鈕:三個按鈕分別用于上傳圖片、保存結果和應用參數。點擊這些按鈕會調用相應的方法,如load_image、save_image和apply_parameters。
- 圖片顯示區域:在main_frame右側創建圖像顯示區域img_frame,包含原圖預覽和效果預覽兩個畫布。使用tk.Canvas顯示圖像,并添加標簽說明。
- 狀態欄:底部狀態欄顯示程序狀態信息,使用StringVar動態更新文本。
def create_widgets(self):"""創建界面組件"""main_frame = ttk.Frame(self.root)main_frame.pack(fill=tk.BOTH, expand=True)# 左側控制面板control_frame = ttk.Frame(main_frame, width=300)control_frame.pack(side=tk.LEFT, fill=tk.Y, padx=10, pady=10)# 參數調節滑塊self.create_slider(control_frame, '去背景強度', 'bg_strength', 1, 20)self.create_slider(control_frame, '邊緣柔化', 'edge_smooth', 0, 10)self.create_slider(control_frame, '背景模糊', 'bg_blur', 0, 20)self.create_slider(control_frame, '對比度', 'contrast', 0.5, 2.0, 0.1)self.create_slider(control_frame, '亮度', 'brightness', 0.5, 2.0, 0.1)# 顏色選擇self.color_btn = ttk.Button(control_frame, text="選擇背景色", command=self.choose_color)self.color_btn.pack(pady=10)self.color_preview = tk.Canvas(control_frame, width=100, height=30, bg='#FFFFFF', bd=1, relief='sunken')self.color_preview.pack(pady=5)# 操作按鈕ttk.Button(control_frame, text="上傳圖片", command=self.load_image).pack(pady=10)ttk.Button(control_frame, text="保存結果", command=self.save_image).pack(pady=10)ttk.Button(control_frame, text="應用參數", command=self.apply_parameters).pack(pady=10)# 圖片顯示區域self.img_frame = ttk.Frame(main_frame)self.img_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True, padx=10, pady=10)# 原圖預覽self.original_canvas = tk.Canvas(self.img_frame, bg='#f0f0f0', bd=2, relief='groove')self.original_canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)ttk.Label(self.img_frame, text="原圖").pack(side=tk.LEFT, anchor='n')# 結果預覽self.result_canvas = tk.Canvas(self.img_frame, bg='#f0f0f0', bd=2, relief='groove')self.result_canvas.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)ttk.Label(self.img_frame, text="效果預覽").pack(side=tk.RIGHT, anchor='n')# 狀態欄self.status_var = tk.StringVar()status_bar = ttk.Label(self.root, textvariable=self.status_var, relief='sunken', style='Status.TLabel')status_bar.pack(fill=tk.X, side=tk.BOTTOM)
接下來,創建動態滑塊創建器:
- parent: 父容器組件
- label: 參數顯示名稱(如"去背景強度")
- param: 參數鍵名(對應self.params字典的key)
- min_val/max_val: 取值范圍
- step: 步長(默認1)
使用fill=tk.X實現水平自適應布局,pady=5設置垂直間距保持界面整潔:
frame.pack(fill=tk.X, pady=5)
自動識別浮點型參數(如對比度0.5-2.0),保持整數型參數(如模糊半徑0-20)的精度:
round(value, 1) if isinstance(value, float) else int(value)
實時響應滑塊拖動事件,使用lambda閉包傳遞當前參數名和值,立即更新參數存儲字典:
command=lambda v, p=param: self.update_param(p, float(v))
代碼如下:
def create_slider(self, parent, label, param, min_val, max_val, step=1):"""創建參數調節滑塊"""frame = ttk.Frame(parent)frame.pack(fill=tk.X, pady=5)