ASCIIアート生成ツール(画像からテキストへ)

好きな写真をASCIIアートに変換 — 幅と文字密度を調整でき、コピーやダウンロードができるモノクロテキストを出力します。

1,149回閲覧

100

仕組み

この生成ツールは、画像をキャンバスに描画したうえで、サンプリング用のセルの格子に分割し、各セルの平均的な明るさ(輝度)を計算します。その明るさの値は、あらかじめ定義された文字密度のスケール — たとえば@%#*+=-:.のような — に対応づけられ、視覚的に密度が高く暗い文字(@)から、疎で明るい文字(ピリオドや単なる空白)まで並んでいます。ほぼ黒に近いセルは@になり、ほぼ白に近いセルは空白になり、その中間はすべて、測定された明るさに比例してスケール上のどこかに配置されます。この段階で色情報は捨てられます — どの文字が選ばれるかを決めるのは色相ではなく輝度だけです。

ここで一つ注意点があります。等幅フォントの文字は正方形ではなく縦長の長方形であるため、1ピクセルを1文字にそのまま対応させると、元の写真に比べて結果が縦方向に間延びしてしまいます。このツールはこの縦横比のずれを補正するため、列数のおよそ2倍の行数をサンプリングします — 横方向は1ピクセルにつき1文字、縦方向は2ピクセルにつき1文字 — これにより、最終的なASCIIアートの比率が、不自然に縦長にならず元の画像に近い状態に保たれます。

具体例として、出力幅を100文字に設定して写真をサンプリングすると、縦方向の2:1補正を適用した後で、およそ100列×60〜70行になります。これはプレーンテキストファイルやメール、ターミナルにそのまま貼り付けられるほど小さいサイズでありながら、色の痕跡がすべて失われていても、文字密度の対応づけが元画像全体の明暗パターンを保持しているため、十分に見分けがつきます。

知っておくとよいこと

すべての処理はブラウザ内で完結します。写真はメモリ上の<canvas>要素に描画され、JavaScriptによって1ピクセルずつ読み取られるため、サーバーに送信されることは一切ありません。出力幅を調整することで、詳細さとサイズのバランスを調整できます — 幅を狭くするとコンパクトでより抽象的な結果になり、幅を広くすると細部が保たれる代わりにテキストのブロックがはるかに大きくなります。また、結果を暗い背景(ターミナルなど)に表示するか、明るい背景(印刷したページや白い文書など)に表示するかに応じて、密度スケールを反転させることもできます。

よくある質問

なぜ出力が伸びたり潰れたりして見えるのですか?

等幅文字は幅よりも高さのほうが大きいため、このツールは通常のピクセル格子が必要とするおよそ2倍の行数をサンプリングすることで補正しています — これにより、元の画像に近い比率が保たれます。この補正がなければ、正方形の写真は等幅フォントで描画したときに明らかに縦長で細く見えてしまいます。

このツールは画像の各部分にどの文字を使うかをどうやって決めているのですか?

サンプリングされた各セルの明るさを平均し、その値を、視覚的に密度が高いもの(@や#など)から疎なもの(.や空白など)まで順に並べた固定の密度スケールに対応づけます — 暗い領域には密度の高そうな文字が、明るい領域には疎な文字が割り当てられます。この対応づけに使われるのは輝度のみで、各領域の元の色がどの文字を選ぶかに影響することはありません。

文字スケールは反転させるべきですか?

結果をターミナルのような暗い背景に表示する場合は、初期設定のままで構いません。白い文書のような明るい背景に貼り付ける場合は、暗い部分が視覚的に「重く」見え続けるようスケールを反転させてください — そうしないと明暗の関係が逆転し、画像が元の写真のネガのように見えてしまうことがあります。

この写真はどこかにアップロードされますか?

いいえ — 画像はブラウザから一切出ません。ローカルのcanvas要素に描画され、すべてクライアント側でサンプリングされます。これは、サーバーとの通信を必要としない他のブラウザ内画像編集ツールと同じ仕組みです。

出力幅を大きくするとなぜより詳細な結果になるのですか?

幅は画像がいくつのサンプリングセルに分割されるかを決めます — セル数が多いほど、各セルが元の写真のより小さな範囲をカバーするため、明るさがより細かい粒度で測定され、目や葉の縁、細かい質感といった小さなディテールが、単一の平坦な文字に均されて失われることなく変換後も残ります。

コメント

まだコメントはありません — 最初のコメントを書いてみましょう!

関連ツール