Python图片制作下如何用QQ好友头像拼接出里昂

  

Python图片制作下如何用QQ好友头像拼接出里昂,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

在本篇博客中,我们将实现两个功能:

<李>

将所有头像合并为大图

<李>

将所有头像以某个模板合成大图

同样,先给上所有运行效果图:

 Python图片制作下如何用QQ好友头像拼接出里昂

代码实现

<强> 1,代码所需库

 import 请求,编解码器,再保险公司urllib,操作系统,随机的,数学
  得到PIL  import 形象
  import  numpy  as  np
  import  cv2  as  cv 

2代码讲解

 Python图片制作下如何用QQ好友头像拼接出里昂

2.1,将小头像合并为大图

对于这个,就是直接将每个小头像贴在大图上就行了,这个利用形象的粘贴函数就可以解决。对于贴的顺序就可以直接按照下面图示一个个贴:

 Python图片制作下如何用QQ好友头像拼接出里昂

所以,直接给出代码:

 def  simple_split (filepackage、大小littlesize):, #简单拼接,参数为图片文件名,每行每列的大小,小头像图片的大小
  row 才能;[0]=,大小
  col 才能=,大小[1]
  bigimg 才能=,Image.new (& # 39; rgba # 39; (littlesize *行,littlesize *坳)),,#结果图
  number 才能=0
  for 才能小姐:范围(行):拷贝,#行
  ,,,for  j 范围(col):拷贝,#列
  ,,,,,randpic =, random.randint (friends_count)
  ,,,,,img =, Image.open (filepackage + str (randpic) + & # 39; . png # 39;) .convert (& # 39; rgba # 39;)
  ,,,,,img =, img.resize ((littlesize littlesize))
  ,,,,,loc =,(我* littlesize j * littlesize (i + 1) * littlesize (j + 1) * littlesize)
  ,,,,,印刷(loc、数量)
  ,,,,,号码+=1
  ,,,,,bigimg.paste (img, loc)
  bigimg.save才能(resultSavePath) 

由于好友不多,所以我们每次就随机选择一个好友头像贴上去,所以如果你的密度大的话最后出现的头像有很多重复的头像。

给大家展示下最后我的图片吧:

 Python图片制作下如何用QQ好友头像拼接出里昂

2.2,以某个图片为模板拼接图片

由于不清楚有没有能够直接做出来的第三方库,所有我就自己造了个小轮子。

思路:

将模板分为x B的小图,就将它的位置形容为图片[我][j]吧,然后获取每个小图的平均RGB值,将图片[我][j]的平均RGB值和好友头像的RGB值做对比,找出最接近的头像,然后将该头像插入在图像的照片[我][j]处。

思路还是比较简单吧? ? ? ?

接下来就是实现了:代码很多地方都给出了注释,我就不多讲了,直接给出代码:

 import 请求,编解码器,再保险公司urllib,操作系统,随机的,数学
  得到PIL  import 形象
  import  numpy  as  np
  import  cv2  as 简历
  
  时间=txtpath  & # 39; C:/用户/11037/桌面/测试/qqfriends.txt& # 39;,, #你从QQ邮箱中粘贴的文件
  时间=savepath  & # 39; C:/用户/11037/桌面/touxiang/& # 39;,, #头像存储位置
  
  时间=resultSavePath  & # 39; C:/用户/11037/桌面/result2.png& # 39;,,, #结果存储位置
  时间=modePath  & # 39; C:/用户/11037/桌面/leno.jpg& # 39;,,,, #模板存储位置
  
  friends_count =, 0,,, #好友数量
  时间=all_mean_rgbs [],,, #存储计算出的所有平均rgb值
  
  def  meanrbg (img):,, #计算图片平均rgb
  时间=rgb 才能;np.array (img)
  r 才能=,int(圆(np.mean (rgb (:,,,,, 0))))
  g 才能=,int(圆(np.mean (rgb (:,,,,, 1))))
  b 才能=,int(圆(np.mean (rgb (:,,,,, 2))))
  return 才能;(r, g, b)
  
  def  gettouxiang (txtpath): #输入你的txt文件存储位置
  file 才能=,codecs.open (txtpath & # 39; rb # 39;, & # 39; utf - 8 # 39;)
  s =,才能以()
  时间=pattern 才能;re.compile (" # 39; \ d + @qq.com& # 39;)
  时间=all_mail 才能;pattern.findall (s),, #正则表达式匹配所有的qq号
  时间=all_link 才能;[],,#用于存储需要访问的链接
  时间=url 才能;& # 39;http://qlogo.store.qq.com/qzone/& # 39;
  for 才能;mail  all_mail:拷贝
  ,,,qq =, mail.replace (& # 39; @qq.com& # 39; & # 39; & # 39;)
  ,,,l =, url  +, qq  + & # 39;/& # 39; + qq + & # 39;/100 & # 39;
  ,,,all_link.append(左)
  小姐:才能=1
  for 才能;link 拷贝all_link:,,, #遍历链接,下载头像
  ,,,saveurl =, savepath + str (i) + & # 39; . png # 39;
  ,,,savaImg(链接,saveurl)
  ,,,小姐:+=1
  ,,,print(& # 39;已下载& # 39;,我)
  friends_count 才能=,len (all_link), #获取朋友头像数量
  return 才能正确
  
  def  savaImg (picurl saveurl):,, #存储图片函数,picurl是图片的URL, saveurl是本地存储位置
  尝试才能:
  ,,,bytes =, urllib.request.urlopen (picurl)
  ,,,file =,开放(saveurl & # 39; wb # 39;)
  ,,,file.write (bytes.read ())
  ,,,file.flush ()
  ,,,file.close ()
  ,,,return 真实的
  除了才能:
  ,,,print(& # 39;担心# 39;)
  ,,,savaImg (picurl saveurl)
  
  
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

Python图片制作下如何用QQ好友头像拼接出里昂