python --读取psd文件

python 复制代码
# py3.7.3   psd-tools==1.9.28
from psd_tools import PSDImage
from PIL import Image
import os


def read_and_show_psd(psd_path: str, show_layer: bool = False):
    """
    读取 PSD 文件并显示图片(适配你提供的 PSDImage 源码版本)
    :param psd_path: PSD 文件路径
    :param show_layer: 是否显示第一个图层(False 显示合并后的完整图像)
    """
    # 1. 检查文件是否存在
    if not os.path.exists(psd_path):
        print(f"错误:文件 {psd_path} 不存在!")
        return

    # 2. 读取 PSD 文件(用源码指定的 PSDImage.open 方法)
    try:
        psd = PSDImage.open(psd_path)
        print(f"成功读取 PSD:{psd_path}")
        print(f"PSD 尺寸:{psd.size}(宽x高)")

        # 读取图层(用源码的 _layers 属性,或直接遍历 psd)
        layer_count = len(psd._layers)  # 源码里图层存在 _layers 中
        print(f"图层数量:{layer_count}")

    except Exception as e:
        print(f"读取 PSD 失败:{e}")
        return

    # 3. 显示图像(核心用 composite() 方法,源码明确支持)
    # 方式1:显示合并后的完整图像(推荐,最稳定)
    if not show_layer:
        # 合成完整图像(源码的 composite 方法)
        img = psd.composite()
        if img is not None:
            img.show()  # 调用系统图片查看器显示
            # 可选:保存为 PNG
            # img.save("psd_merged.png")
        else:
            print("错误:无法合成完整图像!")
    # 方式2:显示第一个图层
    else:
        if len(psd._layers) > 0:
            # 取第一个图层,合成图层图像
            first_layer = psd._layers[2]
            layer_img = first_layer.composite()  # 图层也有 composite 方法
            if layer_img is not None:
                print(f"显示图层:{first_layer.name if hasattr(first_layer, 'name') else '未命名图层'}")
                layer_img.show()
            else:
                print("错误:无法合成该图层!")
        else:
            print("PSD 无图层!")


# ===================== 测试调用 =====================
if __name__ == "__main__":
    # 替换为你的 PSD 文件路径(建议用绝对路径,避免中文/空格)
    psd_file_path = r"C:\Users\123\Desktop\12.psd"  # 示例:D:/project/test.psd
    # 显示合并后的完整图像
    # read_and_show_psd(psd_file_path)
    # 如需显示第一个图层,传入 show_layer=True
    read_and_show_psd(psd_file_path, show_layer=True)
相关推荐
装不满的克莱因瓶4 分钟前
掌握语义分割经典模型 FCN——从像素分类到端到端分割的奠基之作
人工智能·python·深度学习·算法·机器学习·分类·数据挖掘
黄毛火烧雪下7 分钟前
Java 基础笔记:文件、递归与字符编码
java·开发语言·笔记
noravinsc16 分钟前
关于PEP8
python
DXM052124 分钟前
第14期|高阶分割模型:Transformer/SegFormer遥感应用
人工智能·python·神经网络·算法·计算机视觉·cnn·ageo
糖果店的幽灵24 分钟前
软件测试接口测试从入门到精通:Python接口自动化 - pytest测试框架
软件测试·python·功能测试·自动化·pytest·接口测试
swordbob29 分钟前
CAP 定理:为什么不能同时实现 C、A、P?
开发语言·后端·spring
疯狂成瘾者30 分钟前
Java 常用工具包 java.util
java·开发语言·windows
枫叶丹430 分钟前
【HarmonyOS 6.0】MDM Kit 新特性:PC/2in1设备无锁屏密码重启自动解锁能力详解
开发语言·华为·harmonyos
程序员龙叔44 分钟前
从 0 开始学习 AI 测试 - 从接口测试来教你如何用 AI 来生成自动化测试代码
自动化测试·软件测试·python·软件测试工程师·测试工具·性能测试·ai测试
ZHW_AI课题组1 小时前
Python 调用百度智能云 API 实现地址识别
开发语言·人工智能·python·机器学习·百度·数据挖掘