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)
相关推荐
Zenova EdgeOS32 分钟前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
取名真是44 分钟前
Python 算法知识点从基础到进阶
开发语言·python·算法
梦想不只是梦与想1 小时前
PyTorch、CPU、GPU、CUDA
人工智能·pytorch·python·深度学习·机器学习·cuda
数字融合1 小时前
透明化视频孪生危化安全管控解决方案
人工智能·python·安全
FRing031 小时前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
Fatbobman(东坡肘子)2 小时前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
开发语言·人工智能·redis·ios·swiftui·iphone·swift
揽星河..2 小时前
【C语言】底层程序设计
c语言·开发语言
JavaPub-rodert2 小时前
从零搭建通用管理后台:ShiyuAdmin 的 Go、React 与 RBAC 实践
开发语言·react.js·golang
别问!问就是全会2 小时前
Jupyter Notebook 安装包下载|单元格分块运行,图表直接内嵌
ide·python·其他·jupyter
深蓝AI3 小时前
Python 缓存击穿实测:16 个并发请求如何只回源 1 次
python