成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

有趣的Python圖片制作之如何用QQ好友頭像拼接出里昂

瀏覽:153日期:2022-07-29 11:32:30

在本篇博客中,我們將實現(xiàn)兩個功能:

將所有頭像合并為大圖 將所有頭像以某個模板合成大圖

同樣,先給上所有運行效果圖:

有趣的Python圖片制作之如何用QQ好友頭像拼接出里昂

代碼實現(xiàn)

1、代碼所需庫

import requests,codecs,re,urllib,os,random,mathfrom PIL import Imageimport numpy as npimport cv2 as cv

2、代碼講解

本篇博客就不再講解如何獲取好友頭像了,需要的可以參考這篇博文:python爬蟲-從QQ郵箱獲取好友信息并爬取頭像

現(xiàn)在,我們已經(jīng)有了所有的好友頭像,接下來我們先實現(xiàn)對所有頭像的集合咯

有趣的Python圖片制作之如何用QQ好友頭像拼接出里昂

2.1、將小頭像合并為大圖

對于這個,就是直接將每個小頭像貼在大圖上就行了,這個利用Image的paste函數(shù)就可以解決。對于貼的順序就可以直接按照下面圖示一個個貼:

有趣的Python圖片制作之如何用QQ好友頭像拼接出里昂

所以,直接給出代碼:

def simple_split(filepackage,size,littlesize): #簡單拼接,參數(shù)為圖片文件名,每行每列的size,小頭像圖片的大小row = size[0]col = size[1]bigimg = Image.new(’RGBA’,(littlesize*row,littlesize*col)) #結果圖number = 0for i in range(row): #行for j in range(col): #列randpic = random.randint(1,friends_count)img = Image.open(filepackage+str(randpic)+’.png’).convert(’RGBA’)img = img.resize((littlesize,littlesize))loc = (i*littlesize,j*littlesize,(i+1)*littlesize,(j+1)*littlesize)print(loc,number)number+=1bigimg.paste(img,loc)bigimg.save(resultSavePath)

由于好友不多,所以我們每次就隨機選擇一個好友頭像貼上去,所以如果你的密度大的話最后出現(xiàn)的頭像有很多重復的頭像。

給大家展示下最后我的圖片吧:

有趣的Python圖片制作之如何用QQ好友頭像拼接出里昂

2.2、以某個圖片為模板拼接圖片

由于不清楚有沒有能夠直接做出來的第三方庫,所有我就自己造了個小輪子。

思路:將模板分為A x B的小圖,就將它的位置形容為 pic[i][j] 吧,然后獲取每個小圖的平均RGB值,將 pic[i][j] 的平均RGB值和好友頭像的RGB值做對比,找出最接近的頭像,然后將該頭像插入在圖像的 pic[i][j] 處。

思路還是比較簡單吧😀

接下來就是實現(xiàn)了:

代碼很多地方都給出了注釋,我就不多講了,直接給出代碼:

import requests,codecs,re,urllib,os,random,mathfrom PIL import Imageimport numpy as npimport cv2 as cvtxtpath = ’C:/Users/11037/Desktop/test/qqfriends.txt’ #你從QQ郵箱中粘貼的文件savepath = ’C:/Users/11037/Desktop/touxiang/’ #頭像存儲位置resultSavePath = ’C:/Users/11037/Desktop/result2.png’ #結果存儲位置modePath = ’C:/Users/11037/Desktop/leno.jpg’ #模板存儲位置friends_count = 0 #好友數(shù)量all_mean_rgbs = [] #存儲計算出的所有平均rgb值def meanrbg(img): #計算圖片平均rgbrgb = np.array(img)r = int(round(np.mean(rgb[:, :, 0])))g = int(round(np.mean(rgb[:, :, 1])))b = int(round(np.mean(rgb[:, :, 2])))return (r,g,b)def gettouxiang(txtpath):#輸入你的txt文件存儲位置file = codecs.open(txtpath,’rb’,’utf-8’)s = file.read()pattern = re.compile(r’d+@qq.com’)all_mail = pattern.findall(s) #正則表達式匹配所有的qq號all_link = [] #用于存儲需要訪問的鏈接url = ’http://qlogo.store.qq.com/qzone/’for mail in all_mail:qq = mail.replace(’@qq.com’,’’)l = url + qq +’/’+qq+’/100’all_link.append(l)i = 1for link in all_link: #遍歷鏈接,下載頭像saveurl = savepath+str(i)+’.png’savaImg(link,saveurl)i +=1print(’已下載’,i)friends_count = len(all_link) #獲取朋友頭像數(shù)量return Truedef savaImg(picurl,saveurl): #存儲圖片函數(shù),picurl是圖片的URL,saveurl是本地存儲位置try:bytes = urllib.request.urlopen(picurl)file = open(saveurl,’wb’)file.write(bytes.read())file.flush()file.close()return Trueexcept:print(’worry’)savaImg(picurl,saveurl)def simple_split(filepackage,size,littlesize): #簡單拼接,參數(shù)為圖片文件名,每行每列的size,小頭像圖片的大小row = size[0]col = size[1]bigimg = Image.new(’RGBA’,(littlesize*row,littlesize*col))number = 0for i in range(row):for j in range(col):randpic = random.randint(1,friends_count)img = Image.open(filepackage+str(randpic)+’.png’).convert(’RGBA’)img = img.resize((littlesize,littlesize))loc = (i*littlesize,j*littlesize,(i+1)*littlesize,(j+1)*littlesize)print(loc,number)number+=1bigimg.paste(img,loc)bigimg.save(resultSavePath)def mode_split(filepackage,modepath,bigsize,littlesize): #以模板存儲頭像row = bigsize[0] #大圖每行多少個小頭像col = bigsize[1] #每列suitSize = (littlesize*row,littlesize*col) #大圖最終的像素sizebigImg = Image.open(modepath)bigImg = bigImg.resize(suitSize)resultImg = Image.new(’RGBA’,suitSize) for i in range(row):for j in range(col):cutbox = (i*littlesize,j*littlesize,(i+1)*littlesize,(j+1)*littlesize) #模板剪切用于對比的某個區(qū)域cutImg = bigImg.crop(cutbox) #復制到cutImg中tmprgb = meanrbg(cutImg) suitOne = mostSuitImg(tmprgb) + 1 #對比出最合適的頭像img = Image.open(filepackage + str(suitOne) + ’.png’).convert(’RGBA’)img = img.resize((littlesize,littlesize))resultImg.paste(img,cutbox)print(’已粘貼’,cutbox)resultImg.save(resultSavePath) #存儲def mostSuitImg(tmprgb): #進行對比,找出最合適的頭像global all_mean_rgbsminRange = 200000id = 0for rgb in all_mean_rgbs:tmp = (rgb[1][0]-tmprgb[2])**2+(rgb[1][1]-tmprgb[1])**2+(rgb[1][2]-tmprgb[1])**2if tmp<minRange:minRange = tmpid = rgb[0]return idif __name__ == ’__main__’:# gettouxiang(txtpath) #獲取頭像,如果已經(jīng)獲取就可以給注釋掉了# simple_split(savepath,(20,20),30) #簡單拼接#模板拼接for i in range(1,friends_count+1):img = cv.imread(savepath+str(i)+’.png’)rgb = meanrbg(img)all_mean_rgbs.append(rgb)all_mean_rgbs = list(enumerate(all_mean_rgbs)) #給列表增加一個索引mode_split(savepath,modePath,(50,80),20) #模板拼接

給大家看看最終的效果:

有趣的Python圖片制作之如何用QQ好友頭像拼接出里昂

這樣一看還是都不錯是吧。哈哈。

再給出里昂的模板和最終成果:

有趣的Python圖片制作之如何用QQ好友頭像拼接出里昂有趣的Python圖片制作之如何用QQ好友頭像拼接出里昂添加【修改后的Leon】:有趣的Python圖片制作之如何用QQ好友頭像拼接出里昂

我默認將每個頭像以數(shù)字命名,可以便于后續(xù)的操作。

同時,以上代碼都進行了封裝,很多函數(shù)都可以獨立使用,用于滿足不同的功能。可以自己讀完代碼進行改寫實現(xiàn)自己需要的功能,比如說以上我默認頭像圖片都是正方形,你如果圖片有長方形的改變下代碼也可以滿足。

理論上來說,你的好友頭像越多,制作出來的圖片與模板的差異也就越小。以mode_split這個函數(shù)為例,你設置的bigsize越大,你的圖片也就越清晰。

到此這篇關于有趣的Python圖片制作之如何用QQ好友頭像拼接出里昂的文章就介紹到這了,更多相關python 好友頭像拼接內容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: qq Python
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
久久久噜噜噜久久中文字幕色伊伊| 精品污污网站免费看| va亚洲va日韩不卡在线观看| 国产精品一卡二卡在线观看| 午夜日韩在线电影| 成人午夜免费av| 偷拍自拍另类欧美| 欧美日韩不卡一区| 尤物视频一区二区| 国产精品成人一区二区网站软件| 香蕉久久a毛片| 日韩高清不卡在线| 色婷婷精品久久二区二区蜜臂av | 日本不卡123| 亚洲精品中文在线影院| 免费成人av资源网| 五月综合激情网| 亚洲欧美成人| 性娇小13――14欧美| 日韩欧美一区二区久久婷婷| 亚洲欧洲日韩在线| 精品中文字幕一区二区小辣椒| 国产精品日韩| 亚洲美女免费视频| 亚洲视频综合| 亚洲欧美日韩国产一区二区| 噜噜噜噜噜久久久久久91 | 精品久久国产97色综合| 亚洲欧美日韩一区| 欧美激情一区| 精品捆绑美女sm三区| 国产成人免费视频一区| 国产欧美日韩另类一区| 男人天堂欧美日韩| 99免费精品视频| 亚洲成va人在线观看| 欧美一二三四区在线| 亚洲制服av| 91色.com| 激情另类小说区图片区视频区| 国产欧美日韩在线视频| 成人午夜电影久久影院| 欧美一级二级在线观看| 欧美午夜精品久久久久久孕妇| 亚洲国产欧美另类丝袜| 国产三级三级三级精品8ⅰ区| 欧美在线看片a免费观看| 亚洲性人人天天夜夜摸| 国产一区不卡精品| 亚洲va韩国va欧美va精品| 久久色中文字幕| 欧美一级理论性理论a| 噜噜噜躁狠狠躁狠狠精品视频| 久久久久久久欧美精品| 精品剧情在线观看| 国产成人av影院| 日韩欧美高清一区| 久久只精品国产| 欧美精品乱码久久久久久按摩 | 99久久夜色精品国产网站| 亚洲一二三四久久| 久久亚洲综合av| 亚洲综合丁香| 欧美日韩国产在线一区| 久久aⅴ国产欧美74aaa| 亚洲国产美女搞黄色| 亚洲欧美日韩国产一区二区| 久久精品视频免费观看| 成人av第一页| 国产自产2019最新不卡| 欧美粗暴jizz性欧美20| 午夜免费电影一区在线观看| 一区二区三区在线免费播放| 欧美在线视频你懂得| 在线观看视频免费一区二区三区| 欧美日韩一本到| 亚洲视频久久| 欧美精品在欧美一区二区少妇| 免费在线观看一区二区| 综合激情成人伊人| 亚洲欧美日韩一区在线观看| 国产一区再线| 国产精品sm| 亚洲三级在线免费| 久久久久久久久99精品| 欧美aaaaa成人免费观看视频| 欧美一级二级三级蜜桃| 七七婷婷婷婷精品国产| 亚洲福利视频一区| 日本成人在线网站| 美女网站一区二区| 国产毛片精品一区| 99国产精品国产精品久久| 日韩美女视频一区| 国产女主播一区二区| 韩日av一区二区| 久久亚洲春色中文字幕久久久| 红桃视频国产一区| 欧美激情成人在线| 国产精品一区在线观看你懂的| 九九九久久久精品| 国产乱子伦视频一区二区三区| 久久草av在线| 国产最新精品精品你懂的| 一本一道久久a久久精品 | 精品一区在线看| 欧美日韩国产综合网| 国产午夜精品久久久久久免费视| 91一区二区在线观看| 国产精品一区二区三区四区| 色呦呦日韩精品| 精品制服美女丁香| 精品国产乱码久久久久久牛牛 | 卡一卡二国产精品| 国产精品欧美久久| 日韩欧美自拍偷拍| 免费看的黄色欧美网站| 国产精品亚洲一区二区三区妖精 | 在线欧美日韩精品| 国产成人在线免费观看| 亚洲综合无码一区二区| 精品久久人人做人人爰| 久久久久国产精品一区二区| 欧美日韩ab| 亚洲日本在线天堂| 久久久青草青青国产亚洲免观| 免费在线观看一区| 精品一区二区三区免费视频| 久久天堂av综合合色蜜桃网| 91久久香蕉国产日韩欧美9色| 欧美系列一区| 国产精品99久久久久| 免费看黄色91| 国产精品久99| 国内精品久久国产| 粉嫩在线一区二区三区视频| 首页亚洲欧美制服丝腿| 国产精品久久久久久亚洲伦| 精品日韩99亚洲| 欧美精品1区2区| 麻豆精品网站| 亚洲日本激情| 欧美在线91| 成人不卡免费av| 精品无人码麻豆乱码1区2区| 午夜欧美视频在线观看| 成人免费一区二区三区在线观看| 日韩主播视频在线| 樱桃国产成人精品视频| 欧美不卡视频| 黄色成人精品网站| 欧美人与禽猛交乱配视频| jlzzjlzz欧美大全| 99精品一区二区三区| 丁香婷婷深情五月亚洲| 亚洲麻豆av| 日韩一区精品字幕| 亚洲黄网站在线观看| 国产精品天美传媒| 久久久综合视频| 久久婷婷国产综合国色天香| 欧美变态tickle挠乳网站| 欧美色综合影院| 色系网站成人免费| 久久大逼视频| 亚洲国产免费看| 亚洲成人在线| 亚洲精品精选| 99热免费精品在线观看| 99视频精品| 国产精品美女| 亚洲一区欧美二区| 国产精品一区免费观看| 亚洲国产日韩欧美一区二区三区| 午夜精品久久久久久久99樱桃| 一区二区三区丝袜| 亚洲精品国久久99热| 中文字幕中文字幕一区二区| 中文字幕一区在线观看视频| 亚洲欧洲韩国日本视频| 亚洲欧洲国产日本综合| 国产精品福利一区二区三区| 亚洲欧洲另类国产综合| 亚洲精品亚洲人成人网在线播放| 亚洲乱码日产精品bd| 亚洲一区二区高清| 日本在线观看不卡视频| 狠狠色伊人亚洲综合成人| 国内精品写真在线观看| 国产电影精品久久禁18| av一本久道久久综合久久鬼色| 亚洲电影一级黄| 国产成人精品免费视频网站| 亚洲在线视频免费观看| 精品国产免费一区二区三区香蕉| 免费日韩一区二区| 红桃视频国产精品| 国产成人三级在线观看| 亚洲va欧美va人人爽| 亚洲欧洲精品一区二区三区 |