這不光棍節快到了,表弟準備寫一封情書給他的女神,想在光棍節之前脫單,

為了提高成功率,于是跑來找我給他參謀參謀,本來我是不想理他的,不過誰讓他是我表弟呢(請我洗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視頻教程,希望對各位有所幫助:
Python零基礎入門全套教程
Python進階全套教程
Python實戰100例
不經一番寒徹骨,哪得梅花撲鼻香;不經一番刻苦努力,哪得想要的結果;要想脫穎而出芬芳四溢,就要比別人更加努力!奧利給!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524917.html
標籤:其他
上一篇:自從用了灰度發布,睡覺真香!
