update
This commit is contained in:
112
tools/generowanie/_explore_buteleczki_klaudia.py
Normal file
112
tools/generowanie/_explore_buteleczki_klaudia.py
Normal file
@@ -0,0 +1,112 @@
|
||||
"""Inspekcja PSD: wejscie do kazdego SO i wypisanie jego warstw."""
|
||||
import os
|
||||
import subprocess
|
||||
import time
|
||||
import photoshop.api as ps
|
||||
|
||||
PSD = r"d:\pomysloweprezenty.pl\projekty\buteleczki - indywidualny wzór\Klaudia Buczma.psd"
|
||||
|
||||
PHOTOSHOP_EXE_CANDIDATES = [
|
||||
r"C:\Program Files\Adobe\Adobe Photoshop 2024\Photoshop.exe",
|
||||
r"C:\Program Files\Adobe\Adobe Photoshop 2023\Photoshop.exe",
|
||||
r"C:\Program Files\Adobe\Adobe Photoshop 2025\Photoshop.exe",
|
||||
r"C:\Program Files\Adobe\Adobe Photoshop 2026\Photoshop.exe",
|
||||
]
|
||||
|
||||
|
||||
def ensure_photoshop():
|
||||
try:
|
||||
return ps.Application()
|
||||
except Exception:
|
||||
for exe in PHOTOSHOP_EXE_CANDIDATES:
|
||||
if os.path.exists(exe):
|
||||
subprocess.Popen([exe])
|
||||
break
|
||||
for _ in range(30):
|
||||
time.sleep(2)
|
||||
try:
|
||||
return ps.Application()
|
||||
except Exception:
|
||||
continue
|
||||
raise RuntimeError("brak PS")
|
||||
|
||||
|
||||
def open_smart_object(app):
|
||||
desc = ps.ActionDescriptor()
|
||||
ref = ps.ActionReference()
|
||||
ref.putEnumerated(
|
||||
app.stringIDToTypeID("layer"),
|
||||
app.stringIDToTypeID("ordinal"),
|
||||
app.stringIDToTypeID("targetEnum"),
|
||||
)
|
||||
desc.putReference(app.stringIDToTypeID("null"), ref)
|
||||
app.executeAction(app.stringIDToTypeID("placedLayerEditContents"), desc)
|
||||
|
||||
|
||||
def walk(layer, prefix=""):
|
||||
try:
|
||||
name = layer.name
|
||||
except Exception:
|
||||
name = "?"
|
||||
kind = type(layer).__name__
|
||||
extra = ""
|
||||
try:
|
||||
if hasattr(layer, "kind"):
|
||||
extra = f" kind={layer.kind}"
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
bounds = [float(b) for b in layer.bounds]
|
||||
extra += f" bounds={bounds}"
|
||||
except Exception:
|
||||
pass
|
||||
content = ""
|
||||
try:
|
||||
if hasattr(layer, "textItem"):
|
||||
content = f" text=\"{layer.textItem.contents}\""
|
||||
except Exception:
|
||||
pass
|
||||
print(f"{prefix}- {name} [{kind}]{extra}{content}")
|
||||
for attr in ("layerSets", "artLayers"):
|
||||
try:
|
||||
for c in getattr(layer, attr):
|
||||
walk(c, prefix + " ")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def dump_doc(doc, label):
|
||||
print(f"=== {label}: {doc.name} ===")
|
||||
for ls in doc.layerSets:
|
||||
walk(ls, "")
|
||||
for al in doc.artLayers:
|
||||
walk(al, "")
|
||||
|
||||
|
||||
def main():
|
||||
app = ensure_photoshop()
|
||||
doc = app.open(PSD)
|
||||
dump_doc(doc, "ROOT")
|
||||
|
||||
so_names = ["Warstwa 2", "Warstwa 2 kopia", "Warstwa 2 kopia 2", "Warstwa 2 kopia 3"]
|
||||
for so_name in so_names:
|
||||
try:
|
||||
target = doc.artLayers[so_name]
|
||||
except Exception:
|
||||
print(f"!! brak warstwy {so_name}")
|
||||
continue
|
||||
doc.activeLayer = target
|
||||
try:
|
||||
open_smart_object(app)
|
||||
except Exception as e:
|
||||
print(f"!! nie udalo sie wejsc do {so_name}: {e}")
|
||||
continue
|
||||
so_doc = app.activeDocument
|
||||
dump_doc(so_doc, f"SO[{so_name}]")
|
||||
so_doc.close(ps.SaveOptions.DoNotSaveChanges)
|
||||
|
||||
doc.close(ps.SaveOptions.DoNotSaveChanges)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user