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个像素),效果大概如下。我只需要为每个像素取出一个像素值,并将这个像素作为单词的颜色。如果有足够的像素,我们可以从远处看到原始图像的轮廓。有了idea,我们就可以开始我们的代码了。首先,使用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来实现一个generator。defcharacter_generator(text):whileTrue:foriinrange(len(text)):yieldtext[i]最后给这些字符加上相应的颜色,写入到新建的画布中。foryinrange(0,img_raw.size[1],font_size):forxinrange(0,img_raw.size[0],font_size):draw.text((x,y),next(ch_gen),字体=字体,填充=img_array[x,y],direction=None)最后保存成品img_new.convert('RGB').save("F://gyy_save.jpeg")完整代码如下,供大家参考来自PILimportImage,ImageDraw,ImageFontfont_size=7text="我喜欢你!"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)defcharacter_generator(text):whileTrue:foriinrange(len(文本)):yieldtext[i]ch_gen=character_generator(text)foryinrange(0,img_raw.size[1],font_size):forxinrange(0,img_raw.size[0],font_size):draw.text((x,y),next(ch_gen),font=font,fill=img_array[x,y],direction=None)让我们在最后添加几个效果图(是的,我是海盗迷)。1.路飞2.索隆3.山治
