专业编程基础技术教程

网站首页 > 基础教程 正文

国旗头像 开放python源代码

ccvgpt 2024-12-12 11:08:34 基础教程 1 ℃

最近很火的国旗头像制作使用python很容易就完成了

  1. 第一步是找一张国旗图片
  2. 第二步将国旗图片处理成渐变透明度的png图片
  3. 找一张头像图片,将两张图片重叠即可
  4. 下面直接给出源码 有用的话麻烦点个关注

import math

import cv2
from PIL import Image


def image_gradual(image_name):
    """图片渐变
    :param image_name: 图片路径
    :return: 图片数组
    """
    image = cv2.imread(image_name, 1)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2BGRA)
    b, g, r, a = cv2.split(image)
    h, w, c = image.shape
    for i in range(w):
        v = 255 - (255/w)*i
        a[:, i] = [v - (v * (k/h)) for k in range(1, h+1)]
    return cv2.merge([b, g, r, a])


def image_gradual_pro(image_name):
    """图片渐变 
    图片大小修改
    加了横向和纵向 添加了简单的函数使渐变在越往右边和越往下面图片透明度下降越快
    :param image_name: 
    :return: 
    """
    image = cv2.imread(image_name, 1)
    image = image[100:, 190:]
    h, w, c = image.shape
    image = image[:, :h]
    w = h
    image = cv2.cvtColor(image, cv2.COLOR_BGR2BGRA)
    b, g, r, a = cv2.split(image)

    for i in range(w):
        # v = 255 - ((255 / w) * i + (i * (w/w) / w))
        v = math.ceil(255 - (255 / (w * 1.2)) * i)
        if v < 0:
            v = 0
        a[:, i] = [v / (1 + j / (h + v * 20)) for j in range(h)]
    image = cv2.merge([b, g, r, a])
    return image


def paste_image(src, paste):
    """粘贴图片到另外一张图片上 图片重叠
    不知道怎么使用数组 就使用pillow的功能
    :param src: 
    :param paste: 
    :return: 
    """
    img = Image.open(src)
    img_top = Image.open(paste)
    img = img.resize(img_top.size)
    img.paste(img_top, (0, 0), img_top)
    img.save("res.png")
    

if __name__ == '__main__':
    image = image_gradual_pro('b_star.jpg')
    cv2.imwrite('b_star_pro.png', image)
    paste_image('img3.jpg', 'b_star_pro.png')

国旗头像 开放python源代码

最近发表
标签列表