PythonShowMeTheCode(0000): 给头像加上数字

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容