写真リスト作成プログラム PictureList★
このHPはパソコンの画面の大きさように作られています
パソコンに保存してあるデジタル写真などのファイルのリストをExcelのデータ用に出力するフリーウェアです。
デジタル写真データには Exif という規格に従ってたくさんの撮影時のデータがメタデータとして記録されています。
たとえば、カメラメーカー名、カメラ名、カメラの撮影日時、露光の各種値、レンズの各種情報、ストロボの使用状態、GPS機能付きのカメラやデジカメでは緯度経度など、使い方によっては有益な情報がたくさん入っています。
これらの細かい情報は EnView MP などの写真閲覧ソフトで無料で使えるものでも調べることができますが、このアプリは、その一覧リストを表形式で出力します。
Excelは、簡易的なデータベースとしては、驚くほどの使い勝手を持っているので、大勢に公開して操作するのでもなければ Excel だけでかなりのデータベースとして使えます。 また本格的なデータベースを作るベースとしても使えます。
Exifデータを取得しなければ高速のファイルリスト作成アプリとしても使えます。
最近は撮影日などで自動的に分けてくれたり、顔を認証してある程度ですが、人を分けてくれるクラウドもあり、また写真を分類する上で一番大事なことは、フォルダに分類することでしょうが、このアプリはそれをする手助けにもなると思います
このTopページからは 自分が関係するページの中から、当たり障りのない、昔、嵌まっていた 空ものラジコンの記事へのリンクと、我が家のワンニャンの親バカページのリンクがあります。
お問い合わせ先: kup@kup-foto.com
Excelに出力した見本を示す
Exifデータが横に表示されていますが、このほかにもたくさんあります。
以前ここで配布していたPictureList の先行版では、アクセス不可能なフォルダーなどを見つけるとそこで探索を中止していました。
そのようなフォルダは WindowsフォルダやProgramフォルダなど写真の保存には、向かない場所がほとんどなので大きな問題にはならなかったと思いますが、今回その部分のエラー処理でそのファルダを読み飛ばし、ついでに非同期処理も少し洗練させました。
無視したフォルダは、その他のエラーとともに PictureList がインストールされた同じフォルダーにある PictureList.log に記録しています。ただしこのファイルは無駄に大きくならないようにある程度大きくなったら古いものから消していくことになっています。
bmp、gif、png 形式の図形は規格上Exifデータを持っていませんが、画像なので解像度などの基本的な画像データはくらいは画像なので当然持っているのでそれらは表示していましたが、その表示方法に力が入っていない腑抜けな表示があったのでこっそり直しました ^^;
さらに、この文を書いているときに気がついたのですが、png 形式が最近 と言っても2017年頃らしいですがExifを持つことができるようになったので png がExifを持っている場合はExifを見るように直しました。
m(_ _)m
最新版のこちらをダウンロードしてください
このリンクをクリックすると c:\Downloads などWindowsの規定のダウロード用フォルダーに PictureListSetup.zip がダウロードされます。
それを解凍すると
の二つが出てきます。(.msiと .exe は拡張子を表示しない設定では出てきません)
このsetup.exeをダブルクリックするとインストーラーが立ち上がり、しばらくするとデスクトップとスタートの中の すべて > のリストの中に PcicureListのプログラムが出来上がります
古い版が残っていると削除してくださいいうメッセージが出る場合があります。
その場合は普通にインストールしていれば
[設定] ⇒ [アプリ] ⇒ [インストールされているアプリ]
で、出てくるはずなのでそこから アンインストールしてください。
一応先行版も以下に残しておきますが、作者の反省以外のメリットはないでしょう
ソースコードはGithubというオープン性の高いバージョン管理で有名なサイトにそのまま上げています。
この方がちゃんと動くものが提供できるようで、インストールファイルも置いています。
Gitnubの方が信用度も高いと,
copilotさんからもアドバイスを受けました。
https://github.com/KenichiUehara/PictureList/
使用するにはGithubの使い方の知識が必要です
起動すると、このフォームが表示されます。
リストにする項目を緑丸の中で選択します。
その他、いろいろと項目がありますが、読めばわかると思います。
主な設定項目
Exif項目選択を押すと次の画面が表示されます。
真ん中が操作で、左右の画面で操作する項目を選んで真ん中の操作ボタンを押すとその操作が行われます。
さて以上で、あとはPictureListでクリップボードにコピーしたデータを Excelの適当な場所(普通は左上の A1セル です)に [Ctrl]+[v]などで貼り付ければ完了であとは、Excelでデータベースとして使えばいいだけです。
ただしExcelには文字をデータベースとして取り込むときに歴史的な経緯で注意する点があります。
Excelを使い慣れている人には当たり前のことですが、一応ここでも述べておきます
PictureListはフォルダーのファイルを調べてそれがExifデータを持っていたらそのリストをつくるだけで、それをExcelのようなデータベースを扱うソフトで活用する必要があります。
Tab区切りやカンマ区切りなどのコンピューターでは昔からよく使われていたデータの渡し方をPicitureListもExcelもできるのですが、Excelは作られた当初は非常に画期的なソフトで随所に高度な人の手を省いてくれる便利な機能を持っています。
ところがそのせいで Tab区切りでもカンマ区切りでも、それはやり過ぎじゃないか、ということが発生します。
問題は、Excelが、数値や日付に見えるけど、実際は、ただの文字列でしかないのに、勝手にそう見えるものは勝手に解釈して数値や、日付に変換することです。
Excelをしっかり使っている人にとっては馴染みの深いことですが、ここでも一応、PictureListの出力をExcelにコピーする際の注意事項を示すことにします。
Excelは実は様々なデータベースに接続できるようですが、簡単なのは行に各データを、列に項目を並べて冒頭にあげたExcelの画面のようにセル単位で使う方法でしょう。
これはフィルターという機能で表示を絞ることができ、簡単に撮影条件を指定して表示を絞るなど、個人一人で使う場合は使い勝手が簡単で有能です。
これにデータを流し混むのは、区切り文字と改行によって個々のデータを記したファイルやデータを用意するのが簡単です。
PictureListでは区切文字としてTabとカンマというよく使われる二種類の方法でクリップボードにデータを送り、Excel側で貼り付ければきれいにセルにデータが作成されるはずです。あとはセルの横幅などを調整して見やすくすれば良いはずです。
しかし、Excelは高機能すぎて時に余計なお節介な機能が放置されている場合があるのでデータを貼りつけるときの注意を述べます。
Excelへのデータベースの貼り付けは、単に張り付ける先頭の位置で 貼り付け([Ctrl]+[v])を行うだけですむ簡単な操作だが、この時Excel内の設定によっては余計なお世話が働いて予期せぬ変換などが働く場合があります。その時の対象法を述べます
この不具合はデータをセルの値に分解して配置するときに余計な設定がされているときに起きるのでそれを解除すれば良いです。
前回に使用した配置の仕方を決める「区切り位置」をExcelが覚えている場合がありますが、それが、今回のデータの設定と合わないときに問題が起きるので解除すればいいのですが、Excelはこの設定に関しては解除という項目がなく、毎回、設定をする項目でてくるのでここで余計な設定のチェックを外すのが基本です。
ただし、普通は何の設定をしなくてもいきなり貼り付けても、それが Tabやカンマで区切られていれば、勝手に前回の設定で貼り付けてくれるので、面倒でも一回設定のメニューを出します。
これで指定の位置で貼り付ければデータが無事Excelに表示されます。
Excelはデータベースとして利用するのは便利ですが、写真をExcelで無理してでも見ようとすることが可能なほど高度な使い方ができますが、実際には面倒なのでやりたいと思ったとしてもせいぜい数枚の写真を見れば良いときだけでしょう。
写真を見るには、便利なアプリがたくさんありますが、Exifのデータを簡単に見られるものはあまりありませんでしたが、XnView MP という商用で無ければ無料で使えるアプリでは、GPSデータのExifを持つファイルでは地図まで表示してくれる優れもので、基本的な画像の編集機能機能の他に文字や線を追加する機能なども持っています。
高度な編集機能が欲しければ、お金があれば業界ほぼ標準のPhtoShopが良いですが、恐ろしいほど高いので、GIMPという完全にオープンなフリーウェアがあります。
XnView や GIMP の使い方の一部は、フィルム写真のデジタル化 で紹介しています。
ファイルの保存場所がどこにあるかちゃんと記録されていたり覚えていらればいいのですが、そんな優秀な人は、いざ知らず、自分はパソコンと向き合うときは毎日のようにファイルがどこにあるかを探すの Everything という、超高速なファイル検索ツール(アプリ)を使っています。
やや、おたくぽい画面と使い方ですが、一度これのありがたみを知れば、なぜ使うのかを勧められるかを理解でき野は、記憶力の良い人だけでしょう。
かなり高度な使い方もできますは、簡単な使い方もでも、十分ありがたみを理解できると思います。
正規表現というオタクぽい使い方の一部でも覚えれば、記憶力の良い人以外は、オタクを少し尊敬すると思います (^^)
インストールや使い方はググればたくさん出てきますので、検索してください。
日本では、1バイトで常用する文字をすべて表せない国の中では、世界でもっともパソコンが普及する国になる技術立国であったため、シフトJISというMicrosoft、アスキー、三菱電機が中心となってが開発して公開した2バイトのみで常用するすべての文字を表す文字コードが広く普及しました。
今は文字コードとしては世界的にユニコードが使用されており、その中でも従来の英文との互換性が高い UTF-8 が広く普及しています。
ただし日本では古くからシフトJIS が普及したため、いまだにシフトJISでテキストエディタを使う場合があります(自分のことです)
その場合は注意しないとExcelに読み込ませる場合にシフトJISになっていると文字化けが起こります。
その場合は文字コードを UTF-8 にしてエディタを使います。
ここからはJPEGなどの写真ファイルに付くExifという名前の日本生まれで世界中に普及した写真に付加されるのが当たり前になり、ここのPictureListが取得する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 "にしました。
このアプリは、Exifの規格を作っていただいた方々、ExifToolの関係者、VisualStudio を作ってくれて文句も聞いてくれた Microsoft USA と ろくでも回答をたくさんくれて、発奮する気を起こさせて Microsoft Japan の個人向けの対応の方々 など多くの人のおかげですが、特に最近は copilotさんが質問にたちどころに何度も応えてくれて、時におかしな話になることはあってもこちらの聞き方の問題に気がつけば、良性の脳しゅようを取り出した代わりにメモリーとCPUをWiFiモジュールを代わりに埋め込んでくれと簡単に却下されたのに負けずにもっと強く駄々をこねていれば良いとつくづく公開しています、もとへ、
感謝の気持ちに耐えません
<(_ _)>
なお、このアプリは、copilot さんも Microsoft Store に登録したほうが、個人でメンテするHPより責任が少なくていいようなことを言ってくれているのでそのうち審査請求をする予定です。
バージョンのメンテもやってくれるらしいので、そうなったら、そちらの方からダウンロードしたほうが良いでしょうね、きっと