前几天是情人节,就用Python图像库PIL来搞点事情。

先看图:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

[学习笔记]用Python简易向喜欢的人表白 Python 第1张

其实这样看不出什么来,然后需要放大:

[学习笔记]用Python简易向喜欢的人表白 Python 第2张

放大以后就能看到你相对女神说的话。

但是对于学计算机的我来说,更想琢磨是怎样的流程完成的这个图。

--------------------------------------------------------------分割线--------------------------------------------------------------

我们需要用到的是PIL库中的Image,ImageDraw,ImageFont来进行操作

我们需要做的第一步就是使用Image.open()函数来读取图像,并且使用Image.load()函数来获取像素值,图像是由像素点组成的,因此我们需要获取并通过填充字体的颜色来实现改变。

1 #使用pillow.Image读取图像,并使用load函数获取到每一个像素值
2 img_raw = Image.open(img_path)
3 img_array = img_raw.load()

当我们读取完图像并分析完以后需要新建一个画布来尽享填充。

#新建画布,并选择好使用的字体和字体大小
img_new = Image.new("RGB",img_raw.size,(0,0,0)) 
draw = ImageDraw.Draw(img_new)
font = ImageFont.truetype('路径',font_size)

然后我们需要不断输入“XXX",来填充文字

1 #需要不断输入“xxx”,就要用while循环yield来实现一个生成器
2 def characte_generator(text):
3     while True:
4         for i in range(len(text)):
5             yield text[i]

再将字体加上颜色写入新创建的画布中

1 #给字体加上颜色写入新创建的画布中
2 for y in range(0,img_raw.size[1],font_size):
3     for x in range(0,img_raw.size[0],font_size):
4         draw.text((x,y),next(ch_gen),font = font,fill = img_array[x,y],direction = None)

最后保存在图片

 1 img_new.convert('RGB').save('F://love.jpeg')

这样就大功告成了。

完整代码如下:

 1 from PIL import Image, ImageDraw, ImageFont
 2 
 3 font_size = 6
 4 text = " 情人节快乐 "
 5 img_path = "F://Python//1.png"
 6 #使用pillow.Image读取图像,并使用load函数获取到每一个像素值
 7 img_raw = Image.open(img_path)
 8 img_array = img_raw.load()
 9 #新建画布,并选择好使用的字体和字体大小
10 img_new = Image.new("RGB",img_raw.size,(0,0,0))
11 draw = ImageDraw.Draw(img_new)
12 font = ImageFont.truetype('C://Windows//Fonts//STXINGKA.TTF',font_size)
13 #需要不断输入“xxx”,就要用while循环yield来实现一个生成器
14 def characte_generator(text):
15     while True:
16         for i in range(len(text)):
17             yield text[i]
18  
19 ch_gen = characte_generator(text)
20 #给字体加上颜色写入新创建的画布中
21 for y in range(0,img_raw.size[1],font_size):
22     for x in range(0,img_raw.size[0],font_size):
23         draw.text((x,y),next(ch_gen),font = font,fill = img_array[x,y],direction = None)
24 img_new.convert('RGB').save('F://love.jpeg')

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄