クリエイター手抜きプロジェクト[390]Adobe Photoshop CS3〜CC編 レイヤーを名前順に並び替える
── 古籏一浩 ──

投稿:  著者:


今回は、Photoshopでレイヤーを名前順に並び替えるスクリプトです。IllustratorとPhotoshopで使われている、JavaScriptのオブジェクトやメソッドは非常に似ています。


以下のスクリプトも、基本的にはIllustratorでレイヤーを名前順に並び替えるものと似ています。ただPhotoshopには背景があり、背景の場合はレイヤーとみなさず、並び替えを行わないようにする必要があります。

また、Photoshopの場合はレイヤーが不可視状態やロック状態であっても、スクリプトでレイヤー順序を入れ替えることができます。エラーで停止してしまうIllustratorよりは寛容です。

以下のスクリプトを使うと、最初の階層のレイヤーを並び替えます。レイヤーセット内のレイヤーはソートの対象外です。


// レイヤーをソートする
(function sortLayer(layObj){
var nameList = []; // 名前を入れる配列
var bg = 0;
if(layObj[layObj.length - 1].isBackgroundLayer == true){
bg = 1;
}
for(var i=0; i<layObj.length-bg; i++){
layObj[i].name = "_"+layObj[i].name;
// 名前を保存しておく
nameList[i] = layObj[i].name;
}
// レイヤーを昇順に並べ替え
nameList = nameList.sort();
var flag = confirm("降順にしますか?");
if (flag == true){
// レイヤー名を降順に並べ替える
nameList.reverse();
}
// 挿入基準のレイヤーを一番上に移動する
var baseLayObj = layObj[nameList[0]];
baseLayObj.move(layObj[0], ElementPlacement.PLACEBEFORE);
// レイヤーを並べ替え
for(var i=1; i<nameList.length; i++){
var aLay = layObj[nameList[i]];
aLay.move(baseLayObj, ElementPlacement.PLACEBEFORE);
}
// 最初のレイヤーを移動
baseLayObj.move(layObj[0], ElementPlacement.PLACEBEFORE);
// 名前を元に戻す
for(var i=0; i<layObj.length-bg; i++){
layObj[i].name = layObj[i].name.substr(1, 99999);
}
})(activeDocument.layers);


選択したレイヤーセット内のレイヤーを並べ替えるには、以下のスクリプトになります。なお、このスクリプトでもレイヤーセット内にレイヤーセットがある場合、入れ子になったレイヤーセット内のレイヤーは並べ替えの対象になりません。


// 選択されたレイヤーセット内のレイヤーをソートする
function sortLayer(layObj){
var nameList = []; // 名前を入れる配列
for(var i=0; i<layObj.length; i++){
layObj[i].name = "_"+layObj[i].name;
// 名前を保存しておく
nameList[i] = layObj[i].name;
}
// レイヤーを昇順に並べ替え
nameList = nameList.sort();
var flag = confirm("降順にしますか?");
if (flag == true){
// レイヤー名を降順に並べ替える
nameList.reverse();
}
// 挿入基準のレイヤーを一番上に移動する
var baseLayObj = layObj[nameList[0]];
baseLayObj.move(layObj[0], ElementPlacement.PLACEBEFORE);
// レイヤーを並べ替え
for(var i=1; i<nameList.length; i++){
var aLay = layObj[nameList[i]];
aLay.move(baseLayObj, ElementPlacement.PLACEBEFORE);
}
// 最初のレイヤーを移動
baseLayObj.move(layObj[0], ElementPlacement.PLACEBEFORE);
// 名前を元に戻す
for(var i=0; i<layObj.length; i++){
layObj[i].name = layObj[i].name.substr(1, 99999);
}
}
(function (){
if(!activeDocument.activeLayer.layerSets){
alert("レイヤーセットを選択してください");
return;
}
sortLayer(activeDocument.activeLayer.layers);
})();


【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/
>

「データビジュアライゼーションのためのD3.js徹底入門」が無事に発売となりました。しかし、ESTK本の紙版は未だに手元に届かず……。オンデマンド印刷だから、注文があれば、すぐに印刷できて手元に届くんじゃないかと思ったのに違うんでしょうか。まさか、そんなに大量に印刷需要があったとは思えないので、他の本優先で印刷になっているのか……謎です。

・データビジュアライゼーションのためのD3.js徹底入門
< http://www.amazon.co.jp/dp/4797368861
>

・D3.js例文辞典
< http://www.openspc2.org/reibun/D3.js/
>

・ExtendScript Toolkit(ESTK)基本編
< http://www.amazon.co.jp/dp/B00JUBQKKY/
>

・ExtendScript Toolkit(ESTK)基本編(紙バージョン)
< http://www.amazon.co.jp/dp/4844396137/
>

・ExtendScript Toolkit(ESTK)基本編(iBooks)
< https://itunes.apple.com/jp/book/extendscript-toolkit-estk/id868057300
>

・4K/ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/
>

・JavaScript逆引きハンドブック
< http://www.amazon.co.jp/dp/4863541082
>

・Adobe CS2〜CS6,CC JavaScriptリファレンス&ライブラリ
< http://www.openspc2.org/reibun/AdobeJS/index.html
>

・Adobe JavaScriptリファレンス
< http://www.amazon.co.jp/dp/4844395955
>

・Nexus 7(アンドロイドタブレット)使い方辞典
< http://www.openspc2.org/reibun/Android/Nexus7/
>

・クリエイター手抜きプロジェクト
< http://www.openspc2.org/projectX/
>

・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< https://www.ddc.co.jp/estore/cgi/item/start.cgi?m=DetailViewer&record_id=243
>
吉田印刷所の「印刷の泉」でも購入できるようになりました。