前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >国庆节换头像热潮:国旗渐变微信头像和微信头像加上国旗!制作教程来了,你会了吗???

国庆节换头像热潮:国旗渐变微信头像和微信头像加上国旗!制作教程来了,你会了吗???

作者头像
北京-宏哥
发布2021-10-11 17:25:42
2.3K0
发布2021-10-11 17:25:42
举报
文章被收录于专栏:北京宏哥北京宏哥

1.简介

明天就是国庆节,再也不用@官方了,自己制作头像更换就可以了。,最近有个五星红旗半透明渐变头像很火,在抖音里、微信群里都流行起来了。

那么,作为python玩家,是不是也要共享一下自己的力量,用python快速制作这样的头像呢!?

来吧,展示!

2. 渐变原理简介

我们看到这样的头像,大致是红旗透明度渐变然后覆盖在自己头像上即可。

那么,我的思路大致是先通过红旗图片获取和自己头像尺寸一样的区域,然后将这部分区域从左到右进行透明度渐变增长,然后将这张图片和头像进行融合,最终保存即可。

基于这个思路,结合PIL库,我们大致可以将实现步骤拆分为如下几步:

  • 读取国旗和头像照片 open
  • 截取国旗部分区域 crop
  • 从左到右透明度渐变 putpixel
  • 将区域粘贴到头像 paste+resize
  • 保存新头像 save

既然明确了实现步骤,我们就开搞吧!

3. 实现步骤

大家记得实现准备国旗和自己头像照片到本地哦,路径写对啊!

3.1. 读取图片
代码语言:javascript
复制
from PIL import Image

guoqi = Image.open('五星红旗.png')
touxiang = Image.open('头像.jpg')

五星红旗:

头像:

3.2. 截取区域

由于这里我的头像是正方形,为了方便在粘贴透明渐变国旗时更方便,需要截取正方形区域。

代码语言:javascript
复制
# 获取国旗的尺寸
x,y = guoqi.size
# 根据需求,设置左上角坐标和右下角坐标(截取的是正方形)
quyu = guoqi.crop((262,100, y+62,y-100))

五星红旗(正方形):

3.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。

代码语言:javascript
复制
# 获取头像的尺寸
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)

透明渐变:

3.4. 粘贴到头像并保存

需要注意粘贴的时候要保留透明背景,否则就不好玩了,等于直接全覆盖

代码语言:javascript
复制
touxiang.paste(quyu,(0,0),quyu)
touxiang.save('五星红旗半透明渐变头像.png')

五星红旗国庆头像:

当然,我们还可以用别的透明渐变的方式,比如左上角到右下角之类的,具体这里不展开演示了,感兴趣的可以直接负责完整代码自己测试玩玩!

4. 完整代码

代码语言:javascript
复制
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')

5.微信头像加上国旗原理

将国旗图片缩放,然后将国旗图片粘贴到头像图片处,即可!

那么,我的思路大致是先通过红旗图片获取和自己头像尺寸一样的区域,然后将这部分区域的宽度和高度获取,计算国旗缩放比例,得到缩放图片,然后将这缩放的国旗图片宽度和高度获取,然后将这张缩放国旗图片和头像进行融合,最终保存即可。

基于这个思路,我们大致可以将实现步骤拆分为如下几步:

1. 读取进头像和国旗的图片

2. 根据头像和国旗的长宽,我们计算下图案需要缩放多少比例

3. 通过像素替换,将缩放后的国旗图案添加到头像图片的右下角

6.实现步骤

大家记得实现准备国旗和自己头像照片到本地哦,路径写对啊!(你可以将其他样式的国旗加到你的头像中)。

6.1读取图片
代码语言:javascript
复制
# 读取头像和国旗图案
img_head = cv2.imread('C:\\Users\\DELL\\Desktop\\test\\2.jpg')
img_flag = cv2.imread('C:\\Users\\DELL\\Desktop\\test\\1.png')
6.2计算图案缩放比例
代码语言:javascript
复制
# 获取头像和国旗图案宽度
w_head, h_head = img_head.shape[:2]
w_flag, h_flag = img_flag.shape[:2]
# 计算图案缩放比例
scale = w_head / w_flag / 4
# 缩放图案
img_flag = cv2.resize(img_flag, (0, 0), fx=scale, fy=scale)
# 获取缩放后新宽度
w_flag, h_flag = img_flag.shape[:2]
6.3缩放后的国旗图案添加到头像图片
代码语言:javascript
复制
# 按 3 个通道合并图片
for c in range(0, 3):
 img_head[w_head - w_flag:, h_head - h_flag:, c] = img_flag[:, :, c]
# 保存最终结果
cv2.imwrite('C:\\Users\\DELL\\Desktop\\test\\new_head.jpg', img_head)

7.完整代码

代码语言:javascript
复制
import cv2
# 读取头像和国旗图案
img_head = cv2.imread('C:\\Users\\DELL\\Desktop\\test\\2.jpg')
img_flag = cv2.imread('C:\\Users\\DELL\\Desktop\\test\\1.png')
# 获取头像和国旗图案宽度
w_head, h_head = img_head.shape[:2]
w_flag, h_flag = img_flag.shape[:2]
# 计算图案缩放比例
scale = w_head / w_flag / 4
# 缩放图案
img_flag = cv2.resize(img_flag, (0, 0), fx=scale, fy=scale)
# 获取缩放后新宽度
w_flag, h_flag = img_flag.shape[:2]
# 按 3 个通道合并图片
for c in range(0, 3):
 img_head[w_head - w_flag:, h_head - h_flag:, c] = img_flag[:, :, c]
# 保存最终结果
cv2.imwrite('C:\\Users\\DELL\\Desktop\\test\\new_head.jpg', img_head)

8.小结

1.加国旗到头像需要用到cv2,宏哥直接安装报错如下:

2.查询资料后,发现安装opencv-python即可,如下:

3.安装好以后,正常运行,生成新的头像。

4.头像国旗渐变的头像图片推荐选择900X900的.jpg图片效果会更好,但是选择其他尺寸的也可以,需要自己调整国旗的坐标。

以上就是本次全部内容,如果你喜欢,希望给我推荐哈!!!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-09-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.简介
  • 2. 渐变原理简介
  • 3. 实现步骤
    • 3.1. 读取图片
      • 3.2. 截取区域
        • 3.3. 设置透明渐变
          • 3.4. 粘贴到头像并保存
          • 4. 完整代码
          • 5.微信头像加上国旗原理
          • 6.实现步骤
            • 6.1读取图片
              • 6.2计算图案缩放比例
                • 6.3缩放后的国旗图案添加到头像图片
                • 7.完整代码
                • 8.小结
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档