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