[C#] あちこちでいろんな使われ方をしているので、自分なりにJPEGやEXIFの用語定義を再確認してみた

C#のプログラミングとは直接関係無い話だけど、EXIFデータを使った画像処理の必要がありネットでいろいろ調べてみたところ、記事によってJPEGだのEXIFだの用語の使い方がいい加減なので、自分なりに整理してみた。

JPEGは圧縮方式、あるいはファイル形式のこと

もともとJPEGは「Joint Photographic Experts Group]という団体の略称。その団体が立案したデジタル画像の圧縮方式が、団体の略称をそのまま使ってJPEGと呼ばれている。JPEG方式で圧縮したデジタル画像を格納するファイル形式の規格は存在しなかったので、C-Cube Microsystems社が「JPEG File Interchange Format (JFIF)」というファイル形式を立案した。そのファイルが広く使われるようになってJPEGファイル形式と呼ばれるようになった。というわけで、一口にJPEGと言っても、デジタル画像の圧縮形式を指す場合と、デジタル画像のファイル形式を指す場合があるわけだ。JPEG圧縮されたデジタル画像は必ずJPEGファイル形式で保存されるとは限らない。TIFFファイル形式に保存されることだって普通にある。

JPEG – Wikipedia
http://ja.wikipedia.org/wiki/JPEG

JPEG homepage
http://www.jpeg.org/jpeg/

EXIFは画像ファイル形式の「規格」である

EXIFは「Exchangeable image file format」の略称。参考サイトの説明には、「デジタルカメラで撮影した画像データに、撮影条件に関する情報(メタデータ)を追加して保存できる、画像ファイル形式の規格のことである」とある。解りにくい表現だな。僕は「メタデータの仕様とそれを画像データにどのように付加して保存するかのルールを定めているのがEXIF」と認識している。ネットの記事などで「EXIFはファイル形式」という説明を良く見かけるけど、ファイルの物理構造を定義するものをファイル形式と呼ぶならば、それは正しいとは言いがたい。EXIFデータ付きの画像データは「JPEGファイル形式(圧縮の場合)」または「TIFFファイル形式(非圧縮の場合)」に保存されるから。

Exifとは (Exchangeable image file format) エグジフ: – IT用語辞典バイナリ
http://www.sophia-it.com/content/Exif

Exchangeable image file format – Wikipedia
http://ja.wikipedia.org/wiki/Exchangeable_image_file_format

JPEGファイル構造の基礎知識

以下のサイトの説明がわかりやすい。

JpegAnalyzer Plusオンラインヘルプ
http://hp.vector.co.jp/authors/VA032610/

JPEGファイルの構造
http://hp.vector.co.jp/authors/VA032610/JPEGFormat/StructureOfJPEG.htm

Exifについて
http://hp.vector.co.jp/authors/VA032610/JPEGFormat/AboutExif.htm

JPEGファイルには、セグメントと呼ばれるブロック分けされたデータ群とJPEG方式で圧縮された画像データが格納されている。セグメント先頭に「マーカー」と呼ばれる識別子があって、マーカー「APP1」がEXIFデータのセグメントを指す。アプリは自分が理解できないセグメントを読み飛ばすことにより、カメラやソフトのメーカーが独自定義した未知のセグメントが含まれていようと、アプリ間での画像データの受け渡しが可能となる。