PR

 こんにちは。クジラ飛行机です。本連載では、日本語プログラミング言語「なでしこ」を使って、仕事で役立つプログラムを作っていきます。

 今回は、サイズの大きな画像を小さくするプログラムを作ってみます。デジカメで撮影した写真や、スキャナーで取り込んだ画像は、そのままではサイズが大きくて、メールで送ったり、ホームページで公開するには不適切です。そこで、プログラムを作って、複数の画像を一度に処理してみようと思います。

※なでしこのバージョン1.4017以前の「画像比率変えずリサイズ」命令ではGIFファイルがうまくリサイズできない不具合がありました。本稿の執筆を機に問題を修正しましのたで、GIFファイルで試す場合は、なでしこのページより最新版をダウンロードしてご利用ください。

今回のプログラム

 はじめになでしこで作ったプログラムを紹介します。

【使い方】
 プログラムを実行すると、フォルダ選択ダイアログが出ますので、どのフォルダの画像を変換するのか指定します。そして、フォルダを指定すると、処理が始まります。変換した結果は、デスクトップの「変換結果」というフォルダに保存されます。

【プログラムソース1】

#設定
変更幅=240
変更高=240
結果フォルダ=「{デスクトップ}変換結果¥」
結果フォルダのフォルダ作成。
#初期設定
処理用とはイメージ。
#処理開始
フォルダ選択して、対象フォルダに代入。
対象フォルダ&「*.jpg;*.jpeg;*.png」のファイル列挙。
反復
  母艦のタイトルは対象。
  処理用の画像は、対象フォルダ&対象。
  処理用を変更幅,変更高で画像比率変えずリサイズ。
  処理用を結果フォルダ&対象へ画像保存。
「終わりました」と言う。
終わる。

図1 実行したら変換元フォルダを指定します

図2 実行結果

【カスタマイズの方法】
 変換後の画像サイズは、プログラム冒頭の変数「変更幅」「変更高」で決まります。この変数の値を好きな値に変えることで、変換後の画像サイズが変わります。

 また、現在は、デスクトップの「変換結果」というフォルダに出力されますが、これも冒頭の変数「結果フォルダ」で指定しています。

プログラムの仕組み

 それでは、プログラムの仕組みを1つずつ見ていきましょう。このプログラムの主な構成は以下のようになっています。

(1)どのフォルダの画像を変換するのかユーザーに選んでもらう
(2)フォルダにある画像ファイルを列挙して、列挙した1枚ずつについて以下の3~4の処理を行う
(3)画像を読み込んで、指定の幅にリサイズする
(4)結果出力用のフォルダへ保存する

 フォルダの内容を列挙して、列挙した1つずつのファイルについて処理を行う方法については、「ファイル列挙」命令と「反復」構文を利用しています。これは、前回までの本連載で詳しく解説しています。

画像の表示方法

 今回のプログラムのポイントは、画像を読み込んで、リサイズして、保存するという部分です。

 画像を扱うためには「イメージ」部品を利用します。「部品」とは、プログラムを作るときに使うと便利な機能の集合体です。他に「ボタン」部品や「エディタ」部品などがあります。イメージ部品を使うと、画面に画像を表示したり、表示した画像に対して、サイズ変更やさまざまなフィルタ処理を施したりすることができます。

 では、イメージ部品の一番簡単な使い方を見てみましょう。

 なでしこをインストールしたフォルダに「nadesiko.png」という画像ファイルがあります。その画像を画面に表示するプログラムです。

【プログラムソース2】

表示用イメージとはイメージ。
表示用イメージの画像は、「nadesiko.png」

 「(イメージ名)とはイメージ」と書くことで、イメージ名を持つ「イメージ」部品を作ります。ここで出てきたイメージ名は、そのプログラムの中で扱う「イメージ」部品を特定するための名前に該当します。上のプログラムの例では「表示用イメージ」という言葉がイメージ名になっています。

 そして、「(イメージ部品名)の画像は(ファイル名)」と書くことで、イメージ部品に画像を読み込むことができます。そして読み込んだ画像が画面に表示されます。

 なでしこでは、JPEG、GIF、PNG、BMP、ICO、MAG各形式の画像を読み込むことができます。

画像の幅や高さを調べる

 読み込んだ画像の幅や高さを知りたい時は、「(イメージ名)の幅」「(イメージ名)の高さ」を参照することで、画像のサイズを調べることができます。

【プログラムソース3】

調査用とはイメージ。
調査用の画像は「nadesiko.png」
調査用の幅を表示。
調査用の高さを表示。

 上のように、イメージ部品に画像を設定すると、イメージ部品の幅や高さを調べることができるのです。

画像の縮小の場合は

 画像サイズを変更するには、「画像比率変えずリサイズ」命令を使います。この命令は、以下のような書式で使います。

===
(イメージ名)を(最大幅),(最大高さ)で画像比率変えずリサイズ。
===

 指定した幅や高さの数値ぴったりにトリミングするのではなく、幅、高さのどちらかが最大値になるよう縦横比を維持したままリサイズします。先ほどの画像表示プログラムにこの命令を付け加えるなら以下のようになるでしょう。

【プログラムソース4】

表示用イメージとはイメージ。
表示用イメージの画像は、「nadesiko.png」
表示用イメージを32,32で画像比率変えずリサイズ。

図3 画像を縮小して表示したところ

 「nadesiko.png」は、はじめから小さい画像なので、32ピクセルの大きさにすると、形がわからないほど小さくなってしまいました。

 リサイズ命令では、以下のように大きくすることもできます。

【プログラムソース5】

表示用イメージとはイメージ。
表示用イメージの画像は、「nadesiko.png」
表示用イメージを400,400で画像比率変えずリサイズ。

 ただし、リサイズ命令で拡大・縮小すると、画像が若干ぼやけた感じになってしまいます。基本的にリサイズを繰り返すような処理は避けたほうが無難です。

できた画像を保存する

 そして、画像を保存するには、「画像保存」命令を使います。これは「(イメージ名)を(ファイル名)に画像保存」と書きます。

 イメージ部品を利用して画像を読み込み、リサイズして、保存する一連のプログラムは以下のようになります。

【プログラムソース6】

保存用とはイメージ。
保存用の画像は「nadesiko.png」
保存用を400,400で画像比率変えずリサイズ。
保存用をデスクトップ&「変換画像.png」へ画像保存。

 一行目で「保存用」という名前の部品を作り、二行目でこれに画像を読み込みます。三行目で画像をリサイズして、四行目でファイルへ保存します。

まとめ

 今回は、画像の処理方法について見てきました。

 画像(イメージ部品)に関する命令には「画像xxx」のように名前がついています。なでしこエディタの左側タブにある「命令検索」で「画像」を検索すると、「画像右回転」「画像明度補正」などの画像処理の命令が出てきます。

図4 画像命令の一覧

 これらの命令は、今回紹介した「画像比率変えずリサイズ」や「画像保存」とほとんど使い方が同じです。ですので、今回のプログラムを改良することで機能を追加することができると思います。

 それでは、ぜひ、自分でプログラムを改良して遊んだり、仕事に役立ててみてください。

はじめてこの連載を読む方へ
 この連載では、日本語でプログラムが書ける「なでしこ」というツールを使って仕事に役立ちそうなプログラムを紹介しています。なでしこのプログラムエディター(なでしこエディタ)に、記事中で紹介しているプログラムソースをコピー・アンド・ペーストし、実行ボタンを押すだけで、プログラムを動作させることができます。詳しい内容は本連載第1回をご覧ください。


【PCオンライン編集部からのお願い】
「なでしこ」は個々のユーザーの責任において利用してください。
コラムで紹介するなでしこのプログラム動作については編集部でも確認していますが、すべてのユーザーのパソコン環境で同じように動作することを保証するものではありません。
申し訳ありませんが、紹介する内容について、個別のご質問にはお答えしかねます。なでしこの公式ページでは詳しいマニュアルや質問を受け付ける掲示板が提供されていますので、そちらをご参照ください。
よろしくお願いいたします。