Files
dic/extract_psd_layers.py
2025-07-30 17:40:02 +09:00

62 lines
1.8 KiB
Python

import os
import json
from psd_tools import PSDImage
def extract_layer_info(psd_path):
psd = PSDImage.open(psd_path)
canvas = []
layers = []
canvas.append({
"size": psd.size
})
for layer in psd:
layers.append({
"name": layer.name,
"left": layer.left,
"top": layer.top,
"right": layer.right,
"bottom": layer.bottom,
"visible": layer.visible,
"opacity": layer.opacity,
})
return {
"file": os.path.basename(psd_path),
"canvas": canvas,
"layerCount": len(psd),
"layers": layers
}
def walk_and_export_json(root_dir, output_base_dir):
for dirpath, _, filenames in os.walk(root_dir):
for file in filenames:
if file.lower().endswith(".psd"):
full_path = os.path.join(dirpath, file)
print(f"처리중: {full_path}")
try:
info = extract_layer_info(full_path)
# 상대 경로 유지
rel_dir = os.path.relpath(dirpath, root_dir)
output_dir = os.path.join(output_base_dir, rel_dir)
os.makedirs(output_dir, exist_ok=True)
# JSON 파일 경로 구성
json_name = os.path.splitext(file)[0] + ".json"
json_path = os.path.join(output_dir, json_name)
with open(json_path, "w", encoding="utf-8") as f:
json.dump(info, f, ensure_ascii=False, indent=2)
except Exception as e:
print(f"❌ 오류: {file} - {e}")
if __name__ == "__main__":
walk_and_export_json(
root_dir=r".\output\2506\A\TEST",
output_base_dir=r".\output_json\2506\A\TEST"
)