作者:@明哥
公眾號:Python編程時光
2020年,這個看起來如此浪漫的年份牢撼,你還是一個人嗎匙隔?
難不成我還能是一條狗?
18年的時候熏版,寫過一篇介紹如何使用 Python 來表白的文章纷责。
雖然創(chuàng)意和使用效果都不錯捍掺,但有一缺點,這是那個exe文件再膳,女神需要打開電腦挺勿,才有可能參與進來,進而被你成功"調戲”喂柒。
由于是很早期的文章了不瓶,應該有很多人沒有看過。
沒有看過的灾杰,你可以點擊這里查看:用Python寫一個表白神器讓你脫離單身
提醒你一下蚊丐,后天就是 2月14日了。什么艳吠?還是一條狗呢麦备?
行吧,那你趕上了昭娩,今天的文章凛篙,就是為你而寫。
明哥今天來教你如何使用 Python 來向心中的女神表白栏渺。
前段時間鞋诗,在微博上刷到了一條推薦。內容是這樣的
出于好奇迈嘹,我點開了削彬,放大再放大,emmm秀仲,有點意思吖…
這四個字融痛,對于像我這樣靦腆的DS男來說,還真不好意思說神僵,說出來雁刷,萬一被拒絕了咋辦?
使用套路來表白保礼,并觀察對方的反應沛励,你大概能清楚對方是否對你也有好感,先測試下自己有幾成的把握再下手或許更穩(wěn)妥炮障。
今天就教大家一個這樣的套路:如何使用 Python 來做出來這樣的圖目派,有點浪漫,又有點極客胁赢。能不能拿下你女神企蹭,就要靠你(命)了。(???? ???)
首先,你得先找到一張你女神的高清圖片(盡量分辨率高點的吧谅摄,效果會好點)徒河。
這里我以一張高圓圓的圖來做一下演示,原圖是這樣的(分辨率是:2000*1328)送漠。
使用我寫好的腳本運行后顽照,就生成了這樣一張圖,請你點擊闽寡,放大再放大代兵。(驚喜?
然后將這張圖片發(fā)給你的女神下隧,具體話術你自己想咯奢人。
好吧,相比女神來說淆院,你可能更在意這是如何實現的(活該你單身)何乎。
其實原理很簡單,代碼也還不到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)
由于需要不斷循環(huán) “我喜歡你!”咨跌,這五個字符沪么。所以這里可以while循環(huán) yield 來實現一個生成器。
def character_generator(text):
while True:
for i in range(len(text)):
yield text[i]
最后锌半,要給這些字加上相應的顏色禽车,寫入新創(chuàng)建的畫布中。
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")
最后再多上幾張效果圖吧(對慌洪,我是海賊迷)。
- 路飛
- 索隆
- 山治
本文首發(fā)于我的個人【公眾號】:Python編程時光
上傳圖片可能會有壓縮,查看效果請前往:情人節(jié)來了讥蟆,教你個用 Python 表白的技巧