植物図鑑 入力データ作成方法
macOS 10.15.7 / Xcode 11.3.1 / Swift 5.0
概要
Webアプリケーション「地元の植物図鑑」の入力となる写真データを作成する。植物図鑑に新しい項目(イメージファイル、付属情報となる日付、撮影場所、種名、コメントなど)を追加するときに使用する。swiftで実装した macOSのクライアントアプリケーションで、一部 Node.jsを使用する。
主な機能
- 植物を撮影した写真(イメージファイル)を取り込み、サイズと名前を変更する。
- サイズは規定の大きさ(800 x 600)に変更し、名前には撮影日の年月日を付与する。
- 写真の属性として、日付、植物の属・科・種、撮影場所、コメントを付与する
- 種マスターの管理(追加、変更、削除)を行う
- 「地元の植物図鑑」の入力となる JSON形式のデータを作成する
操作方法
-
起動方法
アプリケーションを起動すると月間カレンダーが表示される。植物図鑑の入力データ作成画面日付を選択してして入力ボタンをクリックすると本アプリケーションのメイン画面が表示される。一連の操作はこの画面で行う。 -
イメージファイルのサイズと名前を変更する
Finderからイメージファイルをイメージビューにドラッグ&ドロップする。自動的にファイル名が、日付+連番にリネームされ、ファイルのサイズが規定のサイ(800 x 600)に変更される。縦長のイメージの場合、幅と高さは逆になる。処理後のファイルは規定のフォルダに格納され、メイン画面左側のファイル一覧にフイル名が追加される。※このアプリケーションは、イメージのサイズは 4:3 のスタンダード比率を前提として作られているので、これ以外の率のイメージはリサイズの結果、画像が歪むで扱ってはいけない。 -
イメージに植物の種名を付与する
選択中の写真の種を特定し、写真情報データに設定する。メイン画面右側の種マスタ一覧から種を選択し、ダブルクリックまたは追加ボタンをクリックすると、イメジビュー下のテーブルビューに種名が追加される。一つの写真に複数の種を設定することができる。これは種の特定において、いくつかの候補があるが、一つに決められないような場合を考慮している。例えば、クワ属の「マグワ」と「ヤマグワ」、マタタビ属の「マタビ」「サルナシ」、ヨモギ属の「ヨモギ」と「オウシュウヨモギ」は見た目が非常に似ているので判別が難しい。このようにどちらかに決められない場合、ひとつの写真に複数の種類を設定できるようにしている。他に例外的な対応として、例えば「属」までは特定できるが「種」が特定できないというケースでは、種名にany(何でも)を意味する「*」を設定する。あるいは、種が全く不明の場合は「?」を設定するということが可能である。いずれも種マスターに一つの種として定義を追加すればよいのであり、「植物図鑑」では種の一種として扱われ表示される。 -
種マスターの属性の編集
種マスタの属性である和名、種類、説明の入力を行う。画面右側の種マスタ一覧(テーブルビュー)から種を選択し、「種マスタ属性入力」ボタンをクリックすると、入力サブフォームが開く。 -
種マスターの管理
種マスターは CSV形式のテキストファイルとして持つ。種マスタに種を追加するときはファイルを開き直接入力する。画面右上の「種マスタ一覧CSV」ボタンをクリクするとファイルが VSCode で開く。 -
Webデータ作成
画面右上の「Webデータ作成」ボタンをクリックすると「地元の植物図鑑」の入力となる JSON形式のデータを作成する。この処理は Node.jsにより行う。写真レコードを種ごとにグループ化し、オブジェクトを作成し、JSON形式のファイルに出力する。これが Webアプリケーション「地元の植物図鑑」の入力になる。ファイル(5_datasource.txt)の抜粋
トピックス
イメージファイルのサイズ変更とリネーム
イメージファイルのサイズの変更は、使い方が非常に簡単な JavaScriptの sharpモジュールを利用する。ファイルのリネームは、sharpモジュールの toFileメソッドを使うことによって行う。sharpモジュールのメソッドは非同期なので、同期をとるために Promiseを使用する。
メソッドの説明
resize(width)
メソッドは画像のサイズを変更する。ここでは第1引数の width だけを指定している。こうするとアスペクト比を固定したままサイズの変更を行う。第2引数に height、第3引数に option を指定することもできる。
withMetadata()
変更後のファイルにExif情報等の付加データを保持したまた出力する。
rotate()
rotateを引数なしで呼ぶと、撮影時のカメラの向き(横または縦)に応じた方向に画像が正しく回転する。これは、Exif撮影情報をもとに自動的に行われる。(これはとても優れた機能だと思う)
toFile(fileOut, [callback])
リネームしてサイズを変更したイメージファイルを指定したパス名に出力する。
ソースコード一覧
ファイル名のリンクをクリックするとソースコードが表示されます
月間カレンダー
既存の「シンプルカレンダー」をベースに、年単位に移動する機能を追加した。主要なクラスのみ記載した。
植物図鑑の入力データ作成(Swift)
植物図鑑の入力データ作成(JavaScript)
Webアプリケーション「地元の植物図鑑」のソースコード
[ 追記 ] ファイルの作成日付について
本アプリケーションのファイルのリネームでは、日付はカレンダーで指定した日付を利用するので、実際の撮影日と異なることは十分あり得る。
JPEGファイルの Exif情報には正確な撮影日時が格納されているので公開されているデータ構造をもとにプログラムを使っ取得することができる。「JPEGファイルから撮影情報を取得する」を参照。ファイル名を年月日にリネームするにはこれを用するのが正しい方法であろう。
ただし、一部のファイル編集ソフトを使うと場合によってファイルから Exif情報が失われることがある。筆者が自身の図鑑作成するにあたり利用した写真のうち相当数がこの状態になっていた。そのため、本アプリケーションでは、ファイル名は、ーザが指定した日付(カレンダーから選んだ日付)にするようにした。