欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python练习:0000,python实现头像消息未读

程序员文章站 2022-07-12 13:16:07
...

更多题目参考:https://github.com/Show-Me-the-Code/show-me-the-code

题目:
    将 QQ 头像、微信头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。

我使用的图片是直接从微信头像下载下来的,所以红色圆圈跟数据的位置是根据这类图片大小调的。若是使用其它大小的图片可能会出现位置不对,需要自己调整。当然我自己试了各种大小的图片,并没有出现位置不对。

效果展示:

Python练习:0000,python实现头像消息未读

# !/usr/bin/python
# -*- coding: utf-8 -*-

from PIL import Image, ImageDraw, ImageFont
import matplotlib.pyplot as plt

# 自定义添加数字的函数
def add_num(img):
    width, height = img.size
    RD = min(width *6 //16, height*6 //16)   # 获得圆的直径RD    
    Red = (255, 0, 0)   # 红色 也可以写成 Red = '#ff0000'
    White = "#ffffff"  # 白色  White = (255, 255, 255)

    myfont = ImageFont.truetype('C:/windows/fonts/Arial.TTF', size = RD-80)
    Add_num = '1'
    print(RD)

    img2 = Image.new(mode='RGBA', size=(width+RD, height+RD))   # RGBA 的A是透明度
    img2.paste(img,(RD//2,RD//2))  # 将图片放在一个更大的透明背景图片上
    draw = ImageDraw.Draw(img2)
    width, height = img2.size
    positionC = (width - RD-100, 100, width-100, RD+100)  # 圆C的位置范围,图像右上角 (left, top, right, bottom)
    positionNum = (width - RD * 3 // 4-100, -RD * 1 / 16+143)  # 数字Num的起始位置
    draw.ellipse(positionC , fill = Red)  # 在图像的右上角画出一个红圆
    draw.text(positionNum, Add_num , font = myfont , fill = White)  # 在红圆中写出数字
    img2.save('new3.png')  # 有透明度 故保存为png
    # plt.imshow(img2)
    # plt.show()

if __name__ == '__main__':
    image = Image.open('C:\\Users\Administrator\Desktop\\1.png')
    add_num(image)