美文网首页
PythonShowMeTheCode(0000): 给头像加上

PythonShowMeTheCode(0000): 给头像加上

作者: tyrone_li | 来源:发表于2016-08-04 15:51 被阅读0次

    1. 题目

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

    2. 实现效果

    原图 结果图
    1. 绘制红色圆形底色
    2. 绘制白色数字

    3. 具体实现

    Python2.7 版本以前,使用pil(python image library)库可以方便的进行图像操作,3.0版本以后pil库不再更新, 需要安装Pillow库来替代。

    pip install pillow
    

    实现代码如下:

    # -*- coding: utf-8 -*-
    from PIL import Image, ImageDraw, ImageFont
    
    
    def add_num(num):
        im = Image.open('one.jpg')
        draw = ImageDraw.Draw(im)
        num_size = min(im.size) // 5  #计算数字大小,返回整数
        font = ImageFont.truetype('C:\Windows\Fonts\Arial.ttf', num_size)
        draw.ellipse((im.size[0] - num_size, 0, im.size[0], num_size), fill=(255, 0, 0))
        draw.text((im.size[0] - num_size + 40, 0), str(num), font=font, fill=(255, 255, 255))
        im.save('0000.jpg', 'jpeg')
        im.show()
    
    if __name__ == '__main__':
        add_num(3)
    

    在调整位置时需要注意,画圆时传入的为圆的外接矩形坐标,画数字时传入的为数字的左上角坐标。

    4. 学习pillow库遇到的问题

    <i><b>i. 设置字体IOError: cannot open resource</b></i>
    在执行ImageFont.truetype(font=None, size=10, index=0, encoding="")时出现这种错误。
    原因可能是字库未找到, 在你的本地文件夹下找到对应的ttf文件,写入绝对路径就可以了。

    <i><b>ii. 画出来的圆形有锯齿,不平滑</b></i>
    ImageDraw中没有具体的设置,如果想要达到光滑的效果,可以先设置图片尺寸*2,之后调用resize()函数尺寸/2,设置filter=Image.ANTIALIAS

    相关文章

      网友评论

          本文标题:PythonShowMeTheCode(0000): 给头像加上

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