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

作者:@明哥
公众号:Python编程时光


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

难不成我还能是一条狗?

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

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

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

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

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

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

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

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

img

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

img

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

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

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

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

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

img

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

img

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


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

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

首先,来讲讲原理。

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

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

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

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

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

在这里插入图片描述

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

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

首先,使用 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/Dengl.ttf', font_size)

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

def character_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://gyy_save.jpeg")

完整代码如下,供你参考

from PIL import Image, ImageDraw, ImageFont

font_size = 7
text = "我喜欢你!"
img_path = "F://gyy.jpeg"

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/Dengl.ttf', font_size)

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("F://save.jpeg")

不会改代码?怎么办?

由于经常有一些非技术的朋友,来问我如何搭建环境?如何改代码?人少点还好,我还愿意帮忙解答一下,但人实在有点多,自己也还有秀多自己的事情需要处理,实在无法一一照顾到。

因此我为这些技术小白,写了一个 exe 软件,可以让你在完全不懂编程的情况下,也能生成这样的图片。

这边以 多啦A梦为例。

这是转换前的

这是转换后的(注意放大看
在这里插入图片描述

先给大家看下这个 exe 程序的成品界面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我已经把这个 exe 文件上传到网盘上了,需要的自取。

下载链接:https://wws.lanzoux.com/igrjGlnxw9i
下载链接:https://wws.lanzoux.com/igrjGlnxw9i
下载链接:https://wws.lanzoux.com/igrjGlnxw9i

(重要的事情说三遍)

如果你对这个exe 的源代码感兴趣,在 exe 里有个 下载源码,里面可以下载。。

  • 129
    点赞
  • 358
    收藏
    觉得还不错? 一键收藏
  • 72
    评论
情人节表白python是指使用Python编程语言进行情人节表白的方式。一种常见的表白方式是通过绘制图形来传达爱意,比如使用Python的turtle模块来绘制一个"一箭穿心"的动图。这种图形通常由两个心形组成,中间有一支箭穿过两个心形,寓意着两人相爱。 下面是一个使用turtle模块绘制"一箭穿心"的Python代码示例: ```python from turtle import* color("black","red") width(10) # 设置线的粗细为10像素 pensize(1) begin_fill() penup() goto(50,50) pendown() right(45) goto(100,0) left(90) fd(120) circle(50,225) penup() goto(0,0) pendown() left(135) fd(120) circle(50,225) seth(90) circle(50,225) fd(121) end_fill() left(56) penup() goto(-210,40) pendown() goto(0,80) penup() goto(160,110) pendown() goto(320,140) done() ``` 这段代码使用turtle绘制了一个红色的"一箭穿心"图案。你可以根据自己的需求修改代码中的位置、颜色和线条粗细等参数来实现个性化的情人节表白效果。 另外,如果你对绘制图形不太熟悉,也可以使用PIL库来制作情人节表白图片。下面是一个使用PIL库的Python代码示例: ```python from PIL import Image, ImageDraw, ImageFont font_size = 7 text = "我喜欢你!" img_path = "F://gyy.jpeg" 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/Dengl.ttf', font_size) 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<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python一箭穿心图——情人节表白](https://blog.csdn.net/weixin_44044161/article/details/117391394)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [情人节来了,你个用 Python 表白技巧](https://blog.csdn.net/weixin_36338224/article/details/104287582)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 72
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值