1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        這段 Python 代碼,可以讓你脫單

        共 4454字,需瀏覽 9分鐘

         ·

        2020-02-13 23:21


        閱讀本文大概需要 3 分鐘。


        昨天的時候,看到了明哥在群里發(fā)的一篇文章,情人節(jié)來了,教你個用 Python 表白的技巧,里面寫了怎么來做一張神秘的表白圖片,感覺寫的很有意思,技術(shù)也非常值得研究,正好研究了說不定大家也能用得上。


        看完文章后,我也親自實驗了一下,制作了一張專屬給女朋友表白的圖片發(fā)給了她,嘿嘿!超級開心!小馬情人節(jié)快樂!


        下面是明哥的原文,最最后還有我的補(bǔ)充,大家一定一定一定要看到最后哦。


        63911bc3511950a16fb6b5db29508c49.webp

        作者@明哥
        公眾號Python編程時光

        2020 年,這個看起來如此浪漫的年份,你還是一個人嗎?

        難不成我還能是一條狗?

        18 年的時候,寫過一篇介紹如何使用 Python 來表白的文章。

        雖然創(chuàng)意和使用效果都不錯,但有一缺點,這是那個 exe 文件,女神需要打開電腦,才有可能參與進(jìn)來,進(jìn)而被你成功"調(diào)戲”。

        由于是很早期的文章了,應(yīng)該有很多人沒有看過。

        沒有看過的,你可以點擊這里查看:用Python寫一個表白神器讓你脫離單身

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

        行吧,那你趕上了,今天的文章,就是為你而寫。

        明哥今天來教你如何使用 Python 來向心中的女神表白。

        前段時間,在微博上刷到了一條推薦。內(nèi)容是這樣的

        c8f7bddc28b62de33e6b5cd94f35e9b9.webp

        出于好奇,我點開了,放大再放大,emmm,有點意思吖…

        b603b3508da958b60a989e70c72b9237.webp

        這四個字,對于像我這樣靦腆的 DS 男來說,還真不好意思說,說出來,萬一被拒絕了咋辦?

        此處補(bǔ)充:把圖片放大放大再放大,你就能看到秘密。

        使用套路來表白,并觀察對方的反應(yīng),你大概能清楚對方是否對你也有好感,先測試下自己有幾成的把握再下手或許更穩(wěn)妥。

        今天就教大家一個這樣的套路:如何使用 Python 來做出來這樣的圖,有點浪漫,又有點極客。能不能拿下你女神,就要靠你(命)了。(???? ???)

        首先,你得先找到一張你女神的高清圖片(盡量分辨率高點的吧,效果會好點)。

        這里我以一張高圓圓的圖來做一下演示,原圖是這樣的(分辨率是:2000*1328)。

        63911bc3511950a16fb6b5db29508c49.webp

        使用我寫好的腳本運(yùn)行后,就生成了這樣一張圖,請你點擊,放大再放大。(驚喜?

        7c4111750b02c89f5850f5cd811aef3b.webp

        然后將這張圖片發(fā)給你的女神,具體話術(shù)你自己想咯。


        好吧,相比女神來說,你可能更在意這是如何實現(xiàn)的(活該你單身)。

        其實原理很簡單,代碼也還不到 20 行。

        首先,來講講原理。

        事實上,每一張圖片都是由一個一個的像素點所組成的。而每個像素點,都有自己的顏色,其顏色可以用一個數(shù)組來表示:(a,b,c),其中每位數(shù)的取值范圍都是 0-255。

        比如 (0,0,0) 代表白色,(255,255,255) 代表黑色。

        當(dāng)像素點足夠多的時候,這張照片就是我們所說的高清照片。

        而如果當(dāng)像素點太少,我們的肉眼就能感知到明顯的鋸齒感。

        用 Excel 畫了個圖,每一方格代表一個像素,其中若我的字體的大小設(shè)置 5(非字號 5,而是每個字占用 5 個像素),效果大概就是如下這樣子。

        58628213c07090e7e37e7a45ea73e471.webp

        我只要每個像素取出一個像素值,并使用這個像素做為該字的顏色即可,在像素量夠多的情況下,從遠(yuǎn)處看,是能看到我們原來圖像的輪廓的。

        有了思路,就可以開始我們的代碼。

        首先,使用 pillow.Image 讀取圖像,并使用 load 函數(shù)獲取到每一個像素值。

        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 來實現(xiàn)一個生成器。

        def?character_generator(text):
        ????while?True:
        ????????for?i?in?range(len(text)):
        ????????????yield?text[i]

        最后,要給這些字加上相應(yīng)的顏色,寫入新創(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")


        最后再多上幾張效果圖吧(對,我是海賊迷)。
        1.?路飛

        7230597e869fc85a9691b5aefd998f37.webp


        2.?索隆

        149658009f829b7e81329bd6c19a5f0b.webp


        3. 山治

        1fb894ee06ad055bb060232b2884ea16.webp


        接下來是我(崔慶才)補(bǔ)充的內(nèi)容了。


        看完之后,我復(fù)制下來也來了一段。其中明哥里面有使用一個字體文件,我這邊沒有這個字體,于是我就自己下載了一個「阿里巴巴普惠體」,大家如果沒有的話可以自行來下載,或者大家有中文字體文件也可以直接用,或者直接到我改好的源代碼這里來?。篽ttps://github.com/Germey/TextImage,里面我上傳了這個字體文件。


        另外我修改成了支持批量處理的方式,如果你有很多張圖片,可以放到 inputs 文件夾下,它會順次處理并輸出到 outputs 文件夾下,就不用再一個個定義圖片名稱啦。


        我還增加了一個參數(shù)叫做 font_space,原來的代碼生成的字可能有點緊湊,這里我增加這個參數(shù)可以控制字和字的距離,比如 font_space = 1,字間距就是字的大小,就是緊密排布的,如果改大一點,比如 font_space = 1.2,字間距就會變成字的 1.2 倍,就留有字大小的 0.2 倍的空隙。


        最終代碼如下:

        from PIL import Image, ImageDraw, ImageFont
        from glob import glob
        from os.path import basename, join

        # 字體大小
        font_size = 8
        # 字體間距,1 即間距正好為字體大小,緊湊排布,1.2 為字體大小的 1.2 倍
        font_space = 1.2
        # 繪制的文本
        text = '老婆我愛你'
        # 字體文件的路徑
        font_file = 'Alibaba-PuHuiTi-Regular.ttf'
        # 輸入圖片路徑
        inputs_folder = 'inputs'
        # 輸出圖片路徑
        outputs_folder = 'outputs'def process(path):
        img_raw = Image.open(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(font_file, size=font_size)

        def character_generator(text):whileTrue:
        for i in range(len(text)):
        yield text[i]

        ch_gen = character_generator(text)

        for y in range(0, img_raw.size[1], int(font_size * font_space)):
        for x in range(0, img_raw.size[0], int(font_size * font_space)):
        draw.text((x, y), next(ch_gen), font=font, fill=img_array[x, y], direction=None)

        img_new.convert('RGB').save(join(outputs_folder, basename(path)))

        if __name__ == '__main__':
        for path in glob(join(inputs_folder, '*')):
        print('starting processing', path)
        process(path)
        print('finished processing', path)

        來吧,到了 show 圖的時候了。


        準(zhǔn)備好了嗎?


        來了來了。



        780f00581003cc9fbae1e6a72a8c941c.webp

        40139c3fe6a04b98f4a2f5ca5c4145a9.webp

        8640b3580563f17b1afc0a62152d5ab2.webp

        5a1e30c7007675c173408ae50cb9db5c.webp

        結(jié)果如下:



        7fd51ef28786900321ec3133ced9ee96.webp

        27389a2db55a44ac303f09fb0196afa6.webp

        98fb4b518a3bf4f68aa058addef4724e.webp

        7753f647fa5594822e80a90581311e47.webp


        啊!你看!既可以寫原創(chuàng)又可以秀女朋友照片!天啊生活怎么這么幸福!

        美滋滋!


        說干就干,我把照片發(fā)給了女朋友想得到她的一句夸獎。


        c368a11071dae00c2218e1086c9926cc.webp

        6af8beeeaca6c9f5fc3f9e09b9896587.webp?


        ?。



        ee7b781ce52f1a5f32900578a966171b.webp


        那,那好吧...

        be812a3fb3dbe4c72ef36dd74e502d69.webp



        哈哈,最后,紀(jì)念一下,我們在一起 465 天啦,正好 1 年零 100 天。在這里,就提前發(fā)這篇文章祝我們情人節(jié)快樂啦!


        f90c30bfa69aa7062f2cc421bf8b371b.webp


        最后忘了,大家趕緊也來試試吧!


        fa135218bb2e87dc3470f41081d90f59.webp





        崔慶才

        靜覓博客博主,《Python3網(wǎng)絡(luò)爬蟲開發(fā)實戰(zhàn)》作者

        隱形字

        個人公眾號:進(jìn)擊的Coder

        89a1fc803f144fd281cd0b4ccff2f2da.webpc890196b0b2833ef4ee319b3515993ce.webp

        長按識別二維碼關(guān)注




        好文和朋友一起看~
        瀏覽 56
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲AV电影网站 | 91 口爆吞精国产 | 无码一区二区免费 | 色五月色婷婷AV在线 | 亚洲tv黄| 苍井空精毛片精品久久久 | 暖暖无码 | 西西人体大胆瓣开腿自慰 | 亚洲一级A片毛毛aA片18 日韩无码中文字幕电影 | 国产品牌情久久久久久久男 |