前幾天是情人節,就用Python圖像庫PIL來搞點事情。
先看圖:
其實這樣看不出什么來,然后需要放大:
放大以后就能看到你相對女神說的話。
但是對於學計算機的我來說,更想琢磨是怎樣的流程完成的這個圖。
--------------------------------------------------------------分割線--------------------------------------------------------------
我們需要用到的是PIL庫中的Image,ImageDraw,ImageFont來進行操作
我們需要做的第一步就是使用Image.open()函數來讀取圖像,並且使用Image.load()函數來獲取像素值,圖像是由像素點組成的,因此我們需要獲取並通過填充字體的顏色來實現改變。
1 #使用pillow.Image讀取圖像,並使用load函數獲取到每一個像素值 2 img_raw = Image.open(img_path) 3 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_size)
然后我們需要不斷輸入“XXX",來填充文字
1 #需要不斷輸入“xxx”,就要用while循環yield來實現一個生成器 2 def characte_generator(text): 3 while True: 4 for i in range(len(text)): 5 yield text[i]
再將字體加上顏色寫入新創建的畫布中
1 #給字體加上顏色寫入新創建的畫布中 2 for y in range(0,img_raw.size[1],font_size): 3 for x in range(0,img_raw.size[0],font_size): 4 draw.text((x,y),next(ch_gen),font = font,fill = img_array[x,y],direction = None)
最后保存在圖片
1 img_new.convert('RGB').save('F://love.jpeg')
這樣就大功告成了。
完整代碼如下:
1 from PIL import Image, ImageDraw, ImageFont 2 3 font_size = 6 4 text = " 情人節快樂 " 5 img_path = "F://Python//1.png" 6 #使用pillow.Image讀取圖像,並使用load函數獲取到每一個像素值 7 img_raw = Image.open(img_path) 8 img_array = img_raw.load() 9 #新建畫布,並選擇好使用的字體和字體大小 10 img_new = Image.new("RGB",img_raw.size,(0,0,0)) 11 draw = ImageDraw.Draw(img_new) 12 font = ImageFont.truetype('C://Windows//Fonts//STXINGKA.TTF',font_size) 13 #需要不斷輸入“xxx”,就要用while循環yield來實現一個生成器 14 def characte_generator(text): 15 while True: 16 for i in range(len(text)): 17 yield text[i] 18 19 ch_gen = characte_generator(text) 20 #給字體加上顏色寫入新創建的畫布中 21 for y in range(0,img_raw.size[1],font_size): 22 for x in range(0,img_raw.size[0],font_size): 23 draw.text((x,y),next(ch_gen),font = font,fill = img_array[x,y],direction = None) 24 img_new.convert('RGB').save('F://love.jpeg')