前言
大家早好、午好、晚好吖~

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

為了提高成功率,于是跑來找我給他參謀參謀,本來我是不想理他的,
不過誰讓他是我表弟呢(請我洗jio),于是教給他程式員的終極浪漫絕招

先假裝給女神拍照,然后再把情書寫到她的照片上列印出來送給她,嘿嘿~
實作步驟
想要實作把情書寫在像素中,那么我們就需要用到pillow這個神器,
眾所周知,圖片是由無數個像素所組成的,把圖片無限放大,就會看到一個個小方格,這就是像素,

1、準備作業
我們都知道,針對圖片進行操作,就會用到Pillow這個庫
因為Pillow 是第三方庫,所以在使用前,我們要進行安裝,
win + r輸入cmd按回車打開命令提示符視窗,使用pip安裝
pip install Pillow
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站上傳最大限制,所以不能上傳原圖,只能截個圖看看效果了:

放大版的,還可以放大,我就不放到最大了,
我這里顯示的字是豎的,因為我的圖片是長比寬大,改成橫版照片的話,字就是橫的了,

這要是看不清楚的話,大家可以自己去試試,放到最大,
尾語 ??
好了,今天的分享就差不多到這里了!
完整代碼及國內疫情資料抓取代碼、視頻講解直接點擊下方自取即可,
==點擊 藍色字體 自取,我都放在這里了,==
寧外給大家推薦一個好的教程:
【48小時搞定全套教程!你和大佬只有一步之遙【python教程】
有更多建議或問題可以評論區或私信我哦!一起加油努力叭(? ?_?)?
喜歡就關注一下博主,或點贊收藏評論一下我的文章叭!!!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/530541.html
標籤:其他
上一篇:JVM運行時資料區域詳解
下一篇:設計模式---責任鏈模式
