美文网首页Python开发技术Pythonpython 初见
用 Python 的 PIL 模块为头像添加“未读消息”提示

用 Python 的 PIL 模块为头像添加“未读消息”提示

作者: CyanGoat | 来源:发表于2016-08-27 15:58 被阅读451次

    Python 练习册 的第0000题
    描述:将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。 类似于图中效果

    效果展示

    既然是图像处理,我觉得 PIL 可以胜任,如果是初步上手,可以看看 廖雪峰的Python教程 - PIL。当然,光是教程里使用的函数是不够用的,所以再查查官方的文档
    我上下翻阅文档觉得可以使用以下函数:


    代码演示

    代码是基于 Python3 的,Python2 的 PIL 模块有所不同。

    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    from PIL import Image, ImageDraw, ImageFont
    
    im = Image.open("test.jpeg")  # 创建图片对象
    w,h = im.size  # 获取图片对象的宽和高
    font = ImageFont.truetype('/Library/Fonts/Arial Rounded Bold.ttf', int(h/4))
    # 创建字体对象,我把字体的大小设为高度1/4,如果数字多于个位应该再小点
    
    ImageDraw.Draw(im).pieslice([(w/3*2, 0), (w, h/3)], 0, 360, fill="red")
    # 绘制圆形,第一个参数界定绘制区域,我选择了宽高为原图1/3的右上角区域
    # 不难发现坐标系是以左上角为原点,向下y递增,向右x递增
    ImageDraw.Draw(im).text((w * 0.76, h * 0.02), '5', font=font, fill="white")
    # 第一个参数是坐标,第二个参数是文本绘制内容,第三个是字体对象
    
    im.show()  # 展示绘制结果(使用系统默认的图片浏览器)
    #当然也可以用im.save()函数保存结果
    

    让我们测试一下:

    处理前 处理后

    效果还不错。
    共计7行代码就完成了这个功能,当然通过修改可以写成命令行脚本、批处理脚本,或者更加智能化。

    相关文章

      网友评论

        本文标题:用 Python 的 PIL 模块为头像添加“未读消息”提示

        本文链接:https://www.haomeiwen.com/subject/itqtettx.html