今天就來教大家這個套路: 如何使用 Python 來做出來這樣有點浪漫,又有點極客的“內涵”圖。 當然,能不能靠它得到心儀對象的青睞,就要靠你(命)了。(๑•́₃ •̀๑) 那麼要怎麼做呢? 我們先找一張女神的高清圖片(儘量解析度高點的吧,效果會好點)。這裡以一張原圖是這樣的(解析度是:3840*2 ...
今天就來教大家這個套路:
如何使用 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 來實現一個生成器。
def character_generator(text):
while True:
for i in range(len(text)):
yield text[i]
最後,要給這些字加上相應的顏色,寫入新創建的畫布中。
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("123.jpg")
完整代碼如下,供你參考
from PIL import Image, 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)
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("123.jpg")
如果你想在自己的電腦上運行,只要複製上面這段代碼,保存為 python 文件(例如 draw.py),在代碼編輯器或者命令行中運行即可。
需要註意的幾點是:
1. 要安裝 PIL 庫。需要註意的是,這個模塊名叫做 PIL,但現在已經不更新了,我們需要用另一個替代庫:pillow。可以在命令行通過 pip install pillow 安裝。
2. 將你的原始圖片跟代碼放在同一個目錄,並修改文件中的圖像文件名。
3. 字體可以自行更改,但要確保是中文字體,並且字體文件的路徑正確。