五星紅旗國慶頭像制作教程來了
大家好,我是才哥。
國慶節終于來了,最近有個五星紅旗半透明漸變頭像很火,在抖音里、微信群里都流行起來了。
那么,作為python玩家,是不是也要共享一下自己的力量,用python快速制作這樣的頭像呢!?
來吧,展示!
1. 原理簡介
我們看到這樣的頭像,大致是紅旗透明度漸變然后覆蓋在自己頭像上即可。
那么,我的思路大致是先通過紅旗圖片獲取和自己頭像尺寸一樣的區域,然后將這部分區域從左到右進行透明度漸變增長,然后將這張圖片和頭像進行融合,最終保存即可。
基于這個思路,結合之前《Python基礎模塊:圖像處理模塊@PIL(批量分類處理圖片及添加水印)?》里介紹的PIL庫,我們大致可以將實現步驟拆分為如下幾步:
- 讀取國旗和頭像照片 open
- 截取國旗部分區域 crop
- 從左到右透明度漸變 putpixel
- 將區域粘貼到頭像 paste?+resize
- 保存新頭像 save
既然明確了實現步驟,我們就開搞吧!
2. 實現步驟
大家記得實現準備國旗和自己頭像照片到本地哦
后臺 回復 955?,在國慶?文件夾領取 國旗文件,或者文末添加作者微信? 回復 國慶 領取。
2.1. 讀取圖片
from PIL import Image
guoqi = Image.open('五星紅旗.png')
touxiang = Image.open('頭像.jpg')
五星紅旗
頭像
2.2. 截取區域
由于這里我的頭像是正方形,為了方便在粘貼透明漸變國旗時更方便,需要截取正方形區域。
x,y = guoqi.size
quyu = guoqi.crop((262,100, y+62,y-100))
五星紅旗(正方形)
2.3. 設置透明漸變
在PIL?庫中,getpixel((i, j))?表示獲取(i,j)?像素點的顏色值color?,同樣我們可以通過putpixel((i, j), color)?來對(i,j)像素點設置顏色。
而對應color?來說,是包含四個參數的元組(R,G,B,alpha)?,分別是RGB?值和透明度,其中透明度255表示不透明,0表示100%透明。
了解以上這些知識,我們就可以開始進行透明度漸變的操作了。
本例最簡單滿足需求的就是透明漸變從左到右透明度依次變高(參數值變?。紤]到從255變為0 且只能是整數,這里由于微信頭像是900*900,所以我考慮的是每3個像素進行一次透明度漸變,當超過255之后則透明度為100%也就是對應參數為0。
w,h = touxiang.size
quyu = quyu.resize((w,h))
for i in range(w):
for j in range(h):
color = quyu.getpixel((i, j))
alpha = 255-i//3
if alpha < 0:
alpha=0
color = color[:-1] + (alpha, )
quyu.putpixel((i, j), color)
透明漸變
2.4. 粘貼到頭像并保存?
需要注意粘貼的時候要保留透明背景,否則就不好玩了,等于直接全覆蓋
touxiang.paste(quyu,(0,0),quyu)
touxiang.save('五星紅旗半透明漸變頭像.png')
五星紅旗國慶頭像
當然,我們還可以用別的透明漸變的方式,比如左上角到右下角之類的,具體這里不展開演示了,感興趣的可以直接負責完整代碼自己測試玩玩!
3. 完整代碼
from PIL import Image
guoqi = Image.open('五星紅旗.png')
touxiang = Image.open('頭像.jpg')
x,y = guoqi.size
quyu = guoqi.crop((262,100, y+62,y-100))
w,h = touxiang.size
quyu = quyu.resize((w,h))
for i in range(w):
for j in range(h):
color = quyu.getpixel((i, j))
alpha = 255-i//3
if alpha < 0:
alpha=0
color = color[:-1] + (alpha, )
quyu.putpixel((i, j), color)
touxiang.paste(quyu,(0,0),quyu)
touxiang.save('五星紅旗半透明漸變頭像.png')
以上就是本次全部內容,如果你喜歡,希望給我點個贊和在看?哦??!更歡迎分享給更多的朋友們~