python表白女神


明天就是情人节了,程序猿们肯定生活中被吐槽的不少,小编也经常被吐槽是直男,不会聊天,不浪漫等等。是不是觉得很憋屈呢,想当年我也是做过8x8x8的led表白神器的人。不过现在因为病毒的影响,大家身边应该没有这些硬件设施,那么今天我就分享一下怎么用程序猿的方式跟女神表白,好了我们进入正题。

女神照片

首先我们先从女神的朋友圈借一张美美哒的照片,这里我就先用我女神的照片(像素1920x1200)
在这里插入图片描述

最终效果

先看一下最终的效果吧
在这里插入图片描述
我们将生成的照片点击放大(Surprise!!!)
在这里插入图片描述

代码实现

其实整个过程并不复杂,只有区区不到30行的代码,原理也很简单
我们都知道每张图片都是由像素点组成的,每个像素点都有自己的颜色,其颜色可以用一个数组来表示:(a,b,c),其中每位数的取值范围都是 0-255,(0,0,0)代表白色,(255,255,255)代表黑色,也就是我们常说的RGB值
这里我在强调一下,使用的照片最好像素高一点,不然会肉眼看到明显的锯齿感
实现的思路就一句话:只要每个像素取出一个像素值,并使用这个像素做为该字的颜色即可,在像素量够多的情况下,从远处看,是能看到我们原来图像的轮廓的。
首先,使用 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)
#字体,可以使用windows系统自带的
font = ImageFont.truetype('C:/Windows/fonts/Dengl.ttf', font_size)

这里字体其实是可以使用系统自带的字体,都在这个路径下:C:/Windows/fonts/
在这里插入图片描述
这些字体都可以选
然后由于需要不断循环 “我喜欢你!”,这五个字符(字符串可以自己自定义)。这里可以使用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("output.jpg")

完整代码

from PIL import Image, ImageDraw, ImageFont

font_size = 7
text = "我喜欢你!"
img_path = "input.jpg"

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("output.jpg")

最后祝大家情人节快乐,表白成功!!!

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值