1. 程式人生 > 實用技巧 >Python18行程式碼做出來這樣有點浪漫,又有點極客的“內涵”圖

Python18行程式碼做出來這樣有點浪漫,又有點極客的“內涵”圖

今天就來教大家這個套路:

如何使用 Python 來做出來這樣有點浪漫,又有點極客的“內涵”圖。

當然,能不能靠它得到心儀物件的青睞,就要靠你(命)了。(๑•́₃ •̀๑)

那麼要怎麼做呢?

我們先找一張女神的高清圖片(儘量解析度高點的吧,效果會好點)。這裡以一張原圖是這樣的(解析度是:3840*2160)。

使用我寫好的指令碼執行後,就生成了這樣一張圖,請你點選,放大再放大。驚喜?

然後將這張圖片發給你的女神,具體話術你自己想咯

好吧,相比女神來說,你可能更在意這是如何實現的。

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

首先,來講講原理。

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

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

當畫素點足夠多的時候,這張照片就是我們所說的高清照片。

而如果當畫素點太少,我們的肉眼就能感知到明顯的鋸齒感。

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

我只要每個畫素取出一個畫素值,並使用這個畫素做為該字的顏色即可,在畫素量夠多的情況下,從遠處看,是能看到我們原來影象的輪廓的。

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

首先,我們需要用到 PIL庫,使用其中的 PIL.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\STHUPO.TTF',font_size)

由於需要不斷迴圈 “我喜歡你!”,這五個字元。所以這裡可以while迴圈 yield 來實現一個生成器。

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),font=font,fill=img_array[x,y],direction=None)

最後將成品儲存

img_new.convert('RGB').save("123.jpg")

完整程式碼如下,供你參考

fromPILimportImage,ImageDraw,ImageFont

font_size=7
text="我喜歡你!"
img_path="321.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:C:\Windows\Fonts\STHUPO.TTF',font_size) defcharacter_generator(text):
whileTrue:
foriinrange(len(text)):
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) img_new.convert('RGB').save("123.jpg")

如果你想在自己的電腦上執行,只要複製上面這段程式碼,儲存為 python 檔案(例如 draw.py),在程式碼編輯器或者命令列中執行即可。

需要注意的幾點是:

1. 要安裝 PIL 庫。需要注意的是,這個模組名叫做 PIL,但現在已經不更新了,我們需要用另一個替代庫:pillow。可以在命令列通過pip install pillow安裝。

2. 將你的原始圖片跟程式碼放在同一個目錄,並修改檔案中的影象檔名。

3. 字型可以自行更改,但要確保是中文字型,並且字型檔案的路徑正確。