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

做者:@明哥编程

公众号:Python编程时光数组


2020年,这个看起来如此浪漫的年份,你仍是一我的吗?bash

难不成我还能是一条狗?函数

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

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

因为是很早期的文章了,应该有不少人没有看过。spa

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

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

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

明哥今天来教你如何使用 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")
复制代码

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

  1. 路飞

img

  1. 索隆

img

  1. 山治

img


本文首发于个人我的【公众号】:Python编程时光

上传图片可能会有压缩,查看效果请前往:情人节来了,教你个用 Python 表白的技巧

相关文章
相关标签/搜索