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)
相关推荐
geovindu1 分钟前
CSharp: State Pattern
开发语言·后端·c#·.net·状态模式·行为模式
IT小白杨5 分钟前
TikTok小店防封号浏览器实战:2026年多店铺环境隔离与账号安全运营技术解析
开发语言·数据库·安全·php·chrome devtools·指纹浏览器
Patrick在香港5 分钟前
Python 拉取 C&SD 官方 API:香港 2022 年已跨过“超老龄线“,而抚养比正在爬回 1961
android·c语言·python·数据分析·时序数据库·数据可视化·香港
2601_962382438 分钟前
Python零基础入门,看完直接上手写代码
python·机器学习·编程语言·数据科学·入门教程
信誓旦旦的程序猿8 分钟前
【零依赖量化数据实战 #25】北交所技术指标与基本面
java·人工智能·python·股票数据api·股票数据·股票数据api接口·股票api数据接口
2601_9669496511 分钟前
Python 量化开发为什么适合使用金融数据 SDK?从数据获取到策略研究的工程化实践
开发语言·python·数据分析·量化交易·股票数据·quantdash
科技小E11 分钟前
训完怎么带走?AI模型私有化部署平台DLTM模型导出ONNX/PyTorch与离线部署跑遍产线边缘
人工智能·pytorch·python
晓窗科技12 分钟前
专业的AI基座公司
人工智能·python
万年咸鱼12 分钟前
Java ArrayList 详解:原理、用法与实战
java·开发语言·windows
花间相见13 分钟前
【LangChain组件02】—— create_agent函数详解
python