1. 程式人生 > 實用技巧 >媳婦兒喜歡玩某音中的動漫特效,那我就用python做一個圖片轉化軟體。

媳婦兒喜歡玩某音中的動漫特效,那我就用python做一個圖片轉化軟體。

​最近某音上的動漫特效特別火,很多人都玩著動漫肖像,我媳婦兒也不例外。看著她這麼喜歡這個特效,我決定做一個圖片處理工具,這樣媳婦兒的動漫頭像就有著落了。
編碼
為了快速實現我們的目標,我們就不自己寫圖片處理程式了,我們直接呼叫百度AI開放平臺提供的介面實現我們的需求。
這一次我們匯入如下兩個庫

1 # -*- coding:utf-8 -*-
2 #author:菜鳥小白的學習分享
3 
4 import requests, base64

我們需要進行百度AI開放平臺的介面認證,程式碼如下:

# -*- coding:utf-8 -*-
#author:菜鳥小白的學習分享
# 百度AI開放平臺鑑權函式
def get_access_token(): url = 'https://aip.baidubce.com/oauth/2.0/token' data = { 'grant_type': 'client_credentials', # 固定值 'client_id': 'A3ppUrgl6H*******NjDN4Bb', # 在開放平臺註冊後所建應用的API Key 'client_secret': 'SqaeFpiPPC**********H1lsb0xO3w' # 所建應用的Secret Key } res = requests.post(url, data=data) res
= res.json() access_token = res['access_token'] return access_token
因為百度AI平臺提供了多種影象處理方式,請求URL主體都相同,但是傳參不同,所以我們需要對不同的處理方式進行引數處理,程式碼如下:
 1 # -*- coding:utf-8 -*-
 2 #author:菜鳥小白的學習分享
 3 def get_config():
 4     img_before = input("請輸入當前資料夾下需要處理的圖片名稱:")
 5     process_action = ['','selfie_anime
','colourize','style_trans'] 6 print("支援以下處理動作:\n1:為人像動漫化\n2:影象上色\n3:為影象風格化") 7 # 處理動作: selfie_anime 為人像動漫化,colourize 影象上色,style_trans 為影象風格化 8 i = int(input("請輸入需要處理的動作:")) 9 """ 10 cartoon:卡通畫風格 11 pencil:鉛筆風格 12 color_pencil:彩色鉛筆畫風格 13 warm:彩色糖塊油畫風格 14 wave:神奈川衝浪裡油畫風格 15 lavender:薰衣草油畫風格 16 mononoke:奇異油畫風格 17 scream:吶喊油畫風格 18 gothic:哥特油畫風格""" 19 others = ['','cartoon','pencil','color_pencil','warm','wave','lavender','mononoke','scream','gothic'] 20 j = 0 21 if process_action[i] == 'style_trans': 22 print("支援轉化的風格有:\n\ 23 1:卡通畫風格\n\ 24 2:鉛筆風格\n\ 25 3:彩色鉛筆畫風格\n\ 26 4:彩色糖塊油畫風格\n\ 27 5:神奈川衝浪裡油畫風格\n\ 28 6:薰衣草油畫風格\n\ 29 7:奇異油畫風格\n\ 30 8:吶喊油畫風格\n\ 31 9:哥特油畫風格\n") 32 j = int(input("請輸入需要轉化的風格型別(數字):")) 33 return img_before,process_action[i],others[j]


我們獲取到圖片和處理引數之後,就拿著這些資訊去請求百度AI開放平臺了
 1 # -*- coding:utf-8 -*-
 2 #author:菜鳥小白的學習分享
 3 def image_process(img_before, img_after, how_to_deal,others):
 4     # 函式的三個引數,一個是轉化前的檔名,一個是轉化後的檔名,均在同一目錄下,第三個是影象處理能力選擇
 5     request_url = 'https://aip.baidubce.com/rest/2.0/image-process/v1/' + how_to_deal
 6  7     file = open(img_before, 'rb')  # 二進位制讀取圖片
 8     origin_img = base64.b64encode(file.read())  # 將圖片進行base64編碼
 9     headers = {'Content-Type': 'application/x-www-form-urlencoded'}
10     data = {
11         'access_token': get_access_token(),
12         'image': origin_img,
13         'option': others
14     }
15 16     res = requests.post(request_url, data=data, headers=headers)
17     res = res.json()
18 19     if res:
20         f = open(img_after, 'wb')
21         after_img = res['image']
22         after_img = base64.b64decode(after_img)
23         f.write(after_img)
24         f.close()


最後,我們再把主函式呼叫寫一下
1 # -*- coding:utf-8 -*-
2 #author:菜鳥小白的學習分享
3 if __name__ == '__main__':
4     # 選擇輸入資訊
5     img_before, process_action, others = get_config()
6     img_after = img_before.split('.')  # 將原檔名分成列表
7     img_after = img_after[0] + '_1.' + img_after[1]  # 新生成的檔名為原檔名上加 _1
8     image_process(img_before, img_after, process_action,others)
9     print('done!')

實現效果

原始圖片:

卡通化的轉化效果:

彩鉛風格轉換效果:

其它效果就由小夥伴們自行實驗吧,時間太晚了,我就不一一嘗試了。

程式獲取

考慮到有的小夥伴還沒有python環境也想體驗工具效果,我把也程式碼打包成了可執行程式,關注公眾號“菜鳥小白的學習分享”回覆“圖片處理程式”即可獲取。

有興趣自己研究的小夥伴想要獲取原始碼的話,關注公眾號“菜鳥小白的學習分享”回覆“圖片處理原始碼”即可獲取。

如果你也認可菜鳥小白的學習分享的話,請給我一個在看、點贊、關注+讚賞,因為有你們,所以我一直在努力。

# -*- coding:utf-8 -*-#author:菜鳥小白的學習分享if __name__ == '__main__':    # 選擇輸入資訊    img_before, process_action, others = get_config()    img_after = img_before.split('.')  # 將原檔名分成列表    img_after = img_after[0] + '_1.' + img_after[1]  # 新生成的檔名為原檔名上加 _1    image_process(img_before, img_after, process_action,others)    print('done!')