關於介面的大致模樣其實和先前的相差不大,大家應該都看過上一篇的內容。
整體GUI的介面如下圖所示:
使用者在使用的時候可以選擇將證件照片替換成是“白底背景”或“紅底背景”,那麼在前端的介面上傳完成照片之後,後端的程式便會開始執行該有的操作。
首先我們需要將照片的背景顏色給去除掉,這裡用到的是第三方的介面removebg,官方連結是:
我們在完成帳號的註冊之後,造訪下面的連結取得api_key:https://www.remove.bg/api#remove-background
下面便是相對應的程式碼了,如下:
def remove_bg(self): api_keys = "自己注册的api_key" rmbg = RemoveBg(api_keys, "error.log") rmbg.remove_background_from_img_file(imgNamepath)
在完成去除掉證件照片的背景顏色之後,我們再添加上我們想要的背景顏色即可,例如我們想要添加上「紅色」的背景顏色,程式碼如下:
no_bg_image = Image.open(in_path) x, y = no_bg_image.size new_image = Image.new('RGBA', no_bg_image.size, color="red") new_image.paste(no_bg_image, (0, 0, x, y), no_bg_image) new_image.save(output_path)
這次我們在GUI介面中用到的顯示圖片的控制項是graphicsView元件,我們在點擊「選擇圖片」的按鈕之後,在上傳圖片之後,需要在graphicsView視窗當中將圖片顯示出來,程式碼如下:
def openImage(self): global imgNamepath# 这里为了方便别的地方引用图片路径,将其设置为全局变量 imgNamepath, imgType = QFileDialog.getOpenFileName(self.ui, "选择图片", "D:\", "*.png;;*.jpg;;All Files(*)") # 通过文件路径获取图片文件,并设置图片长宽为label控件的长、宽 img = QtGui.QPixmap(imgNamepath).scaled(self.ui.graphicsView.size(), aspectMode=Qt.KeepAspectRatioByExpanding) print("img: ", img.width(), img.height()) self.ui.graphicsView.setFixedSize(img.width(), img.height()) # 在label控件上显示选择的图片 item = QGraphicsPixmapItem(img) scene = QGraphicsScene() scene.addItem(item) self.ui.graphicsView.setScene(scene) self.ui.graphicsView.repaint() # 显示所选图片的路径 self.ui.lineEdit.setText(imgNamepath)
最後我們來看看整體的效果
以上是用 Python 製作視覺化 GUI 介面,一鍵實現證件照背景顏色的替換的詳細內容。更多資訊請關注PHP中文網其他相關文章!