python操作psd保存与原图等长等宽的透明图层

文章目录

  • python操作psd保存与原图等长等宽的透明图层
    • 1. 思路
    • 2. 代码实现

python操作psd保存与原图等长等宽的透明图层

1. 思路

  1. 获取psd对象

  2. 将需要保存的图层的可见性开启

  3. 保存psd

  4. 重新获取psd对象(尝试过边操作可见性边保存图层,不可行)

  5. 生成与原图等长等高的透明图,与图层合并,保存合并之后的图层

2. 代码实现

from psd_tools import PSDImage
from PIL import Image
import os


# 图片融合
def mix(img1, img2, coordinator):
    """

    :param img1:
    :param img2:
    :param coordinator: 图层在透明图上的left,top坐标
    :return:
    """
    im = img1
    mark = img2
    layer = Image.new('RGBA', im.size, (0, 0, 0, 0))
    layer.paste(mark, coordinator)
    out = Image.composite(layer, im, layer)
    return out


def change_visible():
    psd_path = r'G:\20220803\全景\000001\000001_000000.psd'
    psd = PSDImage.open(psd_path)  # 打开psd对象
    for index, layer in enumerate(psd.descendants()):
        layer_name = layer.name  # 图层名称
        if layer_name.count("背景"):  # 过滤掉背景
            layer.visible = False
            continue
        layer.visible = True
    psd.save(psd_path)  # 保存


def get_save_layer_png():
    psd_path = r'G:\20220803\全景\000001\000001_000000.psd'
    basename = os.path.basename(psd_path).replace(".psd", "")
    save_png_dir_path = os.path.join(os.path.dirname(psd_path), basename)

    if not os.path.exists(save_png_dir_path):
        os.makedirs(save_png_dir_path)

    psd = PSDImage.open(psd_path)  # 打开psd对象
    image = Image.new(mode='RGBA', size=psd.size)  # 生成等高等宽的透明图
    for index, layer in enumerate(psd.descendants()):
        print(layer.size)  # 图层大小
        layer_name = layer.name  # 图层名称
        if layer_name.count("背景"):  # 过滤掉背景
            continue

        layer.composite().save("tmp.png")

        file1 = Image.open("tmp.png")

        co = (layer.left, layer.top)  # 确定图层透明图左上点的坐标位置
        mix_res = mix(image, file1, co)

        mix_res.save(os.path.join(save_png_dir_path, layer.name + ".png"))
        # print(mix_res)
        os.remove("tmp.png")


if __name__ == '__main__':
    change_visible()
    get_save_layer_png()

你可能感兴趣的:(psd_tools,深度学习,前端,计算机视觉)