なでしこを明後日の方向に

日本語プログラム言語なでしこを応援しています

なでしこ1で画像をエクセル形式にする

「Image to Excel」というWebアプリが窓の杜で紹介されていました

 ときどき画像ファイルを「Microsoft Excel」ファイルに変換したいなぁって思うことはありませんか? ありますよね!? そんな人に朗報です!

forest.watch.impress.co.jp

作者曰く、

画像をExcelファイル(.xlsx)に変換するクソアプリ「Image to Excel」を公開しました。 セル1つ1つの背景色を変えることで画像を表現しています。

これをなでしこ1で作ってみたいと思います!

要件

画像を受け取り、リサイズする。画素を1つ1つ読み取って、エクセルのセルに着色していく。

これをプログラムでやるのが簡単か否か?

…簡単です! 日本語プログラム言語「なでしこ」なら! 外部ライブラリを取り込まずに20行程度で! 実現できるんです!

完成品

以下はなでしこ1のプログラムです。

cw=100
ch=100
作業とはイメージ
可視オフ
「母艦に画像ファイルをドロップしてね」表示

母艦ファイルドロップ許可オン
母艦ファイルドロップした時
 作業画像母艦ドロップファイル
 作業cw,ch画像比率変えずリサイズ
 
 エクセル起動
 エクセル新規ブック
 エクセル全選択
 3エクセル選択行高さ設定
 0.3エクセル選択列幅設定
 
 x1から作業まで繰り返す
   y1から作業高さまで繰り返す
     y,xエクセルセル名取得してそれエクセル選択
     作業x-1,y-1から画像色取得してそれエクセル着色

実行結果

実行すると「母艦に画像ファイルをドロップしてね」と書かれたウィンドウが現れます。
画像をドロップするとエクセルが起動してセルに色を塗ります。
以下はマリオRPGのサイトからとってきた画像を使用した例

実行結果

できました☆

解説

画像のロード準備

以下の部分は画像を受け取る準備です。

作業とはイメージはイメージ部品の作成です。 画像を設定すると自動でロードしてくれます。

母艦と言うのはメインウィンドウのこと。 今回はドロップした画像ファイルをエクセルに転記していく方針です。

画像比率変えずリサイズはなでしこの標準命令です。 ここではcw=100,ch=100におさまるようにリサイズしています。

cw=100
ch=100
作業とはイメージ
可視オフ
「母艦に画像ファイルをドロップしてね」表示

母艦ファイルドロップ許可オン
母艦ファイルドロップした時
 作業画像母艦ドロップファイル
 作業cw,ch画像比率変えずリサイズ

エクセル方眼紙の作成

続く処理はエクセル方眼紙の作成です。

書いてあることは謎の手順書…ではなく、エクセルを操作する命令です。 いずれもなでしこの標準命令です。

 エクセル起動
 エクセル新規ブック
 エクセル全選択
 3エクセル選択行高さ設定
 0.3エクセル選択列幅設定

色の転記

続く以下の処理は色の転記です。多少プログラムらしい姿ですね。

行,列を数値で指定して"A1"形式の座標に変換する命令エクセルセル名取得を使ってセルを選択します。 行,列の順に引数を取るのでx,yを逆にして座標を指定します。

画像から色を取得して、選択したセルを着色します。 画像は座標が0,0から始まるのに対し、エクセルは1,1から始まるのでズラしています。

 x1から作業まで繰り返す
   y1から作業高さまで繰り返す
     y,xエクセルセル名取得して、それエクセル選択
     作業x-1,y-1から画像色取得して、それエクセル着色

なでしこ1ではインデントでループのブロックをあらわします。Python風ですね。
インデントには全角スペースが推奨されています。

おわりに

なでしこ1で「Image to Excel」を再現してみました。
ただし出力速度はそうとうもっさりなので、本家のアプリを使うと良いと思います。

関係ないけど、シンタックスハイライトのカンマと読点が見にくいので直したい。