逛 GitHub 的时候,发现了一个很酷的 Python 训练项目集。一共有 25 个题目,基本涵盖了用 Python 实现的各种功能。
上一周没有复习 C++ 和网络通信全部用来玩这几个题了。题目地址在 –> GitHub | Dumb Ways To Code
现在已经通过各种办法,解决了 0000 ~ 0007 还有一个 0010 这些题目。
今天先来总结一下第 0000 题目的思路。
面向 Google, CSDN, StackOverflow 编程。
一周目的问题 Solutions | PIL or Pillow
第一天遇到的问题是这样的:
【第 0000 题】
将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。(类似于图中效果)
问题分解为:
加载图片
识别图片大小
识别字体文件 TrueType
将文本加到图片右上角并保存
在 PIL 中有 Image, ImageFont, ImageDraw 这三个对象,分别用来实现:
Image: 加载原始图片并将其转换为对象 Object
ImageFont: 加载字体文件
ImageDraw: 将字符添加到图片对象上
Talk is cheap, show me the code.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw, ImageFont
def add_unread_count(img):
draw = ImageDraw.Draw(img)
width, height = img.size
textSize = int(width*0.15)
textColor = '#CB1B45'
textFont = ImageFont.truetype('Arial.ttf', textSize)
draw.text((width*0.8, height*0.02), '99', font=textFont, fill=textColor)
img.save('icon_added.jpg', 'jpeg')
def main():
img = Image.open('icon.jpg')
add_unread_count(img)
if __name__ == '__main__':
main()
代码中:
add_unread_count() 是添加 "99’ 字样的主函数,参数为图片对象 img.
draw = ImageDraw.Draw(img) 将图片对象 img 导入并成为图层背景,我叫它 canvas.
然后 width, height = img.size 确定背景底照的长宽。
ImageFont.truetype('Arial.ttf', textSize) 将字体文件 Arial.ttf 导入并在下一步绘制文本图层时使用。
draw.text((width*0.8, height*0.02), '99', font=textFont, fill=textColor) 将文本 "99’ 绘制到图片右上角。
最后保存图片文件:img.save('icon_added.jpg', 'jpeg')
Reference
参考了 Python 官方文档 PIL 相关使用。
参考了 这个 Repo 里面 大佬们的思路。
面向 Google 和 StackOverflow 编程成功。
?Spencer Woo