用Python给你的头像加上国庆效果
共 3321字,需浏览 7分钟
·
2021-10-02 15:58
大家好,欢迎来到 Crossin的编程教室 !
国庆节终于来了,最近有个五星红旗半透明渐变头像很火,在抖音里、微信群里都流行起来了。
那么,作为python
玩家,是不是也要共享一下自己的力量,用python快速制作这样的头像呢!?
来吧,展示!
目录:
1. 原理简介
2. 实现步骤
2.1. 读取图片
2.2. 截取区域
2.3. 设置透明渐变
2.4. 粘贴到头像并保存
3. 完整代码
1. 原理简介
我们看到这样的头像,大致是红旗透明度渐变然后覆盖在自己头像上即可。
那么,我的思路大致是先通过红旗图片获取和自己头像尺寸一样的区域,然后将这部分区域从左到右进行透明度渐变增长,然后将这张图片和头像进行融合,最终保存即可。
基于这个思路,结合Python常用的图像处理模块PIL
库,我们大致可以将实现步骤拆分为如下几步:
读取国旗和头像照片 open
截取国旗部分区域 crop
从左到右透明度渐变 putpixel
将区域粘贴到头像 paste
+resize
保存新头像 save
既然明确了实现步骤,我们就开始动手吧!
2. 实现步骤
大家记得事先准备好国旗和自己头像照片到本地哦。
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')
以上就是本次全部内容,赶紧动手试一试吧。
如果文章对你有帮助,欢迎转发/点赞/收藏~
作者:道才
_往期文章推荐_