Skip to content

Commit fc4a2ec

Browse files
committed
feat(artlayer): add convertToSmartObject method and update layer kind property
Signed-off-by: longhao <hal.long@outlook.com>
1 parent 8b82247 commit fc4a2ec

File tree

2 files changed

+38
-24
lines changed

2 files changed

+38
-24
lines changed

examples/convert_smartobject_to_layer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
ps.echo("Layer converted to Smart Object")
3030

3131
# Check if it's a smart object
32-
if layer.kind == ps.LayerKind.SmartObject:
32+
if layer.kind == ps.LayerKind.SmartObjectLayer:
3333
ps.echo("Layer is now a Smart Object")
3434

3535
# Convert back to regular layer

photoshop/api/_artlayer.py

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ def __init__(self, parent: Any = None):
5858
"posterize",
5959
"rasterize",
6060
"unlink",
61+
"convertToSmartObject",
6162
)
6263

6364
@property
@@ -149,30 +150,17 @@ def kind(self):
149150
LayerKind: The kind of this layer.
150151
"""
151152
try:
152-
js_code = f"""
153-
function getLayerKindByIndex(index) {{
154-
var ref = new ActionReference();
155-
ref.putIndex(charIDToTypeID('Lyr '), index);
156-
var desc = executeActionGet(ref);
157-
158-
if (desc.hasKey(stringIDToTypeID('artboard'))) {{
159-
return 25; // ArtboardLayer
160-
}}
161-
162-
if (desc.hasKey(stringIDToTypeID('textKey'))) {{
163-
return 2; // TextLayer
164-
}}
165-
166-
return 1; // NormalLayer
167-
}}
168-
getLayerKindByIndex({self.itemIndex});
153+
js = """
154+
var ref = new ActionReference();
155+
ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
156+
var desc = executeActionGet(ref);
157+
var layerType = desc.getInteger(stringIDToTypeID("layerKind"));
158+
layerType;
169159
"""
170-
result = self.eval_javascript(js_code)
171-
print(f"Layer kind result for {self.name}: {result}")
172-
return LayerKind(int(result))
160+
return int(self.eval_javascript(js))
173161
except Exception as e:
174-
print(f"Error getting layer kind for {self.name}: {str(e)}")
175-
return LayerKind.NormalLayer
162+
print(f"Error getting layer kind: {str(e)}")
163+
return None
176164

177165
@kind.setter
178166
def kind(self, layer_type):
@@ -552,4 +540,30 @@ def invert(self):
552540
self.app.invert()
553541

554542
def duplicate(self, relativeObject=None, insertionLocation=None):
555-
return ArtLayer(self.app.duplicate(relativeObject, insertionLocation))
543+
"""Duplicates the layer.
544+
545+
Args:
546+
relativeObject: Layer or LayerSet.
547+
insertionLocation: The location to insert the layer.
548+
549+
Returns:
550+
ArtLayer: The duplicated layer.
551+
552+
"""
553+
dup = self.app.duplicate(relativeObject, insertionLocation)
554+
return ArtLayer(dup)
555+
556+
def convertToSmartObject(self):
557+
"""Converts the layer to a smart object.
558+
559+
Returns:
560+
ArtLayer: The converted smart object layer.
561+
562+
"""
563+
# Convert layer to smart object using JavaScript
564+
js = """
565+
var idnewPlacedLayer = stringIDToTypeID("newPlacedLayer");
566+
executeAction(idnewPlacedLayer, undefined, DialogModes.NO);
567+
"""
568+
self.eval_javascript(js)
569+
return self

0 commit comments

Comments
 (0)