微信加人强制通过代码(吊炸天!十行代码我把情书藏进了小姐姐的微信头像里)

作者:豆豆

来源:Python技术

我们都知道,当图片被无限放大后,你会看到一个个小方块,每个小方块都是图片的最小单位。我们称之为像素。换句话说,对于单个像素,它只有一个固定的颜色值,不能再分了。

大胆一点,如果我们在每个像素块上填充不同的文字,组成你想说的话,然后发给你心中的那个人,会不会有意想不到的惊喜?

第一,原则上,这个方案为什么可行?先把整张图片放在一边,单独看这个像素块。

一个像素的大小是1×1像素,但是要把这么大的字装进这么小的图像块里,就算能装进去了,放大后也很难看清楚,更别提后面的惊喜了。

所以我们需要放大像素块,直到足够看清字体为止。用帕森酱测试了很多次,发现15次就够了,再小字体就会很模糊。

同时,由于每个像素块都有自己的颜色值,当我们把像素放大到15×15时,就要填入相应的颜色文本。

处理好这个像素,再对其他所有像素做同样的处理,这样最终的图片会比原来的大15倍,但是从宏观上看图片的颜色值不会发生变化。

模块安装

对图片进行操作,我们用的库是Pillow,可以通过pip直接安装。

安装枕头 初步使用为了故事的顺利展开,你需要熟悉枕头的几个常规操作。

1.创建一张新图片并保存。

from PIL import Image img = Image.new("RGB", (512, 512), (0, 100, 200)) # 创建一张新的图片 Image.new(mode, size, color=0) img.save("img.png")

效果如下所示:从PIL导入Image img = Image . new(& # 34;RGB & # 34,(512,512),(0,100,200)) #创建新图片image.new (mode,size,color = 0) img . save(& # 34;img.png & # 34) 效果如下:



2.重画这幅画

我们可以在上面生成的图片中画一些线,这里有两条对角线。

from PIL import Image img = Image.open("img.png") # 打开图片 draw = ImageDraw.Draw(img) # 取得绘图对象,用于绘制对角线 draw.line((0, 0, img.size[0], img.size[1]), fill=128, width=2) draw.line((0, img.size[1], img.size[0], 0), fill=128, width=2) img.save("img-line.png")

效果如下所示:从PIL导入Image img = Image . open(& # 34;img.png & # 34)#打开图片 draw = ImageDraw。Draw(img) #获取绘制对角线的绘图对象 draw.line ((0,0,img.size [0],img.size [1]),fill=128,width = 2) img.size[1],img.size[0],0),fill = 128,width = 2) img . save(& # 34;img-line . png & # 34;) 效果如下:



微信加人强制通过

3.图像合并

我们也可以将一张图片合并到另一张图片上,这样看起来就像是粘在一起了。

from PIL import Image img = Image.open("img.png") # 打开图片 img_small = Image.new("RGB", (32, 32), 'red') # 创建图片 img.paste(img_small, (20, 20)) # 将 img_small 粘贴到 img 的 (20,20) 位置处 img.save("img-paste.png")

效果如下所示:从PIL导入Image img = Image . open(& # 34;img.png & # 34)#打开图片 img _ small = image . new(& # 34;RGB & # 34, (32, 32), '红色& # 39;)#创建一张图片 img.paste (img_small,(20,20)) #在img img.save的(20,20)位置粘贴img _ small(& # 34;img-paste . png & # 34;) 效果如下:



放大招

有了以上基础,就可以直接上手了。

首先,我们找到了一张张月亮的图片,然后我们打算用“今晚的月光真美”来填充它。当然这里简化了内容,你想告诉对方什么都可以写进去。



首先定义好要用到的基本变量,像素放大尺寸 img_child_size、内容、字体设置、图片路径等。首先定义要用到的基本变量,比如像素放大尺寸img_child_size、内容、字体设置、图片路径等。

from PIL import Image, ImageDraw, ImageFont img_child_size = 15 text = "今晚的月色真美" font = ImageFont.truetype('AliPuHui-Bold.ttf', img_child_size) img_path = './moon.png'

其次创建一个大小为 img_child_size 的小图 img_child 用于填充字体,一个原始图片扩大 img_child_size 倍的新图 img_ans 用于装载前面填充好字体的小图。从PIL导入图片,ImageDraw,Image font img _ child _ size = 15 text = & # 34;今晚的月光真美& # 34; font = image font . truetype(& # 39;alipu hui-bold . TTF & # 39;,img _ child _ size) img _ path = & # 39;。/moon . png & # 39; 其次,创建一个大小为img_child_size的缩略图img_child,用于填充字体,并创建一个原图像放大img_child_size倍的新缩略图img_ans,用于加载前面填充了字体的缩略图。

img = image . open(img _ path) img _ w,img _ h = img . size img _ child = image . new(& # 34;RGB & # 34,(img_child_size,img _ child _ size)) img _ ans = image . new(& # 34;RGB & # 34、(img_child _ size * img _ w,img_child _ size * img _ h)) 最后就是循环遍历原图像的每一个像素点,对于每一个像素点(x,y),将文字好的缩略图img _ child粘贴到新图像img_ans的相应位置。当然,已经做了一些处理来使字体居中。

text_w, text_h = font.getsize("中") # 获取单个文字的宽、高 offset_x = (img_child_size - text_w) >> 1 # 文字水平居中 offset_y = (img_child_size - text_h) >> 1 # 文字垂直居中 char_index = 0 draw = ImageDraw.Draw(img_child) # 小图的绘图对象,用于绘制文字 for x in range(img_w): # 宽在外 高在内,因此文字的方向是从左到右,从上到下排列的 for y in range(img_h): draw.rectangle((0, 0, img_child_size, img_child_size), fill='lightgray') # 绘制背景,看起来会好一些 draw.text((offset_x, offset_y), text[char_index], font=font, fill=img.getpixel((x, y))) # 用(x,y)处像素点的色值绘制字体 img_ans.paste(img_child, (x * img_child_size, y * img_child_size)) char_index = (char_index + 1) % len(text) img_ans.save('moon-text.png')

来看看最终结果。text_w,text _ h = font . getsize(& # 34;中等& # 34;)#获取单个单词的宽度和高度 offset _ x =(img _ child _ size-text _ w)>:& gt;1 #文本水平居中 offset _ y =(img _ child _ size-text _ h)>:& gt;1 #文本垂直居中 char _ index = 0 draw = imagedraw . draw(img _ child)#缩略图的绘图对象用于绘制范围内x的文本 (img _ w):# width。 for y in range(img _ h): draw . rectangle((0,0,img _ child _ size,img _ child _ size),fill = & # 39浅灰色& # 39;)#绘制背景,会更好看 Draw.text ((offset _ x,offset _ y),text [char _ index],font = font,fill = img.getpixel ((x,y)) # Use (x,Color value绘制字体 img _ ans.paste (img _ child,(x * img _ child _ size,y * img _ child _ size)] char _ index =(char _ index+1)% len(text)[/h moon-text . png & .) 看最终结果。



不是很清楚吧?让我们放大。



很有趣,不是吗?继续放大。



呵呵,不意外,不意外。

总结

今天,我们有一个有趣的皮尔逊酱游戏。用单词填充图片。只要明白了图片、像素、文字之间的关系码,就很容易写出来。

您可以还会对下面的文章感兴趣

使用微信扫描二维码后

点击右上角发送给好友