画像→文字変換

いかづちSqueak

2008年08月20日 23:06

OS自作の話はちょっと一休み。
OS自作[5]で予告したテクニックの紹介です。

ペイントとテキストエディタのみを使って画像からテキストに変換する方法。

「画像からテキストに変換」と書くとなんだかOCRみたいに見えてしまいますね。
そうではなく、
これ


こう
--------
--*----*
--***--*
-*-*---*
-*-*-*-*
**-***-*
-**-**-*
-**-**-*
-*****-*
-**-**-*
-*--*--*
-*--*--*
-*-*---*
-*-*---*
-**---**
--------
する
方法についてです。

解説は後にしてまずは手順を見せましょう。

まず画像を用意します。

右に1ドット余白を作ります。(白背景だと見えない…)

色を塗り替えます。

そしてさっき空けておいた余白を別の色で塗ります。

ここで、塗る色はどれでもいいわけではなく、ペイントのパレットで言うと

この図で示した6つのどれかである必要があります。ここでは見やすい色を選びました。
次にこの画像を上下反転します。

そして次が一番の重要ポイント!
この画像を「256色ビットマップ」で保存します。他の形式では駄目です。

できたものがこちら…と言いたい所ですがここではbmpは貼れないのでpngに直してあります。

色が微妙に変わるのは仕様です。

さてここまで来たらあと1歩。
ここでできたbmpファイルをテキストエディタに放り込みます。
すると、こんな感じの表示になります。
BM・      6  (               タ   ト  ト                €  €   €€ €   € € €€  タタタ タワタ ヲ   @   `   €      タ   ・ @   @   @@  @`  @€  @  @タ  @・ `   `   `@  ``  `€  `  `タ  `・ €   €   €@  €`  €€  €  €タ  €・       @  `  €    タ  ・ タ   タ   タ@  タ`  タ€  タ  タタ  タ・ ・  ・  漾  濮  烙  燿  狢  珥 @   @   @ @ @ ` @ € @  @ タ @ ・@   @   @ @ @ ` @ € @  @ タ @ ・@@  @@  @@@ @@` @@€ @@ @@タ @@・@`  @`  @`@ @`` @`€ @` @`タ @`・@€  @€  @€@ @€` @€€ @€ @€タ @€・@  @  @@ @` @€ @ @タ @・@タ  @タ  @タ@ @タ` @タ€ @タ @タタ @タ・@・ @・ @漾 @濮 @烙 @燿 @狢 @珥 €   €   € @ € ` € € €  € タ € ・€   €   € @ € ` € € €  € タ € ・€@  €@  €@@ €@` €@€ €@ €@タ €@・€`  €`  €`@ €`` €`€ €` €`タ €`・€€  €€  €€@ €€` €€€ €€ €€タ €€・€  €  €@ €` €€ € €タ €・€タ  €タ  €タ@ €タ` €タ€ €タ €タタ €タ・€・ €・ €漾 €濮 €烙 €燿 €狢 €珥 タ   タ   タ @ タ ` タ € タ  タ タ タ ・タ   タ   タ @ タ ` タ € タ  タ タ タ ・タ@  タ@  タ@@ タ@` タ@€ タ@ タ@タ タ@・タ`  タ`  タ`@ タ`` タ`€ タ` タ`タ タ`・タ€  タ€  タ€@ タ€` タ€€ タ€ タ€タ タ€・タ  タ  タ@ タ` タ€ タ タタ タ・タタ  タタ  タタ@ タタ` タタ€ タタ  、 €€€                 ソソソソソソソソク   ソソPソソソソPク   ソソPPPソソPク   ソPソPソソソPク   ソPソPソPソPク   PPソPPPソPク   ソPPソPPソPク   ソPPソPPソPク   ソPPPPPソPク   ソPPソPPソPク   ソPソソPソソPク   ソPソソPソソPク   ソPソPソソソPク   ソPソPソソソPク   ソPPソソソPPク   ソソソソソソソソク   

前半の意味不明な部分ははいらないのでカットします。
ソソソソソソソソク   ソソPソソソソPク   ソソPPPソソPク   ソPソPソソソPク   ソPソPソPソPク   PPソPPPソPク   ソPPソPPソPク   ソPPソPPソPク   ソPPPPPソPク   ソPPソPPソPク   ソPソソPソソPク   ソPソソPソソPク   ソPソPソソソPク   ソPソPソソソPク   ソPPソソソPPク   ソソソソソソソソク  
ここまで来るとだんだん見えてきましたね。
画像の1ピクセルが1文字に対応して、色ごとに字が違っています。
(ただし画像の横幅が4の倍数でない場合、切りがよくなるように空きができます。
この場合、画像の1行ごとに3つスペースが入っています。)

これを最初に右端に入れておいた色を基準に行を切り分けます。
ソソソソソソソソ
ソソPソソソソP
ソソPPPソソP
ソPソPソソソP
ソPソPソPソP
PPソPPPソP
ソPPソPPソP
ソPPソPPソP
ソPPPPPソP
ソPPソPPソP
ソPソソPソソP
ソPソソPソソP
ソPソPソソソP
ソPソPソソソP
ソPPソソソPP
ソソソソソソソソ
この作業はちょっとしたテキストエディタなら置換機能で「ク   」→「\n」とすることでできます。参考までに自分が愛用しているのは「EmEditor」というソフトです。
(ただし残念ながらメモ帳では置換候補に「改行」を入れることができないので使えません。
これが使えれば「ペイントとメモ帳で」となってインパクトがあったのに…。
どうしてもメモ帳が使いたい人は手動で改行を入れましょう。)

最後にこれをお好みの文字に置換して出来上がりです。
--------
--*----*
--***--*
-*-*---*
-*-*-*-*
**-***-*
-**-**-*
-**-**-*
-*****-*
-**-**-*
-*--*--*
-*--*--*
-*-*---*
-*-*---*
-**---**
--------


とまあこうやって画像をテキストに変換することができたわけですが、どうしてこうなるのか分からないと思います。
途中bmpファイルをテキストエディタに読み込ませるという非常識なこともしています。
というわけでこの辺の解説をしたいと思います。

思います…が、今日は疲れたのでまた今度。