python模仿微信添加好友截图,一键批量生成微信添加好友聊天截图

时间:2024-03-08 18:39:54
# -*- coding: utf-8 -*-
import time,random,os,shutil
import PIL.Image as Image
import PIL.ImageColor as ImageColor
import PIL.ImageDraw as ImageDraw
import PIL.ImageFont as ImageFont
# from PIL import Image, ImageDraw
"""
    整体思路    :先生成时间等字符,然后再把头像,姓名获取到,缩小,圆角,合并,保存,移除已经添加过的头像名字
    代码还没优化暂时就这样把  后面有空在搞,
   author@:xiaohe
   QQ496631085
   python3.7
"""
quanju_path=[]
def circle_corner(img, radii):
    """
    圆角处理
    :param img: 源图象。
    :param radii: 半径,如:30。
    :return: 返回一个圆角处理后的图象。
    """
    # 画圆(用于分离4个角)
    circle = Image.new(\'L\', (radii * 2, radii * 2), 0)  # 创建一个黑色背景的画布
    draw = ImageDraw.Draw(circle)
    draw.ellipse((0, 0, radii * 2, radii * 2), fill=255)  # 画白色圆形
    # 原图
    img = img.convert("RGBA")
    w, h = img.size
    # 画4个角(将整圆分离为4个部分)
    alpha = Image.new(\'L\', img.size, 255)
    alpha.paste(circle.crop((0, 0, radii, radii)), (0, 0))  # 左上角
    alpha.paste(circle.crop((radii, 0, radii * 2, radii)), (w - radii, 0))  # 右上角
    alpha.paste(circle.crop((radii, radii, radii * 2, radii * 2)), (w - radii, h - radii))  # 右下角
    alpha.paste(circle.crop((0, radii, radii, radii * 2)), (0, h - radii))  # 左下角
    # alpha.show()
    img.putalpha(alpha)  # 白色区域透明可见,黑色区域不可见
    return img
def ruiji_jpgname(path):
    all_img_name=os.listdir(path)
    # for x in range(1,len(all_img_name)):
    # 取随机数
    x=random.randint(1,len(all_img_name))
    name = fenge_houzui(all_img_name[x])
    
    # print(all_img_name[x])
    # 打印文件图片名称和后缀
    # 打印名称
    # print(fenge_houzui(all_img_name[x]))
    return  name
#对象,位置   字体  字体大小   字体颜色     添加内容
def imgAddFont(im1,gps,font,fontSize,fontColor,data):
    # 在图片上添加文字 1
    draw = ImageDraw.Draw(im1)
    #设置字体
    time_font = ImageFont.truetype(font, fontSize)
    # (0,0):坐标 "内容":添加的字体 (0,0,255):字体颜色 font:字体大小
    draw.text(gps,data,fontColor,font=time_font)
    draw = ImageDraw.Draw(im1)

def copy(h,m,z,n,v):
    #手机当前时间  系统时间
    systime = str(h) + ":"+str(m)
    #小时随便减去多少
    add_h=random.randint(0,1)
    #分钟随便减去多少
    add_m=random.randint(2,7)
    #添加好友的时间
    addtime = str(h-add_h) + ":"+str(m-add_m)
    #标题名称
    # qun_name = "电销 " + n
    qun_name = ruiji_jpgname(".\\img")

        # 打开头像原图检测是否存在不存在就换个后缀
    jpg_path = \'.\\img\\\' + (str(qun_name))

    if os.path.exists(jpg_path+".jpg"):
        img = Image.open(jpg_path+".jpg")
    else:
        print(jpg_path)
        img = Image.open(jpg_path+".png")
    # 关闭打开文件,移动文件
    # Image.close()
    quanju_path.append(jpg_path+".jpg")


    #电池电量
    diannum = str(v)
    #打开图片 
    im1=Image.open("new.png")
    #系统时间  (宽  高)
    imgAddFont(im1,(17,20),\'C:\Windows\Fonts\msyh.ttc\',38,(50,50,50),systime)
    #电池电量
    imgAddFont(im1,(1012,21),\'C:\Windows\Fonts\simhei.ttf\',29,(50,50,50),diannum)
    #群姓名
    imgAddFont(im1,(120,108),\'C:\Windows\Fonts\msyh.ttc\',49,(50,50,50),qun_name)
    #添加时间
    imgAddFont(im1,(490,260),\'C:\Windows\Fonts\msyh.ttc\',38,(170,170,170),addtime)
    # #发消息时间
    # imgAddFont(im1,(490,260),\'C:\Windows\Fonts\msyh.ttc\',38,(170,170,170),addtime)
    # 保存位置  22 370
    # img=im1
    # 已经添加好完整的文字了,下面添加图片  打开  缩略   圆角  合并


    
    #缩放等比例的尺寸
    w, h = img.size
    img.thumbnail((118, 118))  # 尺寸等比缩放
    img_touxiang = circle_corner(img, radii=10)
    # 打开底图
    
    layer = Image.new(\'RGBA\', im1.size, (0,0,0,0))
    layer.paste(img_touxiang, (20, 370))
    out=Image.composite(layer,im1,layer)
    # out.save("target.png")


    save_time=time.strftime(\'%Y_%m_%d_%M_%H\',time.localtime(time.time()))
    out.save(".\\end\\"+save_time +str(z)+".png")
    # out.save("target.png")


def fenge_houzui(file_name,fu=\'.\'):
# 分割后缀,返回文件名字
    z = file_name.split(fu)
    print(file_name)
    print(z)
    if len(z)>2:
        z = file_name.split(\'.jp\')
    return z[0]



# 程序入口
h=int(input("请输入手机几点"))
m=int(input("请输入现在几分"))
v=int(input("请输入现在电量"))
z=int(input("请输入需要生成多少张图片"))

# 判断生成多少个图片
for x in range(1,z+1):
    if z<2:    
        n=input("请输入标题昵称 例如好友")
        copy(h,m,x,n,v)
    copy(h,m,x,"__",v)

# 把已经生成过的就移动到end文件夹里面
for x in range(0,len(quanju_path)):
    try:
        print(quanju_path[x])
        shutil.move(quanju_path[x],".\\img_end")

    except Exception as e:
        raise e
            
整体思路    :先生成时间等字符,然后再把头像,姓名获取到,缩小,圆角,合并,保存,移除已经添加过的头像名字
    代码还没优化暂时就这样把  后面有空在搞,
   author@:xiaohe
   QQ496631085
   python3.7


只需要创建2个文件夹 img(里面是放的头像,头像命名就是网名)和end(存放最后的截图)img_end(程序把用过的头像放到里面的)