這不光棍節快到了,表弟準備寫一封情書給他的女神,想在光棍節之前脫單。 為了提高成功率,於是跑來找我給他參謀參謀,本來我是不想理他的,不過誰讓他是我表弟呢(請我洗jio),於是教給他程式員的終極浪漫絕招,先假裝給女神拍照,然後再把情書寫到她的照片上列印出來送給她,嘿嘿~ 實現步驟 想要實現把情書寫在像 ...
這不光棍節快到了,表弟準備寫一封情書給他的女神,想在光棍節之前脫單。
為了提高成功率,於是跑來找我給他參謀參謀,本來我是不想理他的,不過誰讓他是我表弟呢(請我洗jio),於是教給他程式員的終極浪漫絕招,先假裝給女神拍照,然後再把情書寫到她的照片上列印出來送給她,嘿嘿~
實現步驟
想要實現把情書寫在像素中,那麼我們就需要用到pillow
這個神器。
眾所周知,圖片是由無數個像素所組成的,把圖片無限放大,就會看到一個個小方格,這就是像素。
1、準備工作
我們都知道,針對圖片進行操作,就會用到Pillow
這個庫,因為Pillow
是第三方庫,所以在使用前,我們要使用pip
進行安裝。
pip install Pillow # 兄弟們學習python,有時候不知道怎麼學,從哪裡開始學。掌握了基本的一些語法或者做了兩個案例後,不知道下一步怎麼走,不知道如何去學習更加高深的知識。 # 那麼對於這些大兄弟們,我準備了大量的免費視頻教程,PDF電子書籍,以及源代碼! # 還會有大佬解答! # 都在這個q群里了 279199867 # 歡迎加入,一起討論 一起學習!
2、Pillow 介紹
安裝完成後,我們先來簡單介紹幾個常用示例
新建及保存圖片
from PIL import Image #創建一張新的圖片:mode 為RGB,size :520x520 ,color :0,100,200 img = Image.new('RGB',(520,520),(255,192,203)) # 保存圖片 img.save('img.jpg')
運行代碼,可以看到,在預設路徑自動創建一張img.jpg
圖片。
來看看圖片是什麼樣子的
粉粉嫩嫩的,就是它了~
重新繪製圖片
我們在上面生成的圖片中,畫兩條線
from PIL import Image,ImageDraw #創建一張新的圖片 #img = Image.new('RGB',(520,520),(0,100,200)) #img.save('img.jpg') #直接打開生成的img.jpg圖片 img = Image.open('img.jpg') #取得繪圖對象,需要繪製對角線 draw = ImageDraw.Draw(img) #繪製對角線 draw.line((0,0,img.size[0],img.size[1]),fill = 128 ,width = 2) draw.line((0,img.size[1],img.size[0],0),fill = 128 ,width = 2) #保存圖片 img.save('img-line.jpg')
再來看看生成的圖片
莫得問題
圖片合併
然後我們把兩張圖片合併
from PIL import Image #直接打開img.jpg圖片 img = Image.open('img.jpg') #創建一個小的圖片 img_small = Image.new('RGB',(30,30),'yellow') #把img_samll 黏貼在 img.jpg圖片的 的20x20的位置 img.paste(img_small,(20,20)) #保存新生成的圖片 img.save('img-paste.jpg')
看看效果如何
確認過眼神,是我要的效果~
3、實戰演練
思路大致分三步
1、先創建基本的信息:文案內容,像素尺寸,字體類型,圖片路徑;
2、創建小圖來填充內容,在創建大圖狀態填充好的小圖內容;
3、迴圈遍歷圖片的內個像素點,把文字黏貼上去。
我們來看看巳月的女神照片:
實現代碼
from PIL import Image,ImageDraw,ImageFont #像素放大尺寸 img_king_size = 20 #輸入內容 text = '這是巳月的女神' #設置字體 font = ImageFont.truetype('simsun.ttc',img_king_size) #圖片路徑 img_path = './king.jpg' #打開圖片 img = Image.open(img_path) img_w,img_h = img.size #創建一個小圖,用於填充字體 img_child = Image.new("RGB", (img_king_size, img_king_size)) #創建一個大圖,狀態填充好的小圖字體 img_ans = Image.new("RGB",(img_w * img_king_size,img_h * img_king_size)) #獲取單個文字的寬和高 text_w,text_h = font.getsize('中') #文字水平居中 offset_x = (img_king_size - text_w) >> 1 #文字垂直居中 offset_y = (img_king_size - text_h) >> 1 char_index = 0 #小圖用於繪製文字 draw = ImageDraw.Draw(img_child) #迴圈遍歷原圖的每一個像素點 for x in range(img_w): for y in range(img_h): #繪製背景,讓圖片更好看 draw.rectangle((0,0,img_king_size,img_king_size),fill = 'lightgray') #用(x,y)處的像素點的色值進行繪製字體 draw.text((offset_x,offset_y),text[char_index],font = font,fill = img.getpixel((x,y))) img_ans.paste(img_child,(x * img_king_size,y * img_king_size)) char_index = (char_index + 1) % len(text) img_ans.save('king-letter.jpg')
我們看下效果圖
生成的圖片超過C站上傳最大限制,所以不能上傳原圖,只能截個圖看看效果了:
放大版的,還可以放大,我就不放到最大了。
我這裡顯示的字是豎的,因為我的圖片是長比寬大,改成橫版照片的話,字就是橫的了。
這要是看不清楚的話,大家可以自己去試試,放到最大。
今天的分享到這裡就差不多結束了,最後給大家分享一些Python視頻教程,希望對各位有所幫助:
不經一番寒徹骨,哪得梅花撲鼻香;不經一番刻苦努力,哪得想要的結果;要想脫穎而出芬芳四溢,就要比別人更加努力!奧利給!