一个有意思的 Python 训练项目集
逛 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