Rubyを使って何か面白いものを作ってみよう!
高倉 利明
株式会社ケイビーエムジェイ
2008/9/24
一般的な画像をアスキーアートに変換するツールを作ってみる。さらに出力にバリエーションを持たせてみよう(編集部)
本記事では、Praggerとnetpbmという2つのライブラリを用いて、画像からアスキーアート(以下AA)を作成して出力するツールについて説明します。「Rubyを使って何か面白いものを作ってみよう!」という筆者の興味に基づいているため、作成したツールが実用的かどうかは度外視しています。
今回は以下の環境を前提としています。関連ソフトウェアについてはあらかじめインストールしておいてください。
・OS
Ubuntu 8.04 (i386)
apt-get、aptitudeなどが使える状態が望ましいです。
・関連ソフトウェア
Ruby 1.8.6
Rubygems 1.2.0
Subversion 1.4.6
Praggerって何?
本当に一言でいってしまうと「Rubyで作られたPlagger」です。Plaggerとは、Perlで記述されたRSSフィードの収集を主たる目的として開発されたツールです。このPlaggerにインスパイアされてRubyで記述されたツールがPraggerです。
関連リンク: | |
Pragger http://pragger.ikejisoft.com/wiki |
強引にまとめると、
- どこかから何かを入力して
- ある形に変換して
- どこかに出力する
ツールとなります。今回の記事で作成するツールに当てはめると、
- ローカルフォルダから画像ファイルを入力して
- アスキーアートに変換して
- コンソール、電子メール、IRCチャットへ出力する
ツールとなります。
今回作成するツールのイメージ |
PraggerのインストールはSubversionリポジトリから直接取得して適当なフォルダに配置します。以下は/usr/local/praggerにエクスポートする例です。
takakura@ubuntu-vm:~$ sudo svn export http://pragger.ikejisoft.com/svn/pragger/trunk/ /usr/local/pragger |
本記事ではPraggerの詳細については説明を省きます。Praggerの公式サイトに詳しい説明がありますので参照してください。
関連記事: | |
一足早く「Plagger」の便利さを実感してみよう http://www.atmarkit.co.jp/fnetwork/rensai/5minplagger/01.html |
netpbmライブラリ群によるAA変換
今回の目的の1つである「画像→AA変換」を実現するために、netpbmライブラリについて説明します。
netpbmは、UNIX環境下で昔から広い範囲で使用されている画像変換ライブラリです。特徴としては単体のコマンドではなく、用途ごとに別々のコマンドに分かれており、組み合わせることでさまざまな処理を実行することが可能となっています。
netpbmでできること(画像をクリックすると拡大します) |
本記事ではnetpbmライブラリ群を利用して画像ファイルからAAに変換することを行っています。
ちなみに今回の方法で生成できるのは一般的にAAとして認識されている「2バイト文字を含むJISアート」ではなく、「1バイトASCII文字のみを使用したアスキーアート」です。生成データは等幅ASCII文字のみで構成されているので、一般的なAA使用方法(某掲示板へ張り付けるなど)ではまともに使用できませんのであしからず。 |
筆者の環境ではapt-getコマンドでnetpbmライブラリをインストールしました。yumやソースコードからのインストールなども可能です。
takakura@ubuntu-vm:~$ sudo apt-get install netpbm |
netpbmには、非常に多くのコマンドが存在します。ここでは詳しい言及を避け、JPEG画像ファイルをpbmファイル(モノクロ画像)にするコマンドに注目します。
takakura@ubuntu-vm:~$ giftopnm test.gif | ppmtopgm | pgmtopbm | > test.pbm |
各コマンドの出力はパイプでつなげられるので、一気にフォーマットを変換できます。
1/3 |
Index | |
Praggerとnetpbmで作る画像→AA変換ツール | |
Page1 Praggerって何? netpbmライブラリ群によるAA変換 |
|
Page2 プラグインの作成 画像→AA変換 電子メール出力プラグイン IRC出力プラグイン |
|
Page3 複数先への出力を平然とやってのけるッ!! これからの発展形を目指して |
Coding Edgeフォーラム トップページ |
Ruby/Rails関連記事 |
プログラミングは人生だ まつもと ゆきひろのコーディング天国 ときにプログラミングはスポーツであり、ときにプログラミングは創造である。楽しいプログラミングは人生をより実りあるものにしてくれる |
|
生産性を向上させるRuby向け統合開発環境カタログ Ruby on Rails 2.0も強力サポート 生産性が高いと評判のプログラミング言語「Ruby」。統合開発環境を整えることで、さらに効率的なプログラミングが可能になる |
|
かんたんAjax開発をするためのRailsの基礎知識 Ruby on RailsのRJSでかんたんAjax開発(前編) 実はAjaxアプリケーション開発はあなたが思うよりも簡単です。まずはRuby on Railsの基礎知識から学びましょう |
|
Praggerとnetpbmで作る画像→AA変換ツール Rubyを使って何か面白いものを作ってみよう! 一般的な画像をアスキーアートに変換するツールを作ってみる。さらに出力にバリエーションを持たせてみよう |
|
コードリーディングを始めよう Railsコードリーディング〜scaffoldのその先へ〜(1) 優れたプログラマはコードを書くのと同じくらい、読みこなす。優れたコードを読むことで自身のスキルも上達するのだ |
|
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|
|