クリエイター手抜きプロジェクト[392]Adobe Photoshop CS3〜CC編 フォルダ内のPSDファイルに含まれる文字を検索する/古籏一浩

投稿:  著者:  読了時間:8分(本文:約3,500文字)


今回は、Photoshopでフォルダ内のPSDファイルに含まれる文字を検索するスクリプトです。多くの場合、文字を検索した後に、該当するファイルのパスをテキストファイルに書き出します。ただ、それだと実際に該当するファイルを開く場合に面倒です。

そこで、今回のスクリプトではテキストレイヤーに一致する文字があった場合は、指定されたフォルダに該当するPSDファイルのエイリアスを作成します。エイリアスを作成しておけば、該当するファイルを開く場合に便利です。また、ディスクの容量もほとんど消費しません。

PSDファイルがあるフォルダは、入れ子(サブフォルダ)になっていても大丈夫です。自動的にサブフォルダ内のPSDファイルも検索されます。また、PSDファイルで、レイヤーセット内にテキストレイヤーがある場合でも検索されます。





// Photoshopのテキストレイヤーに文字があるか検索しエイリアスを作成する
(function(){
// PSDファイルがあるフォルダを指定する
var folderObj = Folder.selectDialog("文字を検索するPSDファイルがあるフォルダを選択してください");
if (!folderObj){ return; } // キャンセルされた場合は何も処理しない
// エイリアスを入れるフォルダを指定する
var saveFolder = Folder.selectDialog("結果(エイリアス)を保存するフォルダを選択してください");
if (!saveFolder){ return; } // キャンセルされた場合は何も処理しない
// 検索する文字列を入力
var searchText = prompt("検索する文字列を入れてください", "mz");
if (!searchText){ return; } // キャンセルされたら何もしない
makeAliasList(folderObj);
alert("検索が終了しました");
// エイリアスを作成する関数
function makeAliasList(folderObj){
// PSDファイル一覧を取得する
var fileList = folderObj.getFiles("*.psd");
// ファイルの数だけ開いて文字列を検索する
for(var i=0; i<fileList.length; i++){
app.open(fileList[i]);
var flag = findText(activeDocument, searchText);
if (flag == true){
// ファイル名が重複しないようにスラッシュをアンダーバーにしたファイル名を使う
var filename = fileList[i].fsName.replace(new RegExp("/", "g"), "_");
// エイリアスとなるファイルオブジェクトを作成する
var aliasFileObj = new File(saveFolder+"/"+filename);
// エイリアスを作成する
var flag = aliasFileObj.createAlias(fileList[i]);
if (flag == false){
$.writeln("失敗:"+filename);
// もし、アラートダイアログを表示した方がいい場合は以下の行の//を消してください。
// alert("失敗:"+filename);
}
}
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}
// フォルダを含めた一覧を取得する
fileList = folderObj.getFiles();
for(var i=0; i<fileList.length; i++){
// フォルダかどうか調べる
if(fileList[i].getFiles){
makeAliasList(fileList[i]); // フォルダの場合は再帰呼び出し
}
}
// レイヤー内を検索する関数
function findText(layObj, searchText){
for(var i=0; i<layObj.artLayers.length; i++){
if(layObj.artLayers[i].kind == LayerKind.TEXT){
var text = layObj.artLayers[i].textItem.contents;
// 一致しているかどうか調べる
if (text.indexOf(searchText) > -1){
// 一致していたら以後の処理を中断して戻る
return true;
}
}
}
// レイヤーセットの場合は自分自身の関数を呼び出して処理する
for(var i=0; i<layObj.layerSets.length; i++){
var flag = findText(layObj.layerSets[i], searchText);
if (flag == true){ return true; }
}
return false;
}
}
})();


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

金曜日の定番だった十河さんの連載が635回で終了ということで、長い間のご執筆おつかれさまでした。私の連載が今回で392回なのですが、635回以上の連載は大変だったのではないかと。多分、635回の連載回数は超えられないんじゃないかなという気はします。

ようやくESTK本の紙バージョンが手元に来ました。電子書籍版と違って一度購入してしまえば、なくなったり取り上げられたりすることがないので安心です。紙版はモノクロなので、カラーのキャプチャー画像の方がいいという人は電子書籍版がおすすめ。

紙版が出るまでにも、トラブル等あったり、さらにAdobe JavaScriptリファレンスのiBooks版が出ない理由が判明したりと、電子書籍に関してはトラブルが絶えません。また、時間があれば前回のような本の執筆ネタをやろうかと思ってます。

Appleが出した言語Swiftのページを作りました。地道に作っていくしかないのですが、時代はObjective-C, C/C++をリプレースする言語を求めているんでしょうか。今のところ、Swift言語よりもGo言語も方がいいかなという感じはします。

・Swift例文辞典
< http://www.openspc2.org/reibun/Swift/1.0/ >

・Go言語 例文辞典
< http://www.openspc2.org/reibun/Go/1.1.1/ >

・データビジュアライゼーションのための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)基本編(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 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 >
吉田印刷所の「印刷の泉」でも購入できるようになりました。