Python 处理RGB和RGBA图像,有透明图像部分的粘贴,paste->mask参数

from PIL import Image
import numpy as np

def trans(img):
# *********** Begin **********#
# 编写函数依次处理每个像素点
# 要求:若r、g、b、的均值大于230 则表示该像素的颜色接近白色,属于背景中的像素点,将其背景色设置为透明。否则将该像素的颜色替换为黑色。
    img = img.convert('RGBA')

    x, y = img.size

    for i in range(x):
        for j in range(y):
            color = img.getpixel((i, j))
            Mean = np.mean(list(color[:-1]))
            if Mean > 230:
                color = color[:-1] + (0, )
            else:
                color = (0, 0, 0, 255)
            img.putpixel((i, j), color)

    return img
# *********** End **********#

def img_replace(path):
    # *********** Begin **********#
    img = Image.open(path)
    # 根据如下像素点从图像img中提取所需物体并调用函数处理每个像素点。

    # 0, 0, 823, 633
    # 1134, 0, 1555, 331
    # 1543, 211, 1650, 428

    # 裁剪图片 img.crop
    background = img.crop((0, 0, 823, 633))
    img1 = img.crop((1134, 0, 1555, 331))
    img2 = img.crop((1543, 211, 1650, 428))

    img1 = trans(img1)
    img2 = trans(img2)
    # 根据如下像素点将原图中的物体替换成所需物体
    # 400,0
    # 4,95
    background.paste(img1, (400, 0), mask=img1.split()[3])
    background.paste(img2, (4, 95), mask=img2.split()[3])
    # 将结果保存至 './Image_body_cold/结果/d.jpg'
    background.save("./images/d.jpg")
    # *********** End **********#
    return True

 

你可能感兴趣的:(Python)