写真リスト作成プログラム PcitureList

このアプリの目的

パソコンに保存した写真のリストをExcelのデータ用にする。
大量の写真をパソコンに保存していてExcelが使える人には非常に便利なアプリで、無料で利用できるように公開しています。

写真データに保存されているExifデータのカメラ名、レンズ焦点距離、緯度経度など様々な写真の補助データをExcelのデータベースにし、Excelで簡単に整理できるようになります。

Exifデータを取得しない場合は高速のファイルリスト作成アプリとして使えます。


このHPはパソコンの画面の大きさように作られています

アプリ外観



出力見本

Excelに出力した見本を示す

画像1 画像2 画像3

Exifデータが横に表示されていますが、このほかにもたくさんあります。

判明済みの問題点

PictureListでは現在のところ、アクセス不可能なフォルダーというものに出くわすと探索を止めてしまうという癖がある。
そのようなフォルダは WindowsフォルダやProgramフォルダで写真の保存には、全く向かない場所なので気にしてなかったが、高速化を測ったため、Exif出力さえしなければかなり高速のフィル探索プログラムになったので、以前個人的に作って個人として多用している Files というプログラムの高速版として使うためには、そのうち高速性を維持しながらこの問題を解決するつもりである。

スマホなどのGPSによる緯度経度のデータから住所を出すアプリはGoogleMAp絡みで存在しますがこのアプリに組み込むにはライセンスなどの問題があるので、いつになるかはわかないがそのうち公開する予定です。このプログラムほど誰でも使えるレベルのものにはならないかもしれません ^^;

インストールの方法

PictureListインスターラーをダウンロード

このリンクをクリックすると c:\Downloads などWindowsの規定のダウロード用フォルダーに PictureListSetup.zip がダウロードされます。
それを解凍すると

  • PictureListSetup.msi
  • setup.exe

の二つが出てきます。(.msiと .exe は拡張子を表示しない設定では出てきません)

このsetup.exeをダブルクリックするとインストーラーが立ち上がり、しばらくするとデスクトップとスタートの中の すべて > のリストの中に PcicureListのプログラムが出来上がります

メインフォームの使い方


起動すると、このフォームが表示されます。

リストにする項目を緑丸の中で選択します。

  1. Exifデータを表示するには Exifデータにチェックを入れます。そして [Exif項目の選択] ボタンを押して、この後で述べる方法で出力する項目を選びます。これはそれほど変更することは無いでしょうね。
  2. フォルダーの選択 を押してフォルダーを選んでから
  3. 探索開始 を押して一番下のプログレスバーが緑でいっぱいになるのを待ちます。 時間がかかりすぎるようなら、探索瑕疵 ボタンが 探索中止 に変わっているので押すと中止されます。
  4. 探索が終わって クリップボードにコピー を押し、Excelに [Ctrl] + [v] などで貼り付けます。

その他、いろいろと項目がありますが、読めばわかると思います。

主な設定項目

  • [サブディレクトリーを含む] これをオンにしないとサブフォルダーを調べません。
  • ファイルマスク 簡単なWindowsが持つマスクを指定できます。マスクという意味が解らなければ *.* のままにしておいてください。
  • 出力テキスト形式 Excelで使える、タブ区切り と csv形式カンマ区切り が選べます。どちらもExcelは癖があって、プログラムを作る人も使う人も苦労するところで、本来は数値にしたいのに文字にするなどして気が付いた問題点は何とか使えるようにしています。どちらでもいいはずですが、個人的には Tab区切りの方が Excelを使うときに簡単なので好きです。
  • Exif調査方法 Exifを調べるにはファイルの中身を読み込むので時間がかかります。それをいかに短くしようかと苦労しましたが、結局調査方法でWindowsのAPIという元々備わっている方法が一番早かったのでWindows APIのみ を選択すると速度が一番早いです。 ただしWindows APIはExifの主な項目にしか対応していないのでExifが十分に表示されないかも知れません。 ExifToolはオープンで有名は写真に付与されるさまざまなメタデータと呼ばれる付属情報を解析して出してくれる優れもので、カメラメーカーが勝手に作った変なものまで解析してくれます。そのため速度が遅くなります。またPictureListではExifToolが出す情報の中でもExifを中心にそれもメーカーさんのわがままなような除法や善良な市民に必要なさそうなものは対応していません。 普通は [ExifToolも使用]を選び、基本的な情報だけでそれもWindowsが必要と認めた情報だけで良い場合は [Windows APIのみ] を選んでください。 この Windows APIにはトンでもないバグがあって、報告したらそのうち直してくれることになって、使えるレベルになりました。Microsoftのエンジニアはこういうところがあるので好きです。
  • 結果をファイルに出力 普通はクリップボードを使う方が便利で自分もテスト以外はファイルに落とすことは有りませんが、必要ならこれで落とせます
  • 設定を保存して終了 折角、出力項目やら何やらを設定しても、これを押して終了しなければ、覚えません(キッパリ) トラブって終わる以外は、設定を保存してもよかったのですが、一応、ちゃんと保存したいという意思を示すためにもこれを押して終了させないと(右上の✖を押す)前回に保存した内容がそのまま残ります。

Exif項目選画面の使い方

Exif項目選択を押すと次の画面が表示されます。

右側が選択された Exif 項目で左側が未選択項目です。 「タグ」というのはExifの項目名のことです。規格書ではTagIDという値が付けられています

真ん中が操作で、左右の画面で操作する項目を選んで真ん中の操作ボタンを押すとその操作が行われます。

  • > 選択項目の上に追加 選んだ右側の出力の項目の上に左側の未選択の項目を追加します
  • > 選択項目の↓に追加 上とは逆に選んだ右側の出力の項目の下に左側の未選択の項目を追加します
  • < 削除 選んだ右側の出力の項目を削除します。
  • 出力全削除 すべての出力項目を削除します
  • 変更を破棄して終了 変更した項目を破棄してメインフォームに戻ります
  • 保存して終了 変更を適用してメインフォーム戻ります
  • デフォルトのExifデータを読み込む デフォルトの項目にします。デフォルトと言っても DefaultPictureListExif.csv というファイルに全項目の他に出力する順番を書いているだけです。ご自分で治したい人はバックアップを取って直してください


さて以上で、あとはPictureListでクリップボードにコピーしたデータを Excelの適当な場所(普通は左上の橋です)に [Ctrl]+[v]などで貼り付ければ完了であとは、Excelでデータベースとして使えばいいだけです。

ただしExcelには文字をデータベースとして取り込むときに歴史的な因縁で注意する点があります。

Excelを使い慣れている人には当たり前のことですが、一応ここでも述べておきます

EXcelへのデータのコピーの方法

PictureListはフォルダーのファイルを調べてそれがExifデータを持っていたらそのリストをつくるだけで、それをExcelのようなデータベースを扱うソフトで活用する必要があります。 Tab区切りやカンマ区切りなどのコンピューターでは昔からよく使われていたデータの渡し方をPicitureListもExcelもできるのですが、Excelは作られた当時は、画期的なソフトで、随所に高度な人の手をできる機能を持っています。 ところがそのせいで Tab区切りでもカンマ区切りでも、それはやり過ぎじゃないということが発生します。

問題は、Excelが処理するデータが、数値や日付に見えるただの文字列を勝手にそうだと解釈することです。 Excelをしっかり使っている人にとっては馴染みの深いことですが、ここでも一応、PictureListの出力をExcelにコピーする際の注意事項を示すことにします。

Excelのデータベースの基本

Excelは実は様々なデータベースに接続できるようですが、簡単なのは行に各データを、列に項目を並べて冒頭にあげたExcelの画面のようにセル単位で使う方法でしょう。

これはフィルターという機能で表示を絞ることができ、簡単に撮影条件を指定して表示を絞るなど、個人一人で使う場合は使い勝手が簡単で有能です。

これにデータを流し混むのは、区切り文字と改行によって個々のデータを記したファイルやデータを用意するのが簡単です。 PictureListでは釘文字としてTabとカンマというよく使われる二種類の方法でクリップボードにデータを送り、Excel側で貼り付ければきれいにセルにデータが作成されるはずです。あとはセルの横幅などを調整して見やすくすれば良いはずです。

しかし、Excelは高機能すぎて時に余計なお節介な機能が放置されている場合があるのでデータを貼りつけるときの注意を述べます

基本的な注意

データベースの貼り付けは、単に張り付ける先頭の位置で 貼り付け([Ctrl]+[v])を行うだけで飼おうだが、この時Excel内の設定によっては余計なお世話が働く場合があります。 その時の対象法を述べる

データ貼り付け時の不具合の解消法

この不具合はデータをセルの値に分解するときに余計な設定が追加されているときに起きるのでそれを解除すれば良い。 前回に使用したこれを決める「区切り位置」をExcelが覚えているため解除するが、解除という項目がないので設定項目で余計な設定のチェックを外すのが基本です。

  1. この機能を設定するにはデータがあるセルが必要なのでどんなものでも良いが値があるセルを選択します
  2. メニュー > データツールの区切り位置 を選んで上の図のダイヤログを表示させます
  3. コンマやタブなどの区切り文字… を選択します
  4. 次へを押します
  1. このダイヤログが出るのでタブなら 「タブ」、コンマ形式なら 「コンマ」だけを選んでこの一つ以外は選んではいけません。
  2. 「完了」を押して終了。

これで指定の位置で貼り付ければデータが無事Excelに表示されます。

推奨写真閲覧アプリ XnView MP

Excelはデータベースとして利用するのは便利だが当然ながら、写真は見れ無し。

写真を見るためのアプリはたくさんあるが、Exifの表示なども可能な閲覧ソフト XnView MP を推奨しておきます。

PictureList1のスマホで撮った写真などの緯度経度は、そのまま Google Mapに張り付ければ撮影場所が表示されるが、XnView MPでは撮影場所を表示する地図を開くこともでき写真の撮影場所を思い出すのが簡単にできる。

その他にも、簡単な色味の調整や文字、図形の挿入もGIMPなどを持ち出すまでもなく可能である。

ファイルを経由して読み込むときの文字コードの注意

日本では世界中でパソコンが使われるよりも早く普及したので日本語というたくさんの文字を利用する仕組みを昔のパソコンでも効率よく使えるようにするための シフトJISと呼ばれるMicrosoftが開発して公開してくれた方法が普及しました。

ただしこの方法は日本語を使用するには非常に効率のいい方法でしたが、世界中のざまざまな文字を表すには役不足で、パソコンの性能が上がってくると、効率性は劣りますが(主にデータ量が増える)はるかに多くの文字を表す方法としてユニコードが普及しました。

日本では歴史的にシフトJISで作られたファイルが多いため、例外的にユニコードでなくシフトJISで作られたドキュメントが主流です。

ただしExcelなど世界的なプログラムはユニコードを処理し、シフトJISが必要な時だけ変換するのが普通になりました。

この方法は多くの場合うまくいきますが、それでもExcelなどにテキストファイルでデータを渡すときに自動で判別することがうまいかずに文字が化ける場合があります。

クリップボードを使用する場合は、この間違いは置きませんが、純粋なテキストファイルには文字コードを示す付加情報がないので失敗する場合が多いです。

そのためテキストファイルに落とす場合はExcelで直接読み込まずに他のテキストファイルエディタを経由する場合には注意が必要です。




ここからはJPEGなどの写真ファイルに付くExifという名前の日本生まれで世界中に普及した写真に付加されるのが当たり前になり、ここのPcitureListが取得するExifデータに関して説明します。

かなり専門的な話ですから香味が無ければ読み飛ばしてください。

Exifデータのやや専門的な説明

Exifとは

電子データには本文のデータ以外外にも様々なデータを併せ持たせることができます。 たとえば、動画は動く画像の他に音声データを持つのが普通です。 写真は単純にドットの集まりのデータとして記録するとデジカメが実用化された時点では、画像データの中でも恐ろしくファイル容量を食う方だったので、何とかしてサイズを小さくすることが必要でした。

そのために発明されたのがJPEGという人間の画像の近くの特性を手品のように巧妙に取り入れて圧縮した方法です。

これは画像も、複雑な波でも複数の単純な波を組み合わせれば実物に近づけることができ、その数を無限大にすれば100%正確に補油減できるという技術系の計算ができる人なら必ず出くわす詐欺のような理論の応用で、これを比較て単純な8x8ドットごとにこのデジタルサイン変換とかいう名前のついた方法で禁じさせることで驚くデータ量を圧縮できることを応用しています。 さらに人間の色の分解能は低いため昔のカラーテレビ放送に倣って色の解像度をしっかり下げることも利用して桁違いの圧縮に成功しています。

今のコンピューターは昔よりもずっと大きなサイズのファイルを扱えますが、それでも人間の眼をだます、もとえ、眼を満足させる程度には十分使えて効果が高いので写真や動画などにごく当たり前のように使われています。

このJPEGの画像に(実際はJPEG以外の形式にも対応して作られましたが今では実質JPEG用と感がえても良いくらい使われています)レンズやカメラの情報まで入れて写真ファイルにしてしまえとかんがえたのがフジフィルの人を中心として日本の人々です。 富士フィルムは写真用フィルムの会社としてあまりにも有名ですが、実はカメラも作っており、テレビ局のレンズなどでは手作りに近いレベルの非常に優秀なものまでを作っていました。 打ち合わせに研究所に行ったことがありますが、ま、彼らは気違いと言っても良いくらいでは正直思います。 ただしすごい褒め言葉でもあります。 そんな人たちでカメラのデータを含むデジタル写真の規格が作られ公開され世界のメーカーが当たり前のように使ってくれたので某リンゴマークのお前たちとは違うんだぞが好きなメーカーの規格と違って互換性の高い便利なファイル規格となっています。 この規格は カメラ映像機器工業会が作成しCIPA規格リストからPDFを入手できます。(色の変わった文字をクリックするとリンク先が開きます)

Exifのようなファイルに埋め込まれた本文を補足するようなデータを広くメタデータと呼びます。

ExifToolの使用

ま、ググればもっとわかりやすい資料が入手できるとは思います。 これをもとにExifのデータをExcelで扱いやすいように抽出しようと2023年に作成開始したのがこのプログラムです。 いちから解析するのは大変なので、WindowsにはAPIというサブプログラム集がたくさん用意されており、これを使えば楽勝と作り始めて、すべてに対応しておらずAPI非対応の項目をどうしようかと考えていたら、突然 APIがバグっているのに気づき、Microsoftに連絡したら、そのうち直してくれるということになって数か月後に使えるようになりました。 ただしその間、APIの限界にも気づきMicrosoftも他にもっといい解析ソフトが公開されていると忠告してくれていくつか調べて ExifTool というものを使おうということにしました。 これは非常に優れたツールで何やらわけのわからない情報まで拾ってきます。 おまけに自分がよく使う XnView MP もExifToolのデータを詳しく表示することができます。

プログラムは公開されていて自分のプログラムに取り込むこともできるようですが、高度すぎて自分には難しすぎて ^^; のでunixのコマンド風に外部コマンドして昔よく使ったパイプ処理に対応してい居るのでそれを利用しました。パフォーマンスは下手に組み込むよりはずっと良いようです。それにExifToolがアップデートしても参照先を更新するだけで即対応できます。 用語が違うなど合わせるのが大変な部分もあり時間もかかりましたが、完全ではないですが自分が使う範囲では十分に使えます。 なお、Wndows APIの良いところは高速だということです。下手をすると10倍くらい違います。 その分得られる項目数が少ないということは有ります。 PicutureListではExifToolをどの用に使うかを指定できます。

これだけ苦労したのであれば、当然他にも使いたくなる人もいるでしょうと勝手に考えて公開することにしました。

Exifデータを見る上での注意

Exifデータは本来オープンな仕様で使ってもらってナンボのデータだと思いますが、それへの取り組みはカメラメーカーによって異なります。さらに仕組みを知っていれば改竄も可能です。 自分で撮影した写真では改竄などは自分の責任ですが内容はメーカー次第というのはどうにもなりません。 ただし日本をはじめカメラメーカーの対応は良い場合が多いです。

ここでは判明して注意が必要なデータについて述べます。

表示精度の問題

これはカメラメーカー次第の部分とExifToolと自分でファイルから拾ってきたデータで精度が異なる場合があります。 ま、それほど違うのはどちらかのバグの場合だけでしょうけど

GPSデータ

スマホなどのGPS付きのカメラの場合はGPSによる緯度経度が取得できる場合があります。 これはなれると、このために画質が良いカメラよりもスマホを使いたくなる理由にもなります。 GPSの情報は緯度経度だけでなく、高度や速度などもあります。ただしやくに立つのはせいぜい高度まででそれも地球はきれいな楕円体出ないので誤差が結構出ます。 緯度経度でなく、市町村名くらいは出た方が良く国土交通省もそのためのちょっと大雑把ですが市町村名くらいは出せる程度の情報を公開しています。 それでその機能を付けようか悩んでいますが、個別でみるなら XnView MP で地図まで表示されますし、Google Mapに緯度経度を貼りつければ地図だけでなく、その場所のストリートビューまでわかるので無理にPicutureListに実装しなくても良いかなというように思っています。 従ってひょっとしてExcelで動作する動作するマクロかファイルを直接操作する C#のプログラムが1年後くらいにはできているかも?

撮影感度

撮影感度は昔のフィルムの時代は ASA などという数値だけで ASA100が普通で ASA400が TriXなどの高感度とくらいの知識で十分でしたが、最近は電子機の撮像版の特性で電気的に簡単に増刊できたりすることから指標が面倒なことになっています。

興味がないなら関わらない方が良いかも知れない項目です。

Exifでは撮影感度に関して以下の項目があり時代とともに増えてしまいました。

名称/Field Name タグ番号 説明
撮影感度
PhotographicSensitivity
0x8827 標準出力感度(SOS)、推奨露光指数(REI)、ISOスピードのいづれか
Exif Vwrsion2.21以前ではISOスピードレート ISOSpeedRating であった
光電変換関数
OECF
0x8828 光と電気の量の対応を表す変換カーブ
感度種別
SensitivityType
0x8830 SOS,REI,ISO等の区分を示す.この中のふたつを取ることもできる
これ以降はExif2.30以降で追加された
標準出力感度
StandardOutputSensitivity
0x8831 ISO 12232で規定される、入力機器の
Standard Output Sensitivity。
撮影感度、感度種別も同時に記載する必要がある
推奨露光指数
RecommendedExposureIndex
0x8832 標準出力感度 0x8831 : ISO 12232で規定される、カメラまたは入力機器の Recommended Exposure Index。撮影感度、感度種別も同時に記載する必要がある
ISOスピード
ISOSpeed
0x8833 ISO 12232で規定される、カメラまたは入力機器の
ISO Speed。撮影感度、感度種別も同時に記載する必要がある
ISOスピードラチチュードyyy
ISOSpeedLatitudeyyy
0x8834 ISO 12232で規定される、カメラまたは入力機器の
ISO Speed Latitude yyy。ISOSpeed,ISOSpeedLatitudezzz
と同時に記載する必要がある
ISOスピードラチチュードzzz
ISOSpeedLatitudezzz
0x8835 SO 12232で規定される、カメラまたは入力機器の
ISO Speed Latitude zzz。ISOSpeed,ISOSpeedLatitudeyyy
と同時に記載する必要がある

ただし自分が調べた範囲では撮影感度以外が記載された撮影データは未発見です。 どうやら重要なのは、ISO,SOS,REIの三つのようです。(ISOはASAの新しくなった単位ですね。といっても大昔の話ですけど)

各感度の関係

う~ん、ややこしいですね。 それで DSCExposureValue デジカメ感度 という名前の項目を作り、Exif3.0の規定を参考に以下の表のように各項目が存在するかどうかで値の前に付加する前置詞を決めることにしました。 例えば "ISO 100" などと表示します。

Oは必須、Xはあってはならない、ORはどれかが必ず必要、Anyはあっても無くても良い

撮影感度
0x8827
感度種別
0x8830
標準出力感度
0x8831
推奨露光指数
0x8832
ISOスピード
0x8833
表示すべき前置詞
O 0, X X X X ISO
Any 1 O Any Any SOS
Any 2 Any O Any REI
Any 3 Any Any O ISO
Any 4 OR OR Any SOS,REI
Any 5 OR Any OR SOS,ISO
Any 6 Any OR OR REI,ISO
Any 7 OR Any OR SOS,REI,ISO

この条件に当てまらないときは撮影感度があればそれ、そうでなければISOスピード を "*ISO" を前置詞とし、それ以外は "規定外" とするなどが最良の方法かもしれない。

しかし調べた範囲では 0x8827以外はほとんど使われておらすまたWindows APIも 0x8827 以外はサポートしていないため以下のようにした。

撮影感度の種別(ISO,SOS,REI)の意味

もう少しまとめてみると以下の表がわかりやすい。

名称 フォルダ名 CIPA 意味 記事
0x8827 撮影感度 SOS,REI,ISOのいずれかの値。旧ISOスピード。附属書G参照 昔からのISO値 よく使われる
0x8830 感度種別 0x8827の種類を表示する項目 APIにない
0x8831 標準出力感度 標準出力感度(SOS) EXIF2.3で追加されたSOS値 ほとんど見ない
0x8832 推奨露光指数 推奨露光指数(REI) EXIF2.3で追加されたREI値 ほとんど見ない
0x8833 ISOスピード ISOスピード(ISO) EXIF2.3で規定されたISO値 ほとんど見ない

撮影感度については従来がISO表記であったが、Exif3.0以降、混乱を避ける目的でSOSとREIが追加されたようですね。 SOS,REI,ISOの違いは微妙でカメラメーカー間の表示方式の妥協の産物かもしれません。 ISOは旧来の表示でSOS(Standard Output Sensitivity)はよりデジカメの感度を測定するのに適した指標として使われる単純な物理的な指標ということになるようです。 REI(RecommendedExposureIndex)はメーカーが推奨する補正が加わったものと考えれば良さそう。

調べた範囲では0x8827 だけ表示すれば撮影感度としては十分なようです。それをISOとして扱うExif解析アプリも多いようです(JPEGsnoop, JpegAnalyzer Plus,XnViewMP) APIでは0x8831,0x8832,0x8833は取得できないのでAPIでは "撮影感度 "の付加を止め "ISO "にしました。

ページトップに戻る

ページトップに戻る

次のページ:デジタル化のコツ
JavaScriptが有効ならここに目次を表示