今回のスクリプトは、何10年も前からある「画像をアスキーアートにする」ものです。1970〜80年代初頭までは、画像を文字にしてラインプリンタで出力して表現するという手法がありました。
当時のラインプリンタは、改行とは別にプリンタヘッドを左端に戻すことができ、それを利用して文字を重ね打つことで濃淡を表現していました。今でも文字がメインの掲示板などでは、アスキーアートが使われていたりします。
以下のスクリプトは、もっとも単純なもので画像をグレースケールに変換し、その値に応じて対応する文字として出力します。
当時のラインプリンタは、改行とは別にプリンタヘッドを左端に戻すことができ、それを利用して文字を重ね打つことで濃淡を表現していました。今でも文字がメインの掲示板などでは、アスキーアートが使われていたりします。
以下のスクリプトは、もっとも単純なもので画像をグレースケールに変換し、その値に応じて対応する文字として出力します。
// 画像をW×Hの文字で表現する
(function(){
// サイズ
var w = 64;
var h = 64;
// 文字で輝度を表現する
var chr = [ " ",".","・","+","%","#","*","■"];
var imgFile = File.openDialog("画像ファイルを選択してください", "*");
if(!imgFile){ return; } // キャンセルされたら何もしない
var ascFile = File.saveDialog("保存するテキストファイル名を入れてください");
if (!ascFile){ return; }
var flag = ascFile.open("w"); // 書き込みモードで開く
if (!flag){
alert("ファイルが書き込めないようです");
return;
}
ascFile.encoding = "utf-8";
preferences.rulerUnits = Units.PIXELS; // 単位をピクセルに設定
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; }
}
})();
アスキーアートのサイズを変えるには
var w = 64;
var h = 64;
の値を調整してください。wの部分が横幅、hの部分が縦幅になります。また、濃淡に関しては以下の行にある文字を変更してください。なお、必ずしも8段階や16段階である必要はなく、以下のchr=[]の[]内に書かれた文字数に合わせて自動的に調整されます。つまり好きな段階の濃淡表現を行うことができます。
var chr = [ " ",".","・","+","%","#","*","■"];
【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/
>
仕事の都合でPDFのJavaScriptを再び学習中。最新のリファレンスとかはないけど、それでも非常に多機能。PDFのJavaScriptが動作するビューアーは限られますが、意外なことにブラウザであるGoogle Chromeが対応してました。全部ではありませんが。
・毎度おなじみASCII.jpの連載
「Navigation Timing APIでサイトパフォーマンスを調査」
< http://ascii.jp/elem/000/000/675/675568/
>
・クリエイター手抜きプロジェクト【2011年分まで用意しました】
< http://www.openspc2.org/projectX/
>
・Google API Expertが解説するHTML5ガイドブック【増刷だそうで】
< http://www.amazon.co.jp/dp/4844329278/
>
・JavaScriptテクニックブック【これも増刷】
< http://www.amazon.co.jp/dp/4903111520/
>
・改訂5版JavaScriptポケットリファレンス
< http://www.amazon.co.jp/dp/4774148199
>
・10日で覚えるHTML5入門教室
< http://www.amazon.co.jp/dp/4798124184
>
・ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/
>
・PIXTA【PIXTAでも映像素材を販売中】
< http://pixta.jp/movie/
>
・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< http://www.openspc2.org/book/PDF/Adobe_Illustrator_CS3_JavaScript_Book/
>
吉田印刷所の「印刷の泉」でも購入できるようになりました。