Skip to main content

psd-tool获取psd信息

简介

psd-tool 是一个单纯读取psd文件信息的库,它不需安装psd即可获取到psd的信息,导出psd为图片

# -*- coding: utf-8 -*-
#
# @Author: CPS
# @email: 373704015@qq.com
# @Date:
# @Last Modified by: CPS
# @Last Modified time: 2022-04-30 15:44:23.645151
# @file_path "D:\CPS\MyProject\test"
# @Filename "s.py"
# @Description: 功能描述
#

from typing import *
from psd_tools import PSDImage
from os import path

from psd_tools.psd import PSD

class TLayerInfo(TypedDict):
name:str
size:list[int]
layer_type:str
layer_id:int
has_mask:bool

def get_font_layer_info(layer):
if layer.kind != 'type': return
print(dir(layer))
print("layer.text: ", layer.text)
print('layer.kind: ', layer.kind)

def get_smart_object_info(layer):
if layer.smart_object.is_psd():
with layer.smart_object.open() as f:
print('\n')
print(f'打开智能对象【 {layer.smart_object.filename} 】: ')
smart_object = PSDImage.open(f)
for each in smart_object:
get_layer_info(each)
print('\n')

# print(dir(layer.smart_object))

def get_group_info(group):
for layers in group:
get_layer_info(layers)


def get_layer_info(layer, only_visible:bool=False) -> 'TLayerInfo':
if only_visible and layer.visible == False: return
print(f'Open Layer: {layer.name}')
res = {
'visible':layer.is_visible(),
'name':layer.name,
"size":layer.size,
'layer_type':layer.kind,
'has_mask':layer.has_mask(),
"layer_id":layer.layer_id
}

# print(res)
match str(layer.kind):
case 'group':
get_group_info(layer)
case 'smartobject':
get_smart_object_info(layer)
case 'type':
print(f'【!发现文字图层!】:')
get_font_layer_info(layer)

return res

if ( __name__ == "__main__"):
target = path.abspath(r'./test_file/3.psd')
psd = PSDImage.open(target)
p = PSD.open(target)

print(f'根图层数量({len(psd)})')
print(f'{p.linked_layer}')
for layer in psd:
get_layer_info(layer)

print('\n')
# print(dir(psd[0]))



# psd.composite().save('example.png')