Python情人节表白女神代码(修订版)
引言:又是一年一度的情人节来临之际,最近后台私信不断,槽点:20年初写的表白女神代码无法调试出结果,临时加更本篇内容(对每一行进行了注释解析,自定义妥妥保姆级教程),希望能帮到有需求的伙伴们。文末有彩蛋喔!
1.前置准备
- Python3.x
- Python第三方库Pillow
- 勤劳的双手,清晰的头脑
- Cmd中安装第三方库(pip install Pillow),使用镜像源提速,如果不会配备镜像,请戳此处简单配置镜像使pip安装第三方库提速100倍
- Pycharm中安装,具体流程自行百度
2.图片选择
选择我心目中草原无所不能的角色作为此篇的题材
ps:这里的图片选择清晰度越高处理后的细节效果越佳,我这边条件有限只找到张高清的做演示
处理效果,细节这里就不做展示了,代码下方已给出,自行调试出来更有感觉。
3.源码贡献
流程简述
其实整个过程并不复杂,纯代码只有区区不到30行的代码,原理也很简单
我们都知道每张图片都是由像素点组成的,每个像素点都有自己的颜色,
其颜色可以用一个数组来表示:(a,b,c),其中每位数的取值范围都是 0-255,(0,0,0)代表白色,(255,255,255)代表黑色,也就是我们常说的RGB值
这里我在强调一下,使用的照片最好像素高一点,不然会肉眼看到明显的锯齿感
实现的思路就一句话:只要每个像素取出一个像素值,并使用这个像素做为该字的颜色即可,在像素量够多的情况下,从远处看,是能看到我们原来图像的轮廓的。
首先,使用 pillow.Image读取图像,并使用load函数获取到每一个像素值
// 导包
from PIL import Image, ImageDraw, ImageFont, ImageMode
// 字体大小
font_size = 7
// 背景填充字体
text = "懒羊羊"
// 图片存放位置及图片名称,建议建立独立文件夹将代码和处理的图片放在同一层级,这里给没有linux基础的铁子科普下./释义在当前目录下存在lanyy.jpg这个图层
img_path = "./lanyy.jpg"
# 导入ta的图片,我这里是懒羊羊,铁子们应该懂这里用谁的照片吧,手动狗头
img_raw = Image.open('lanyy.jpg')
# 新建一张画布
img_array = img_raw.load()
# 字体颜色,可取网上自行翻阅RGB大神调色
img_new = Image.new("RGB", img_raw.size, (0, 0, 0))
draw = ImageDraw.Draw(img_new)
# 字体,使用了windows系统自带的字体,为了增加代码的适配性,我使用的字体是win用户默认存在的,可以不修改直接调用
font = ImageFont.truetype('C:/Windows/fonts/Dengl.ttf', font_size)
# 然后由于需要不断循环 “懒羊羊”,这三个字符(字符串可以自己自定义,如:我xx)。我这里使用while循环 使用yield 来实现一个生成器,减少不必要的内存开支
def character_generator(text):
while True:
for i in range(len(text)):
yield text[i]
# 为字体添加相应的颜色,写入新创建的画布中
ch_gen = character_generator(text)
# 可自定义颜色,修改参数即可
for y in range(0, img_raw.size[1], font_size):
for x in range(0, img_raw.size[0], font_size):
draw.text((x, y), next(ch_gen), font=font, fill=img_array[x, y], direction=None)
# 将生成的图片保存在本地目录
img_new.convert('RGB').save("wolanyy.jpg")
4. 拓展修改
替换字体,选择自己喜欢的字体添加为背景墙
往期绘图
玫瑰花绘图直达链接请戳此
了解更多知识请戳下: