Adobe Photoshop CS3/CS4/CS5編 フォルダ内のJPEG画像をアスキーアートにする

今回も前回と同じネタですが・・・。今回はフォルダ内にあるJPEG画像をまとめてアスキーアートに変換するスクリプトです。1つのファイルの変換に時間がかかるので、変換対象となるJPEG画像が多数あると数十分かかる場合があります。もし、途中で止めたい場合にはescキーかcommandキーと.(ピリオド)を同時に押してください。
また、ESTK (Extend Script ToolKit) から実行している場合は、停止ボタンをクリックすれば止まります。


// フォルダ内にあるJPEG画像をW×Hの文字で表現する
(function(){
preferences.rulerUnits = Units.PIXELS; // 単位をピクセルに設定
// サイズ
var w = 64;
var h = 64;
// 文字で輝度を表現する
var chr = [ " ",".","・","+","%","#","*","■"];
var imgFolder = Folder.selectDialog("JPEG画像ファイルがあるフォルダを選択してください");
if(!imgFolder){ return; } // キャンセルされたら何もしない
var ascFolder = Folder.selectDialog("保存するフォルダを選択してください");
if (!ascFolder){ return; } // キャンセルされたら何もしない
var files = imgFolder.getFiles("*.jpg"); // JPEGファイルのみ取得
for(var f=0; f<files.length; f++){
var imgFile = files[f]; // ファイルオブジェクトを入れる
var ascFile = new File(ascFolder+"/"+imgFile.name+".txt"); // 元画像ファイル名.txtにする
var flag = ascFile.open("w"); // 書き込みモードで開く
if (!flag){
alert("ファイルが書き込めないようです");
return; // エラーなので処理を中断
}
ascFile.encoding = "utf-8";
app.open(imgFile);
var docObj = app.activeDocument;
docObj.resizeImage(w, h); // 指定されたサイズにする
docObj.changeMode (ChangeMode.GRAYSCALE);
for(var y=0; y<h; y++){
var txt = "";
for(var x=0; x<w; x++){
// ピクセル輝度を読み出し文字数で除算
var g = Math.floor(getPixel(x,y) / (256/chr.length));
txt = txt + chr[g]; // 対応する文字を連結
}
ascFile.writeln(txt);
}
docObj.close(SaveOptions.DONOTSAVECHANGES);
}
//---------------------------------------------
// ピクセルの輝度を取得する(8bitモード専用)
//---------------------------------------------
function getPixel(x,y){
docObj.selection.select([[x,y],[x+1,y],[x+1,y+1],[x,y+1],[x,y]]);
var data = docObj.channels[0].histogram;
for (var i=0; i<256; i++) { if (data[i] > 0) return i; }
}
})();

[サンプルをダウンロード]