PhotoshopScriptの躓いた所

自身が躓いた部分と、解決サンプル。

ドキュメントの複製でドキュメント名を指定したい

activeDocument.duplicate('temp');//複製

引数にStringを入れると、ドキュメント名になるみたい。

レイヤーの複製で、別のドキュメントに複製したい

activeDocument.activeLayer.duplicate( documentHogehoge ); //引数にドキュメントを入れるとそこに複製される
activeDocument.activeLayer.duplicate( documentHogehoge.layerSets[0] ); //レイヤーセットを入れるとその中に入る

引数に親になるドキュメントやレイヤーセットを入れるといいみたい。

WEB用に保存ダイアログを出す

var idExpr = charIDToTypeID( "Expr" );
var desc15 = new ActionDescriptor();
    var idUsng = charIDToTypeID( "Usng" );
    var idSaveForWeb = stringIDToTypeID( "SaveForWeb" );
    var desc16 = new ActionDescriptor();
    desc15.putObject( idUsng, idSaveForWeb, desc16 );
executeAction( idExpr, desc15, DialogModes.ALL /*DialogModes.NO*/ );

script Listenerから。ダイアログを出すだけ。
デフォルトの設定や保存先は直前に”WEB用に保存”したものを引き継ぐ。

選択レイヤーをスマートオブジェクト化

executeAction(
    stringIDToTypeID( "newPlacedLayer" ),
    undefined,
    DialogModes.NO
);

script Listenerから。activeDocument.activeLayerに有効

選択レイヤーをラスタライズ

var desc5 = new ActionDescriptor();
var ref4 = new ActionReference();
ref4.putEnumerated(
    charIDToTypeID( "Lyr " ),
    charIDToTypeID( "Ordn" ),
    charIDToTypeID( "Trgt" )
);
desc5.putReference(
    charIDToTypeID( "null" ),
    ref4
);
desc5.putEnumerated(
    charIDToTypeID( "What" ),
    stringIDToTypeID( "rasterizeItem" ),
    stringIDToTypeID( "layerStyle" )
);

script Listenerから。activeDocument.activeLayerに有効

.layersの中にはレイヤーとレイヤーセットが両方入っている

activeDocument.layserSets; //レイヤーセットのみ
activeDocument.layers; //レイヤーとレイヤーセット

抽出時に注意する必要アリ。

Photoshopで用意されているObjectに key in するとエラーで止まるプロパティがある

for (var vLp in activeDocument){
    activeDocument[vLp]; // <- error
}

try{}chatch(e){}とかで回避するとよさげ。

Photoshop上でのPathは、UserNameが入らない

activeDocument.path; //"~/Desktop" など
(new File(activeDocument.path)).fsName;     // "~/Desktop" から、"C:\Users\(User名)\Desktop" 等の絶対パスに直せる

photoshop完結だったら問題ないが、batファイルに飛ばしたりする時こまる。

カラーモードの取得と変更で、定数が違う

//比較する時はDocumentModeを使う
if(activeDocument.mode == DocumentMode.INDEXEDCOLOR){
    activeDocument.changeMode(ChangeMode.RGB);//変更する時はChangeModeを使う
}

どっちかにしてほしいぜ!