zoukankan      html  css  js  c++  java
  • itchat+pillow实现微信好友头像爬取和拼接

    源码下载链接:https://pan.baidu.com/s/1cPZhwy 密码:2t2o

    ###效果图


    使用方法:

    下载项目到本地,打开项目主目录,打开命令行,输入:

    pip install -r requirements.txt
     
    使用pip命令时出了一个错:You are using pip version 7.0.3, however version 9.0.1 is available.
    解决方法:
    使用easy_install指令安装: 
    首先进入到easy_install的目录 例如D:PythonScripts 
    然后通过指令 easy_install.exe pip==9.0.1 安装成功。
    
    之后又提示了一个错误: error: Unable to find vcvarsall.bat
    解决方法:
    我的python版本是3.6 ,网上多数解决方法是降级到2.X。不过我找到一个包,链接:https://pan.baidu.com/s/1pM6mdYj 密码:s3mk
    下载之后按照正常方式安装, 装完就解决了。

    等待安装完成,输入:

    python wxImage.py

    出现如下二维码:

    二维码

    用手机微信右上角的扫一扫,确认登陆即可。在微信的“文件传输助手”会收到你的好友头像拼接图(等待时间取决于你的好友数量)


    核心

    python:

    • itchat(用于爬取头像)
    • pillow(用于拼接图片)

    ##源码详解

    首先登陆python版本微信itchat,生成二维码:

    itchat.auto_login(enableCmdQR=True)

    获取好友列表:

    friends = itchat.get_friends(update=True)[0:]

    然后使用itchat的get_head_img(userName=none)函数来爬取好友列表的头像,并下载到本地:

    num = 0
    
    for i in friends:
        img = itchat.get_head_img(userName=i["UserName"])
        fileImage = open(user + "/" + str(num) + ".jpg",'wb')
        fileImage.write(img)
        fileImage.close()
        num += 1

    计算出每张头像缩小后的尺寸(由于为了拼接之后可以用来作为为微信头像,所以合成的图片大小都是640 * 640的,因为微信头像大小就是640 * 640)

    计算每张头像缩小后的边长(默认为正方形):

    eachsize = int(math.sqrt(float(640 * 640) / numPic))

    计算合成图片每一边分为多少小边:

    numline = int(640 / eachsize)

    缩小并拼接图片:

    x = 0
    y = 0
    
    for i in pics:
        try:
            #打开图片
            img = Image.open(user + "/" + i)
        except IOError:
            print("Error: 没有找到文件或读取文件失败")
        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")

    在微信的文件传输助手发合成后的图片给使用者:

    itchat.send_image(user + ".jpg", 'filehelper')

    ###完整代码:

    from numpy import *
    import itchat
    import urllib
    import requests
    import os
    
    import PIL.Image as Image
    from os import listdir
    import math
    
    itchat.auto_login(enableCmdQR=True)
    
    friends = itchat.get_friends(update=True)[0:]
    
    user = friends[0]["UserName"]
    
    print(user)
    
    os.mkdir(user)
    
    num = 0
    
    for i in friends:
        img = itchat.get_head_img(userName=i["UserName"])
        fileImage = open(user + "/" + str(num) + ".jpg",'wb')
        fileImage.write(img)
        fileImage.close()
        num += 1
    
    pics = listdir(user)
    
    numPic = len(pics)
    
    print(numPic)
    
    eachsize = int(math.sqrt(float(640 * 640) / numPic))
    
    print(eachsize)
    
    numline = int(640 / eachsize)
    
    toImage = Image.new('RGBA', (640, 640))
    
    
    print(numline)
    
    x = 0
    y = 0
    
    for i in pics:
        try:
            #打开图片
            img = Image.open(user + "/" + i)
        except IOError:
            print("Error: 没有找到文件或读取文件失败")
        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")
    
    
    itchat.send_image(user + ".jpg", 'filehelper')

     

  • 相关阅读:
    Xilinx SelectIO资源的使用总结
    Altera usbblaster驱动无法安装的解决办法
    Xilinx FPGA的约束设计和时序分析总结
    OpenMANIPULATORX基本操作
    OpenMANIPULATORX ROS包安装 (Melodic)
    .xacro文件
    open_manipulator OpenCR代码解读
    OpenMANIPULATORX GUI
    ROS建模 urdf
    多机器人Gazebo仿真
  • 原文地址:https://www.cnblogs.com/scios/p/8436327.html
Copyright © 2011-2022 走看看