zoukankan      html  css  js  c++  java
  • 国庆节换头像热潮:国旗渐变微信头像和微信头像加上国旗!制作教程来了,你会了吗???

    1.简介

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

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

    来吧,展示!

    2. 渐变原理简介

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

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

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

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

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

    3. 实现步骤

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

    3.1. 读取图片

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

    五星红旗:

    头像:

    3.2. 截取区域

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

    # 获取国旗的尺寸
    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。

    # 获取头像的尺寸
    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. 粘贴到头像并保存

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

    touxiang.paste(quyu,(0,0),quyu)
    touxiang.save('五星红旗半透明渐变头像.png')

    五星红旗国庆头像:

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

    4. 完整代码

    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读取图片

    # 读取头像和国旗图案
    img_head = cv2.imread('C:\Users\DELL\Desktop\test\2.jpg')
    img_flag = cv2.imread('C:\Users\DELL\Desktop\test\1.png')

    6.2计算图案缩放比例

    # 获取头像和国旗图案宽度
    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缩放后的国旗图案添加到头像图片

    # 按 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.完整代码

    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图片效果会更好,但是选择其他尺寸的也可以,需要自己调整国旗的坐标。

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



        感谢您花时间阅读此篇文章,如果您觉得这篇文章你学到了东西也是为了犒劳下博主的码字不易不妨打赏一下吧,让博主能喝上一杯咖啡,在此谢过了!
        如果您觉得阅读本文对您有帮助,请点一下左下角“推荐”按钮,您的将是我最大的写作动力!另外您也可以选择关注我,可以很方便找到我!
        本文版权归作者和博客园共有,来源网址:https://www.cnblogs.com/du-hong 欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利!
    个人微信公众号 个人微信
  • 相关阅读:
    hrbust 1558 小背包(简单01背包)水坑
    hrbust 1174泉水(DFS深度优先搜索)
    HDU 1115
    HDU 4273
    HDU 2912
    POJ 3528
    HDU 1912
    HDU 4741
    HDU 4617
    POJ 1755
  • 原文地址:https://www.cnblogs.com/du-hong/p/15353351.html
Copyright © 2011-2022 走看看