Python项目:生成微信好友头像拼接图

 
 
import itchat 
import os 
import PIL.Image as Image #PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。
from os import listdir 
import math 

#from wxpy import *

# 实例化,并登录微信

#bot = Bot(cache_path=True)

#自动生成一个图片,从电脑底部跳出来,扫描就行。
itchat.auto_login(enableCmdQR=True) 
#friends是许多字典构成的列表,每个朋友的所有信息构成一个字典,
friends = itchat.get_friends(update=True)[0:] 

user = friends[0]["UserName"] #[0]代表取自己的信息,[friends]代表取UserName对应的值,UserName是键key

print(user) 
#@dc71ffea7e7912610e604a94840938810374d105ed4fe811b2fad06930765c0c.jpg
os.mkdir(user) #函数用于以数字权限模式创建目录得到:D:\ST\Python_work\@dc71ffea7e7912610e604a94840938810374d105ed4fe811b2fad06930765c0c
#@dc71ffea7e7912610e604a94840938810374d105ed4fe811b2fad06930765c0c_friends,这是一个未知格式的文件,但是打不开
num = 0 

for i in friends: 
	img = itchat.get_head_img(userName=i["UserName"]) #得到每位好友的头像
	fileImage = open(user + "/" + str(num) + ".jpg",'wb') 
	#打开文件user + "/" + str(num) + ".jpg"是给每个图片命名。数字开头,jpg格式照片,如果不存在就创建一个这样名字的图片比如3.jpg
	#但是这个文件夹
	fileImage.write(img) 
	fileImage.close() 
	num += 1 #统计好友数目,也给照片命名

pics = listdir(user)  #文件夹user:D:\ST\Python_work\@dc71ffea7e7912610e604a94840938810374d105ed4fe811b2fad06930765c0c按照字母顺序排序

numPic = len(pics) #统计照片数目

print(numPic) 

eachsize = int(math.sqrt(float(640 * 640) / numPic)) #计算每个小头像的边(都是正方形),总图片是640 * 640大小,除以好友个数,

print(eachsize) 

numline = int(640 / eachsize) #计算行数和列数,




#PIL的ImageDraw提供了一系列绘图方法,让我们可以直接绘图
toImage = Image.new('RGBA', (640, 640)) #创建一个(640, 640)大小的图片存放所有的好友的头像
#image = Image.new('RGB', (width, height), (255, 255, 255))

print(numline) #每行的图片数目

x = 0 
y = 0 

for i in pics: #PICS是列表格式,里面有所有好友按照数字从1到好友数目的照片
	try: 
		#这里要打开的是具体的某个文件
		img = Image.open(user + "/" + i) #D:\ST\Python_work\@dc71ffea7e7912610e604a94840938810374d105ed4fe811b2fad06930765c0c\1.jpg
	except IOError: #打不开文件就报错
		print("Error: file open error or cann't find file") 
	else: 
		
		img = img.resize((eachsize, eachsize), Image.ANTIALIAS) #把每个照片设置为刚才得到的大小
		 
		toImage.paste(img, (x * eachsize, y * eachsize)) #放置每个图片的位置
		x += 1 
		if x == numline: #如果一行放到头了,换行,从新开始放
			x = 0 
			y += 1 


toImage.save(user + ".jpg") #保存最终的图片为user + ".jpg"


itchat.send_image(user + ".jpg", 'filehelper') #  # 自动向文件助手里面发送图片,不需要可以关闭
toImage.show()
#我直接放弃了多余的让图片无法成为完整正方形的头像




猜你喜欢

转载自blog.csdn.net/btujack/article/details/80720039
今日推荐