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)
相关推荐
默_笙2 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
LaughingZhu2 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
qq_426003962 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技2 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
猎头南楼2 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
只睡四小时2 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
高洁012 天前
未来三年,AI 落地的五个确定性判断一
人工智能·深度学习·机器学习·transformer·知识图谱