Python 练习册,每天一个小程序——第 0000 题

第 0000 题

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

qq头像消息显示

关于这套题,对于大佬估计三两下搞定了吧,而对于我这个菜鸟,还是费了一些功夫,下午把Image模组学习了一下,晚上花了2个多小时才把所有问题搞明白。相关链接参考如下:

1、Image 模组学习

2、ImageDraw 模组学习

3、Python PIL | ImageDraw.Draw.text()

晚上开始调试这个题目的代码,虽然有参考代码,但是可能参考代码是一些标准模板,很多细节的地方还是要自己去一一解决,为了帮助大家节省不必要的时间,本人把中间遇到的问题贴出来,供大家参考。以下是完整的代码和注释:


from PIL import Image, ImageDraw, ImageFont   #导入相应的库

def write_text_on_image(img):     #定义一个写数字的函数

    draw = ImageDraw.Draw(img)    #该ImageDraw模块为Image对象提供简单的2D图形 。您可以使用此模块来创建新图像,注释或修饰现有图像,以及即时生成图形以供Web使用。

    w,h = img.size    #图像像素的宽和高

    fnt = ImageFont.truetype('D:/pystd/arial.ttf', 100)    #选择字体类型和字号,注意路径,初学的话很多错误都是路径造成的,建议将windows下的fonts文件下找一个字体拷贝到你练习的文件中,这样方便测试

    draw.text((0.9*w,0.02*h), "5", font=fnt, fill='red')     #0.9*w,0.02*h是用来调节数字的位置,5是要显示的数字,red定义为红色

    img.save(r'D:\pystd\qqImage3.jpg')   #保存到对应的测试文件夹路径下


if __name__ == '__main__':

    img1 = Image.open(r'D:\pystd\qqImage.jpg')   #开始读写操作之前,必须先打开文件。打开文件会在操作系统和文件功能之间建立链接。注意前面那个r也可以不用,但是会出现警告,'r'前缀告诉Python不要看\字符,也不用特殊字符替换它们。基本上,这意味着原始数据。正则表达式使用反斜杠字符('\')表示特殊形式,或允许使用特殊字符而无需调用特殊含义。这与Python在字符串文字中出于相同目的使用相同字符的目的相冲突。例如,要匹配文字反斜杠,可能必须写“ \\\\”作为模式字符串,因为正则表达式必须为\\,并且每个反斜杠必须在正则Python字符串文字中表示为\\。解决方案是将Python的原始字符串表示法用于正则表达式模式。反斜杠在以'r'开头的字符串文字中不会以任何特殊方式处理。所以r“ \ n”是一个包含'\'和'n'的两个字符的字符串,而“ \ n”是一个包含换行符的一个单字符的字符串。

    write_text_on_image(img1)    #写数字的函数参数传递

img1.show()  #显示结果


问题小结:主要集中在打开图片的路径和字体的路径问题,只要解决这两个问题,剩下的基本上可以完全按网上的示例拿来直接使用。

你可能感兴趣的:(Python 练习册,每天一个小程序——第 0000 题)