前几天是情人节,就用Python图像库PIL来搞点事情。
先看图:
其实这样看不出什么来,然后需要放大:
放大以后就能看到你相对女神说的话。
但是对于学计算机的我来说,更想琢磨是怎样的流程完成的这个图。
--------------------------------------------------------------分割线--------------------------------------------------------------
我们需要用到的是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 defcharacte_generator(text):3 whileTrue:4 for i inrange(len(text)):5 yield text[i]
再将字体加上颜色写入新创建的画布中
1 #给字体加上颜色写入新创建的画布中
2 for y in range(0,img_raw.size[1],font_size):3 for x inrange(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 importImage, ImageDraw, ImageFont2
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 defcharacte_generator(text):15 whileTrue:16 for i inrange(len(text)):17 yieldtext[i]18
19 ch_gen =characte_generator(text)20 #给字体加上颜色写入新创建的画布中
21 for y in range(0,img_raw.size[1],font_size):22 for x inrange(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')
内容来源于网络如有侵权请私信删除