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

先看图:

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

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

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

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

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

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

 #使用pillow.Image读取图像,并使用load函数获取到每一个像素值
img_raw = Image.open(img_path)
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",来填充文字

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

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

 #给字体加上颜色写入新创建的画布中
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('F://love.jpeg')

这样就大功告成了。

完整代码如下:

 from PIL import Image, ImageDraw, ImageFont

 font_size = 6
text = " 情人节快乐 "
img_path = "F://Python//1.png"
#使用pillow.Image读取图像,并使用load函数获取到每一个像素值
img_raw = Image.open(img_path)
img_array = img_raw.load()
#新建画布,并选择好使用的字体和字体大小
img_new = Image.new("RGB",img_raw.size,(0,0,0))
draw = ImageDraw.Draw(img_new)
font = ImageFont.truetype('C://Windows//Fonts//STXINGKA.TTF',font_size)
#需要不断输入“xxx”,就要用while循环yield来实现一个生成器
def characte_generator(text):
while True:
for i in range(len(text)):
yield text[i] ch_gen = characte_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('F://love.jpeg')

[学习笔记]用Python简易向喜欢的人表白的更多相关文章

  1. Noah的学习笔记之Python篇:命令行解析

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  2. Noah的学习笔记之Python篇:函数“可变长参数”

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  3. Noah的学习笔记之Python篇:装饰器

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  4. python3.4学习笔记(九) Python GUI桌面应用开发工具选择

    python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者http://www.admin10000.com/document/96 ...

  5. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...

  6. 【学习笔记】Python 3.6模拟输入并爬取百度前10页密切相关链接

    [学习笔记]Python 3.6模拟输入并爬取百度前10页密切相关链接 问题描述 通过模拟网页,实现百度搜索关键词,然后获得网页中链接的文本,与准备的文本进行比较,如果有相似之处则代表相关链接. me ...

  7. 学习笔记之Python 3

    学习笔记之Python 3 教程 https://www.cnblogs.com/pegasus923/p/7624416.html 学习笔记之X分钟速成Python3 https://www.cnb ...

  8. python 学习笔记 9 -- Python强大的自省简析

    1. 什么是自省? 自省就是自我评价.自我反省.自我批评.自我调控和自我教育,是孔子提出的一种自我道德修养的方法.他说:“见贤思齐焉,见不贤而内自省也.”(<论语·里仁>)当然,我们今天不 ...

  9. 第3次作业-MOOC学习笔记:Python网络爬虫与信息提取

    1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业 4.提供图片或网站显示的学习进 ...

随机推荐

  1. ES6扩展

    模板字符串和标签模板 const getCourseList = function() { // ajax return { status: true, msg: '获取成功', data: [{ i ...

  2. 输出redis cluster集群所有节点指定的参数的配置

    需要:实现类似redis-trib.rb call 命令的功能,输出redis cluster集群所有节点指定的参数的配置 redis-trib.rb的输出 [redis@lxd-vm3 ~]$ re ...

  3. 887. 求组合数 III(模板 卢卡斯定理)

    a,b都非常大,但是p较小 前边两种方法都会超时的  N^2 和NlongN  可以用卢卡斯定理  P*longN*longP     定义: 代码: import java.util.Scanner ...

  4. JAVA8对象属性的计算

    Men men = new Men(); men.setName("UU"); men.setAge("56"); Men men1 = new Men(); ...

  5. npm常用模块汇总

    npm常用模块汇总: 点击插件名字,查看使用文档 npm常用模块汇总 node常用模块汇总 gulp常用插件汇总 npx 使用教程:npx使用教程 bable:bable这是JavaScript编译器 ...

  6. 跳跃【BFS】

    From 牛客网:https://ac.nowcoder.com/acm/problem/25160

  7. PAT (Basic Level) Practice (中文)1022 D进制的A+B (20 分)

    输入两个非负 10 进制整数 A 和 B (≤),输出 A+B 的 D (1)进制数. 输入格式: 输入在一行中依次给出 3 个整数 A.B 和 D. 输出格式: 输出 A+B 的 D 进制数. 输入 ...

  8. 论文阅读笔记(七)【TIP2018】:Video-Based Person Re-Identification by Simultaneously Learning Intra-Video and Inter-Video Distance Metrics

    是由一篇 IJCAI2016 扩的期刊. 该篇会议论文的阅读笔记[传送门] 期刊扩充的部分:P-SI2DL 1.问题描述: 在会议论文中介绍的SI2DL方法采用了视频三元组作为视频关系(是否匹配)的逻 ...

  9. java 8 supplier object区别

    起初用supplier的时候,发现用法和object一样呀,只是一个用于生产object工厂方法而已,为什么要新引起这样一个对象呢. 后面查到这篇英语文档,才发现,相比object有如下三个用法: ( ...

  10. 重新机兵回归(MMR)

    重新机兵回归记录 S/L法 Save / Load 法 . 在关键战斗前,先save一把 , 在结算奖励后如果奖励不好 , 再重新load再来过 . 比如说拿红牡丹等 . 还可以在逃跑时用此法 . 随 ...