Photoshopの自動処理をJavaScriptで書いていると、なかなか任意のメソッドを見つけられない時があります。
PhotoshopのScripting Listenerを使用すれば自分で行ったアクションをすべてJS形式で吐き出してくれるので、必要なコード部分だけを取り出し関数化しておけば希望の処理を行うことができます。
自分でよく使っていた関数をメモしておきます。
レイヤーを最前面に
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// アクティブレイヤーを最前面に function topLay(){ var idmove = charIDToTypeID( "move" ); var desc26557 = new ActionDescriptor(); var idnull = charIDToTypeID( "null" ); var ref3177 = new ActionReference(); var idLyr = charIDToTypeID( "Lyr " ); var idOrdn = charIDToTypeID( "Ordn" ); var idTrgt = charIDToTypeID( "Trgt" ); ref3177.putEnumerated( idLyr, idOrdn, idTrgt ); desc26557.putReference( idnull, ref3177 ); var idT = charIDToTypeID( "T " ); var ref3178 = new ActionReference(); var idLyr = charIDToTypeID( "Lyr " ); var idOrdn = charIDToTypeID( "Ordn" ); var idFrnt = charIDToTypeID( "Frnt" ); ref3178.putEnumerated( idLyr, idOrdn, idFrnt ); desc26557.putReference( idT, ref3178 ); executeAction( idmove, desc26557, DialogModes.NO ); } |
レイヤーマスクをかける
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// アクティブレイヤーにレイヤーマスクをかける function layerMask(){ var idMk = charIDToTypeID( "Mk " ); var desc14 = new ActionDescriptor(); var idNw = charIDToTypeID( "Nw " ); var idChnl = charIDToTypeID( "Chnl" ); desc14.putClass( idNw, idChnl ); var idAt = charIDToTypeID( "At " ); var ref8 = new ActionReference(); var idChnl = charIDToTypeID( "Chnl" ); var idChnl = charIDToTypeID( "Chnl" ); var idMsk = charIDToTypeID( "Msk " ); ref8.putEnumerated( idChnl, idChnl, idMsk ); desc14.putReference( idAt, ref8 ); var idUsng = charIDToTypeID( "Usng" ); var idUsrM = charIDToTypeID( "UsrM" ); var idRvlS = charIDToTypeID( "RvlS" ); desc14.putEnumerated( idUsng, idUsrM, idRvlS ); executeAction( idMk, desc14, DialogModes.NO ); } |
レイヤーのピクセル描画範囲から選択範囲を取得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// アクティブレイヤーが選択範囲を取得 function getSelect(){ var idsetd = charIDToTypeID( "setd" ); var desc4058 = new ActionDescriptor(); var idnull = charIDToTypeID( "null" ); var ref1695 = new ActionReference(); var idChnl = charIDToTypeID( "Chnl" ); var idfsel = charIDToTypeID( "fsel" ); ref1695.putProperty( idChnl, idfsel ); desc4058.putReference( idnull, ref1695 ); var idT = charIDToTypeID( "T " ); var ref1696 = new ActionReference(); var idChnl = charIDToTypeID( "Chnl" ); var idChnl = charIDToTypeID( "Chnl" ); var idTrsp = charIDToTypeID( "Trsp" ); ref1696.putEnumerated( idChnl, idChnl, idTrsp ); desc4058.putReference( idT, ref1696 ); executeAction( idsetd, desc4058, DialogModes.NO ); } |
レイヤーを一階層下へ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// アクティブレイヤーを一階層下へ function oneDownLay(){ var idmove = charIDToTypeID( "move" ); var desc4067 = new ActionDescriptor(); var idnull = charIDToTypeID( "null" ); var ref1702 = new ActionReference(); var idLyr = charIDToTypeID( "Lyr " ); var idOrdn = charIDToTypeID( "Ordn" ); var idTrgt = charIDToTypeID( "Trgt" ); ref1702.putEnumerated( idLyr, idOrdn, idTrgt ); desc4067.putReference( idnull, ref1702 ); var idT = charIDToTypeID( "T " ); var ref1703 = new ActionReference(); var idLyr = charIDToTypeID( "Lyr " ); var idOrdn = charIDToTypeID( "Ordn" ); var idPrvs = charIDToTypeID( "Prvs" ); ref1703.putEnumerated( idLyr, idOrdn, idPrvs ); desc4067.putReference( idT, ref1703 ); executeAction( idmove, desc4067, DialogModes.NO ); } |
レイヤーをスマートオブジェクト化
1 2 3 4 5 |
// アクティブレイヤーをスマートオブジェクト化 function smartObj(){ var idnewPlacedLayer = stringIDToTypeID( "newPlacedLayer" ); executeAction( idnewPlacedLayer, undefined, DialogModes.NO ); } |