【Python】教你如何快速給證件照更換底色

 

本文目錄:前期準備-編寫代碼-測試結果-文末福利

本文作者:小賴同學

 

不知不覺就到了2月中旬了,因爲肺炎疫情大家都一再延遲了上班上學,天天睡到大中午,起來吃個小午餐,玩手機睡午覺又到大晚上,哪都不敢去,被迫放假是真的很難受。

而我,雖然已經上班了,但下班了哪都不敢去,超級無聊。這幾天,在整理以前的攝影照片時無意中發現了幾張證件照,又看到了電腦桌面的PS,突然間就來了點靈感,好像好像又不那麼無聊了。

我可以用Python來摳圖嗎?可以給證件照換個底色嗎?我可以負責任地告訴你,經過幾天實踐得知,可以!只有幾行代碼而且還很快!(提前偷偷告訴你,文末還有福利哦)

啥,想看看效果圖?好,上動圖。

 

啥,想看看是如何實現的?好,接下來請聽我慢慢敘述。

前期準備

1、工具挑選

Python要實現摳圖功能,網上有很多方法。我這邊經過對比,挑選了RemoveBg這款工具。RemoveBg是國外的一個專業爲人物去除背景的神器,它利用的是智能AI摳圖,100%全自動化,全程無需人爲操作摳圖,可以說是非常簡單快捷的一款工具了,並且號稱只要5秒就能完成去除背景,這個工具目前完全免費,提供PNG圖片下載。

官網支持網上在線摳圖,只需要簡單註冊獲取其API KEY就可以使用,每個API KEY每月免費50張,但由於是國外服務器,使用過程會感覺頁面加載有點緩慢,導出的圖片大小也會有所壓縮和限制。

最重要的是Python支持RemoveBg,只需要下載安裝這個模塊就可以使用了,完美符合此文的主題。

 

2、獲取API KEY

搜索RemoveBg官網,進入官網註冊一個賬號就可以獲得API KEY。這個API KEY是相當於一個“身份ID”,實現證件照換底色需要導入第三方模塊removebg,有了這個ID就可以使用到RemoveBg的“技術支持”。

RemoveBg官網:https://www.remove.bg/zh,API KEY獲取網址:https://www.remove.bg/zh/api,獲取API KEY的具體操作也很簡單:

 

編寫代碼

1、安裝removebg模塊和Pillow模塊

Windows + R打開運行窗口,然後輸入cmd打開命令提示符窗口,在命令行終端輸入pip install removebg進行removebg模塊的安裝,輸入pip install Pillow進行Pillow模塊的安裝。

稍等一會,提示安裝成功就可以使用這兩個模塊了。(備註:我這是因爲配置好了python環境的,沒安裝python的可以自己搜索下如何安裝。)

 

2、代碼介紹

安裝好了需要的工具模塊後,就可以開始編寫代碼了。證件照換底色使用的主要代碼也就十行左右。

rmbg = RemoveBg(api_key, "error.log")
rmbg.remove_background_from_img_file(old_image_path)

首先是獲得RemoveBg,傳入上述所說的API KEY,再將需要更換底色的證件照路徑傳入其remove_background_from_img_file()方法,此方法會在證件照路徑下新生成一個摳除底色的圖像。

no_bg_image = Image.open(no_bg_image_path)
x, y = no_bg_image.size
try:
    new_image = Image.new('RGBA', no_bg_image.size, color=color)
    new_image.paste(no_bg_image, (0, 0, x, y), no_bg_image)
    new_image.save(new_image_path)
except:
    print("image matting except")

接着通過PIL下的Image打開摳除底色的圖像,獲取到其分辨率大小等數據後再通過Image新生成一個特定底色的證件照,color即是需要更換成的底色,color可以是"red"等英文字符串,也可以是(255, 0, 0)等RGB值。最後把更換底色後的證件照保存到你選擇的路徑下,底色更換就完成了。

 

3、完整代碼

通過上面第二點的介紹,就已基本清楚了證件照更換底色的代碼實現原理,最後就附上完整的簡單整合的實現代碼。

import os

from PIL import Image
from removebg import RemoveBg

def image_matting(old_image_path, new_image_path, api_key, color):
    # API KEY獲取官方網站:https://www.remove.bg/zh/api
    rmbg = RemoveBg(api_key, "error.log")
    rmbg.remove_background_from_img_file(old_image_path)
    
    parent_path = os.path.dirname(old_image_path)
    old_image_name = os.path.split(old_image_path)[-1]
    no_bg_image_name = old_image_name + "_no_bg.png"
    if no_bg_image_name in os.listdir(parent_path):
        no_bg_image_path = parent_path + "/" + no_bg_image_name
        no_bg_image = Image.open(no_bg_image_path)
        x, y = no_bg_image.size
        try:
          new_image = Image.new('RGBA', no_bg_image.size, color=color)
          new_image.paste(no_bg_image, (0, 0, x, y), no_bg_image)
          new_image.save(new_image_path)
        except:
          print("image matting except")
    else:
        print("image matting fail")

 

測試結果

1、挑選證件照

因爲本地我的證件照是原圖,分辨率太大,爲避免卡崩,我去百度上搜索下載了兩張合適的靚女靚仔的證件照來測試效果如何。測試原圖如下所示。

                                                                                      靚女靚仔原圖-圖源網絡

2、測試結果

用代碼換底色新生成的證件照整體感覺還可以,看上去並沒有多大的瑕疵,頭髮邊邊的處理也挺舒服,對於不會PS的小白來說簡直就是福利,對於會摳圖又懶得花時間去摳的人來說簡直就是偷懶神器。

                                                                                             靚女-更換後

                                                                                             靚仔-更換後

文末福利

1、福利

你以爲到這就結束了?不,還有福利!!!畢竟還是有很多人是不懂代碼的,又不會摳圖,是個PS小白,於是,我又熬了下夜,把這個代碼打包成了exe獨立程序,無需python環境也可以在自己電腦上運行,現在只要在公衆號“我有個愛好怎麼了”後臺回覆“證件照神器”即可獲得這個工具!

 

2、工具效果圖

                                                                                                  圖標

                                                                                                  界面

 

推薦閱讀

【Python】我用python爬取一月份微博熱搜數據來分析人們對新型肺炎的關注程度變化

可以重啓2020嗎?我用Python分析總結了1月份發生了什麼

     

 

發佈了7 篇原創文章 · 獲贊 9 · 訪問量 3579
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章