写真リスト作成プログラム PcitureList★
パソコンに保存した写真のリストをExcelのデータ用にする。
大量の写真をパソコンに保存していてExcelが使える人には非常に便利なアプリで、無料で利用できるように公開しています。
写真データに保存されているExifデータのカメラ名、レンズ焦点距離、緯度経度など様々な写真の補助データをExcelのデータベースにし、Excelで簡単に整理できるようになります。
Exifデータを取得しない場合は高速のファイルリスト作成アプリとして使えます。
このHPはパソコンの画面の大きさように作られています
Excelに出力した見本を示す
Exifデータが横に表示されていますが、このほかにもたくさんあります。
PictureListでは現在のところ、アクセス不可能なフォルダーというものに出くわすと探索を止めてしまうという癖がある。
そのようなフォルダは
WindowsフォルダやProgramフォルダで写真の保存には、全く向かない場所なので気にしてなかったが、高速化を測ったため、Exif出力さえしなければかなり高速のフィル探索プログラムになったので、以前個人的に作って個人として多用している
Files というプログラムの高速版として使うためには、そのうち高速性を維持しながらこの問題を解決するつもりである。
スマホなどのGPSによる緯度経度のデータから住所を出すアプリはGoogleMAp絡みで存在しますがこのアプリに組み込むにはライセンスなどの問題があるので、いつになるかはわかないがそのうち公開する予定です。このプログラムほど誰でも使えるレベルのものにはならないかもしれません ^^;
このリンクをクリックすると c:\Downloads などWindowsの規定のダウロード用フォルダーに PictureListSetup.zip がダウロードされます。
それを解凍すると
の二つが出てきます。(.msiと .exe は拡張子を表示しない設定では出てきません)
このsetup.exeをダブルクリックするとインストーラーが立ち上がり、しばらくするとデスクトップとスタートの中の すべて > のリストの中に PcicureListのプログラムが出来上がります
起動すると、このフォームが表示されます。
リストにする項目を緑丸の中で選択します。
その他、いろいろと項目がありますが、読めばわかると思います。
主な設定項目
Exif項目選択を押すと次の画面が表示されます。
真ん中が操作で、左右の画面で操作する項目を選んで真ん中の操作ボタンを押すとその操作が行われます。
さて以上で、あとはPictureListでクリップボードにコピーしたデータを Excelの適当な場所(普通は左上の橋です)に [Ctrl]+[v]などで貼り付ければ完了であとは、Excelでデータベースとして使えばいいだけです。
ただしExcelには文字をデータベースとして取り込むときに歴史的な因縁で注意する点があります。
Excelを使い慣れている人には当たり前のことですが、一応ここでも述べておきます
PictureListはフォルダーのファイルを調べてそれがExifデータを持っていたらそのリストをつくるだけで、それをExcelのようなデータベースを扱うソフトで活用する必要があります。 Tab区切りやカンマ区切りなどのコンピューターでは昔からよく使われていたデータの渡し方をPicitureListもExcelもできるのですが、Excelは作られた当時は、画期的なソフトで、随所に高度な人の手をできる機能を持っています。 ところがそのせいで Tab区切りでもカンマ区切りでも、それはやり過ぎじゃないということが発生します。
問題は、Excelが処理するデータが、数値や日付に見えるただの文字列を勝手にそうだと解釈することです。 Excelをしっかり使っている人にとっては馴染みの深いことですが、ここでも一応、PictureListの出力をExcelにコピーする際の注意事項を示すことにします。
Excelは実は様々なデータベースに接続できるようですが、簡単なのは行に各データを、列に項目を並べて冒頭にあげたExcelの画面のようにセル単位で使う方法でしょう。
これはフィルターという機能で表示を絞ることができ、簡単に撮影条件を指定して表示を絞るなど、個人一人で使う場合は使い勝手が簡単で有能です。
これにデータを流し混むのは、区切り文字と改行によって個々のデータを記したファイルやデータを用意するのが簡単です。 PictureListでは釘文字としてTabとカンマというよく使われる二種類の方法でクリップボードにデータを送り、Excel側で貼り付ければきれいにセルにデータが作成されるはずです。あとはセルの横幅などを調整して見やすくすれば良いはずです。
しかし、Excelは高機能すぎて時に余計なお節介な機能が放置されている場合があるのでデータを貼りつけるときの注意を述べます
データベースの貼り付けは、単に張り付ける先頭の位置で 貼り付け([Ctrl]+[v])を行うだけで飼おうだが、この時Excel内の設定によっては余計なお世話が働く場合があります。 その時の対象法を述べる
この不具合はデータをセルの値に分解するときに余計な設定が追加されているときに起きるのでそれを解除すれば良い。 前回に使用したこれを決める「区切り位置」をExcelが覚えているため解除するが、解除という項目がないので設定項目で余計な設定のチェックを外すのが基本です。
これで指定の位置で貼り付ければデータが無事Excelに表示されます。
Excelはデータベースとして利用するのは便利だが当然ながら、写真は見れ無し。
写真を見るためのアプリはたくさんあるが、Exifの表示なども可能な閲覧ソフト XnView MP を推奨しておきます。
PictureList1のスマホで撮った写真などの緯度経度は、そのまま Google Mapに張り付ければ撮影場所が表示されるが、XnView MPでは撮影場所を表示する地図を開くこともでき写真の撮影場所を思い出すのが簡単にできる。
その他にも、簡単な色味の調整や文字、図形の挿入もGIMPなどを持ち出すまでもなく可能である。
日本では世界中でパソコンが使われるよりも早く普及したので日本語というたくさんの文字を利用する仕組みを昔のパソコンでも効率よく使えるようにするための シフトJISと呼ばれるMicrosoftが開発して公開してくれた方法が普及しました。
ただしこの方法は日本語を使用するには非常に効率のいい方法でしたが、世界中のざまざまな文字を表すには役不足で、パソコンの性能が上がってくると、効率性は劣りますが(主にデータ量が増える)はるかに多くの文字を表す方法としてユニコードが普及しました。
日本では歴史的にシフトJISで作られたファイルが多いため、例外的にユニコードでなくシフトJISで作られたドキュメントが主流です。
ただしExcelなど世界的なプログラムはユニコードを処理し、シフトJISが必要な時だけ変換するのが普通になりました。
この方法は多くの場合うまくいきますが、それでもExcelなどにテキストファイルでデータを渡すときに自動で判別することがうまいかずに文字が化ける場合があります。
クリップボードを使用する場合は、この間違いは置きませんが、純粋なテキストファイルには文字コードを示す付加情報がないので失敗する場合が多いです。
そのためテキストファイルに落とす場合はExcelで直接読み込まずに他のテキストファイルエディタを経由する場合には注意が必要です。
ここからはJPEGなどの写真ファイルに付くExifという名前の日本生まれで世界中に普及した写真に付加されるのが当たり前になり、ここのPcitureListが取得するExifデータに関して説明します。
かなり専門的な話ですから香味が無ければ読み飛ばしてください。
電子データには本文のデータ以外外にも様々なデータを併せ持たせることができます。 たとえば、動画は動く画像の他に音声データを持つのが普通です。 写真は単純にドットの集まりのデータとして記録するとデジカメが実用化された時点では、画像データの中でも恐ろしくファイル容量を食う方だったので、何とかしてサイズを小さくすることが必要でした。
そのために発明されたのがJPEGという人間の画像の近くの特性を手品のように巧妙に取り入れて圧縮した方法です。
これは画像も、複雑な波でも複数の単純な波を組み合わせれば実物に近づけることができ、その数を無限大にすれば100%正確に補油減できるという技術系の計算ができる人なら必ず出くわす詐欺のような理論の応用で、これを比較て単純な8x8ドットごとにこのデジタルサイン変換とかいう名前のついた方法で禁じさせることで驚くデータ量を圧縮できることを応用しています。 さらに人間の色の分解能は低いため昔のカラーテレビ放送に倣って色の解像度をしっかり下げることも利用して桁違いの圧縮に成功しています。
今のコンピューターは昔よりもずっと大きなサイズのファイルを扱えますが、それでも人間の眼をだます、もとえ、眼を満足させる程度には十分使えて効果が高いので写真や動画などにごく当たり前のように使われています。
このJPEGの画像に(実際はJPEG以外の形式にも対応して作られましたが今では実質JPEG用と感がえても良いくらい使われています)レンズやカメラの情報まで入れて写真ファイルにしてしまえとかんがえたのがフジフィルの人を中心として日本の人々です。 富士フィルムは写真用フィルムの会社としてあまりにも有名ですが、実はカメラも作っており、テレビ局のレンズなどでは手作りに近いレベルの非常に優秀なものまでを作っていました。 打ち合わせに研究所に行ったことがありますが、ま、彼らは気違いと言っても良いくらいでは正直思います。 ただしすごい褒め言葉でもあります。 そんな人たちでカメラのデータを含むデジタル写真の規格が作られ公開され世界のメーカーが当たり前のように使ってくれたので某リンゴマークのお前たちとは違うんだぞが好きなメーカーの規格と違って互換性の高い便利なファイル規格となっています。 この規格は カメラ映像機器工業会が作成しCIPA規格リストからPDFを入手できます。(色の変わった文字をクリックするとリンク先が開きます)
Exifのようなファイルに埋め込まれた本文を補足するようなデータを広くメタデータと呼びます。
ま、ググればもっとわかりやすい資料が入手できるとは思います。 これをもとにExifのデータをExcelで扱いやすいように抽出しようと2023年に作成開始したのがこのプログラムです。 いちから解析するのは大変なので、WindowsにはAPIというサブプログラム集がたくさん用意されており、これを使えば楽勝と作り始めて、すべてに対応しておらずAPI非対応の項目をどうしようかと考えていたら、突然 APIがバグっているのに気づき、Microsoftに連絡したら、そのうち直してくれるということになって数か月後に使えるようになりました。 ただしその間、APIの限界にも気づきMicrosoftも他にもっといい解析ソフトが公開されていると忠告してくれていくつか調べて ExifTool というものを使おうということにしました。 これは非常に優れたツールで何やらわけのわからない情報まで拾ってきます。 おまけに自分がよく使う XnView MP もExifToolのデータを詳しく表示することができます。
プログラムは公開されていて自分のプログラムに取り込むこともできるようですが、高度すぎて自分には難しすぎて ^^; のでunixのコマンド風に外部コマンドして昔よく使ったパイプ処理に対応してい居るのでそれを利用しました。パフォーマンスは下手に組み込むよりはずっと良いようです。それにExifToolがアップデートしても参照先を更新するだけで即対応できます。 用語が違うなど合わせるのが大変な部分もあり時間もかかりましたが、完全ではないですが自分が使う範囲では十分に使えます。 なお、Wndows APIの良いところは高速だということです。下手をすると10倍くらい違います。 その分得られる項目数が少ないということは有ります。 PicutureListではExifToolをどの用に使うかを指定できます。
これだけ苦労したのであれば、当然他にも使いたくなる人もいるでしょうと勝手に考えて公開することにしました。
Exifデータは本来オープンな仕様で使ってもらってナンボのデータだと思いますが、それへの取り組みはカメラメーカーによって異なります。さらに仕組みを知っていれば改竄も可能です。 自分で撮影した写真では改竄などは自分の責任ですが内容はメーカー次第というのはどうにもなりません。 ただし日本をはじめカメラメーカーの対応は良い場合が多いです。
ここでは判明して注意が必要なデータについて述べます。
これはカメラメーカー次第の部分とExifToolと自分でファイルから拾ってきたデータで精度が異なる場合があります。 ま、それほど違うのはどちらかのバグの場合だけでしょうけど
スマホなどの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 以外はサポートしていないため以下のようにした。
もう少しまとめてみると以下の表がわかりやすい。
| 名称 | フォルダ名 | 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 "にしました。
次のページ:デジタル化のコツ