|
|
51CTO旗下网站
|
|
移动端

情人节来了,教你个用 Python 表白的技巧

2020年,这个看起来如此浪漫的年份,你还是一个人吗?难不成我还能是一条狗?18年的时候,写过一篇介绍如何使用 Python 来表白的文章。

作者:Python编程时光来源:Python编程时光|2020-02-13 13:50

2020年,这个看起来如此浪漫的年份,你还是一个人吗?

难不成我还能是一条狗?

18年的时候,写过一篇介绍如何使用 Python 来表白的文章。

虽然创意和使用效果都不错,但有一缺点,这是那个exe文件,女神需要打开电脑,才有可能参与进来,进而被你成功"调戏”。

由于是很早期的文章了,应该有很多人没有看过。

没有看过的,你可以点击这里查看:用Python写一个表白神器让你脱离单身

提醒你一下,后天就是 2月14日了。什么?还是一条狗呢?

行吧,那你赶上了,今天的文章,就是为你而写。

明哥今天来教你如何使用 Python 来向心中的女神表白。

前段时间,在微博上刷到了一条推荐。内容是这样的

出于好奇,我点开了,放大再放大,emmm,有点意思吖…

这四个字,对于像我这样腼腆的DS男来说,还真不好意思说,说出来,万一被拒绝了咋办?

使用套路来表白,并观察对方的反应,你大概能清楚对方是否对你也有好感,先测试下自己有几成的把握再下手或许更稳妥。

今天就教大家一个这样的套路:如何使用 Python 来做出来这样的图,有点浪漫,又有点极客。能不能拿下你女神,就要靠你(命)了。(๑•́₃ •̀๑)

首先,你得先找到一张你女神的高清图片(尽量分辨率高点的吧,效果会好点)。

这里我以一张高圆圆的图来做一下演示,原图是这样的(分辨率是:2000*1328)。

使用我写好的脚本运行后,就生成了这样一张图,请你点击,放大再放大。(惊喜?

然后将这张图片发给你的女神,具体话术你自己想咯。

好吧,相比女神来说,你可能更在意这是如何实现的(活该你单身)。

其实原理很简单,代码也还不到20 行。

首先,来讲讲原理。

事实上,每一张图片都是由一个一个的像素点所组成的。而每个像素点,都有自己的颜色,其颜色可以用一个数组来表示:(a,b,c),其中每位数的取值范围都是 0-255。

比如(0,0,0)代表白色,(255,255,255)代表黑色。

当像素点足够多的时候,这张照片就是我们所说的高清照片。

而如果当像素点太少,我们的肉眼就能感知到明显的锯齿感。

用 Excel 画了个图,每一方格代表一个像素,其中若我的字体的大小设置 5(非字号5,而是每个字占用5个像素),效果大概就是如下这样子。

我只要每个像素取出一个像素值,并使用这个像素做为该字的颜色即可,在像素量够多的情况下,从远处看,是能看到我们原来图像的轮廓的。

有了思路,就可以开始我们的代码。

首先,使用 pillow.Image读取图像,并使用load函数获取到每一个像素值。

  1. img_raw = Image.open(img_path) 
  2. img_array = img_raw.load() 

然后新建一张画布,并选好你要使用的字体和字体大小。

  1. img_new = Image.new("RGB", img_raw.size, (0, 0, 0)) 
  2. draw = ImageDraw.Draw(img_new) 
  3. font = ImageFont.truetype('C:/Windows/fonts/Dengl.ttf', font_size) 

由于需要不断循环 “我喜欢你!”,这五个字符。所以这里可以while循环 yield 来实现一个生成器。

  1. def character_generator(text): 
  2.     while True
  3.         for i in range(len(text)): 
  4.             yield text[i] 

最后,要给这些字加上相应的颜色,写入新创建的画布中。

  1. for y in range(0, img_raw.size[1], font_size): 
  2.     for x in range(0, img_raw.size[0], font_size): 
  3.         draw.text((x, y), next(ch_gen), font=font, fill=img_array[x, y], direction=None) 

最后将成品保存

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

完整代码如下,供你参考

  1. from PIL import Image, ImageDraw, ImageFont 
  2.  
  3. font_size = 7 
  4. text = "我喜欢你!" 
  5. img_path = "F://gyy.jpeg" 
  6.  
  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/Dengl.ttf', font_size) 
  13.  
  14. def character_generator(text): 
  15.     while True
  16.         for i in range(len(text)): 
  17.             yield text[i] 
  18.  
  19. ch_gen = character_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) 

最后再多上几张效果图吧(对,我是海贼迷)。

1. 路飞

2. 索隆

3. 山治

【编辑推荐】

  1. 美国国家安全局 NSA 的 Python 培训文档公开
  2. 拒绝低效!Python教你爬虫公众号文章和链接
  3. 注意!在Python中不要所有操作都用列表
  4. 用Python做疫情数据分析,多维度解析传播率和趋势,未来是乐观的
  5. 用什么库写 Python 命令行程序?看这一篇就够了
【责任编辑:华轩 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

Kubernetes:21天完美通关

Kubernetes:21天完美通关

从小白到修神
共29章 | king584911644

190人订阅学习

Python应用场景实战手册

Python应用场景实战手册

Python应用场景实战手册
共3章 | KaliArch

122人订阅学习

一步到位玩儿透Ansible

一步到位玩儿透Ansible

Ansible
共17章 | 骏马金龙1

209人订阅学习

视频课程+更多

小白轻松学MySQL大数据调优

小白轻松学MySQL大数据调优

讲师:齐毅27601人学习过

IPv6技术精讲-Wakin出品

IPv6技术精讲-Wakin出品

讲师:谢斌1273人学习过

19.3crac_生产RHEL7_ORACLE19C_RAC_安装详细实战步骤+打19.4补丁

19.3crac_生产RHEL7_ORACLE19C_RAC_安装详细

讲师:伟哥2127人学习过

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微