自身が躓いた部分と、解決サンプル。
目次
ドキュメントの複製でドキュメント名を指定したい
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を使う
}
どっちかにしてほしいぜ!