« SPP 6 で現像した dp Quattro の JPEG は何とか読めた 2015/08/23 | トップページ | JPEG ファイルの構造 2015/08/25 »

SPP で現像したままの JPEG ファイルに仕込まれている Exif データ 2015/08/24

このところ、SPP 6 で現像したままの JPEG ファイルに仕込まれている Exif データを読み出して、その内容を表示するプログラムを作っている。このブログのネタにするのは気が引けるのだけど、それに関する記事をしばらくの間、掲載させて頂く。興味のない方は読み飛ばして頂く事をお願いする。


さて、CIPA(カメラ映像機器工業会)で Exif(Exchangeable image file format、エグジフ ) Rev.1.0 が規定されたのが 1995 年、今から 20 年も昔の話だ。正確には現在の電子情報技術産業協会(JEITA)の前身である日本電子工業振興協会(JEIDA)によって規格化されたものを CIPA が採用したのである。しかし、実際には CIPA の前身である JCIA(日本写真機工業会)が 1985 年に策定したものが Exif の始まりである。開発に主に携わったのは富士フイルムらしい。名前が英語なので米国あたりがこの企画を策定したと思っておられる方がいるかもしれないが、Exif はシグマと同様純粋な Mad In Japan である。

1985 年のパソコンは今のものとは比較にならないほど貧弱な性能で、国内では PC-9801 が普及し始めた時代である。主記憶メモリ 128KByte。当時私が 30 万円ほど出して購入した外付け HDD の容量は 40MByte であった。

つまり、数メガバイトの画像ファイルをパソコンで取り扱うことなど考えられらない時代に(おそらく)業務用コンピュータでデジタル画像を取り扱うことを前提に考えられた規格であったと思われる。

なので、Exif はコンパクトに情報を記録することができる規格となっている反面、それを読み出して内容を表示するのにはそれ専用のプログラムが必要となる。今の時代なら XML 形式でファイルに組み込んで、Excel 等で簡単に表示できるようにするのが良いと思うが、当時としてはいたし方のないことだったのだろう。


コンピュータの「ファイル」はデータやプログラムをそれぞれの取り決めに従って記録したものである。ファイルは HDD(固定ディスク装置)や SSD(ソリッドステートドライブ )、USB メモリスティック、メモリカード、DVD などの記憶媒体に名前を付けて保存される。

ファイルにはどのように情報が記録されているのかを見てみよう。

上の画像は今月の 20 日に掲載させて頂いたユー君が写っている『水たまりの観察』と題された JPEG ファイル(u-kun_208.jpg)の先頭の部分である。Stirling と言うバイナリエディタ(ファイルに書かれているデータを1バイト単位で表示し、編集することが目的のアプリケーション)を使って表示している。実際の記憶媒体上に記録されるのは上に見えているデータだけでなく、512 バイトあるいは 2,048 バイトに区切られた「セクタ」と呼ばれる区画に、セクタ開始マーク、セクタ番号、データ、エラー訂正データの順に書き込まれているのだけど、一般のユーザーはそのような物理的なデータ記録の構造などを知る必要はない。

さて、このファイルに記録されているデータを詳細に解説する前に、上に表示されているバイナリエディタの画面を説明する。一番上に黄色の背景で表示されている ADDRESS と言うのはその下のグレーの背景に白抜き文字で書かれているのがそのファイルの何バイト目であるかを示している。ただし、表示されているバイト数は私たちが日常的に使っている 10 進法の数値ではなく、コンピュータの世界でのみ通用する 16 進法で表示されている。

16 進法というのは 1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20,21...と数を数える。なぜ、コンピュータの世界では 16 進法が普通なのかについては、また後ほど説明するけど、とにかく、コンピュータ上の値を表示したり、数を数えたりするのには 16 進法が使われると知っておいて欲しい。

で、画面上に 00 01 02 03 ... 0D 0E 0F と書かれている領域がファイルに書かれている1バイトの値を 16 進数で表示しているエリア。右端の 012345...DEF と書かれている部分に表示されているのは左側の各バイトを文字で表記したモノである。1バイトで表現できる値は 0 から 255 まで(16 進数だと 0 から FF まで)だけど、その全てが文字コードとして使われるわけではないので、文字コードが割り当てられていないバイト値は . で表示されている。

いよいよ、ファイルの内容を見て行く。

先頭の2文字は FF D8 となっている。全ての JPEG ファイルはこの2文字が先頭に書かれている。つまり、JPEG ファイルであれば、必ずこの2文字が先頭に書かれていなければならない。JPEG ファイルを扱うほとんどのプログラム(アプリケーション)は先頭の2文字が FF D8 でなければ「JPEG ファイルではありません。」とエラーを返すはずである。

次の FF E1 は JPEG ファイルではアプリケーションタイプ1(=Exif)セグメント(データ集団)の開始を表すマーカー(APP1)。次の 29 9D はセグメントのサイズ。16 進数なので 10 進数に直すと 10,635 バイト。APP1 マーカーの場合は次の6バイトは 45 78 69 66 00 00(Exif..)でなければならない。

ここまでは SPP 6 で現像した Exif 情報を含んだ JPEG ファイルのお決まり。Photoshop で編集してしまうと、この部分には JPEG 本来のアプリケーションマーカ(APP0)が入る場合もある。読み込んだデータをここまで確認出来れば、このファイルが Exif 情報を含んだ JPEG ファイルだろうと言う事になる。

明日は次の 49 49 2A 00 から解説を始める。

|

« SPP 6 で現像した dp Quattro の JPEG は何とか読めた 2015/08/23 | トップページ | JPEG ファイルの構造 2015/08/25 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« SPP 6 で現像した dp Quattro の JPEG は何とか読めた 2015/08/23 | トップページ | JPEG ファイルの構造 2015/08/25 »