SmartObjectレイヤーの名前を出力するPhotoshopスクリプト
ちょっと必要に迫られたので、スマートオブジェクトレイヤーの一覧をtxtファイルに一括出力するスクリプトを用意しました。
//レイヤーを探す //LayerSetだったら再帰で探す function FindLayer( rootLayer, condition ) { var artLayers = []; var layers = rootLayer.layers; var length = layers.length; for ( var i = 0 ; i < length ; ++i ) { var layer = layers[i]; if ( layer.typename == "ArtLayer" ) { if ( condition( layer ) ) { artLayers.push(layer); } } else if ( layer.typename == "LayerSet" ) { artLayers = artLayers.concat( FindLayer(layer, condition) ); } } return artLayers; } //SmartObjectのArtLayerを取得したいときのCondition function FindSmartObject( artLayer ) { return artLayer.kind == LayerKind.SMARTOBJECT; } function WriteLine( f, artLayer ) { f.write(artLayer.name); //情報を足したいときはここに f.write("\n"); } //処理メイン function Main() { var activeDocument = app.activeDocument; if ( activeDocument == null ) { return; } //初期設定 keepUnit = preferences.rulerUnits; preferences.rulerUnits = Units.PIXELS;//pixelユニットとする //ドキュメント名 var documentName = activeDocument.name; var findLayers = FindLayer(activeDocument, FindSmartObject); var length = findLayers.length; if ( length == 0 ) { preferences.rulerUnits = keepUnit; alert("目的のレイヤーを発見できませんでした。"); return; } var txtFile = File.openDialog("矩形情報Textファイルを出力します", "*.txt"); var f = new File(txtFile); f.open('w'); for ( var i = 0 ; i < length ; ++i ) { WriteLine(f, findLayers[i]); } f.close(); //戻す preferences.rulerUnits = keepUnit; //完了ダイアログ表示 alert("出力が完了しました"); } Main();
本当はスマートオブジェクトのTransformも出力したかったけれどもAMCodeを呼ばなければいけないようなので、後ほどの宿題ということで。