コンテンツへスキップ

JFIFはJPEG: .jfif拡張子が変えるもの

扱いにくいのは拡張子だけです。.jfifファイルは普通のJPEGを保持しており、JPEGを読むプログラムはすべて読みます。PNGに変換しても絵は鮮明になりません。鮮明にするものがもう残っていないからです。

JFIFはJPEG File Interchange Formatの略で、1990年代初頭の仕様です。JPEGデータストリームをどう包めば、異なるプログラム間でピクセルの意味が一致するかを記述します。その包みはファイル先頭の小さなマーカーブロック(APP0マーカー)で、ピクセルのアスペクト比と、ときにはサムネイルを記録します。その後ろはすべて普通のJPEGです。

拡張子はどこから来るのか

.jfif拡張子はWindows時代の習慣です。一部のカメラ、一部の携帯電話、一部のWindowsプログラムがJPEGをこれで保存し、そのいくつかは.jpgに名前を変えると同じファイルのサムネイルを表示しません。バイト列は変わらず、名前だけが変わります。ブラウザが.jfifファイルをタブにドラッグすれば問題なく開ける理由も、拡張子に頼るOSが混乱する理由もこれです。

マーカーブロックが実際に運ぶもの

マーカー保持する内容
APP0(JFIF)バージョン、密度の単位(dpiまたはドット/cm)、ピクセルのアスペクト比。
APP0(その他)ベンダー固有のブロック。一部のカメラが独自にここへ書きます。
APP1(Exif)カメラのメタデータ: 露出、日時、向き、ときにはGPS。
それ以降すべてJPEGデータストリーム: 量子化テーブル、ハフマンテーブル、圧縮された映像。

このツールはファイルを変換するのにそのブロックを読む必要がありません。.jfifは.jpgや.jpegと同じ受け入れリストにあり、コンバーターは4つの拡張子すべてを1つの形式として扱います。マーカーが調べられる唯一の場所はメタデータビューアーで、JFIF 1.02, 72 dpiのように読み取って報告します。また、ほかのメタデータを削除するときもこのマーカーは保持します。JFIFブロックがピクセルの解釈方法を記述しているからです。

PNGへの変換ができること・できないこと

JPEGは非可逆です。保存されたときに一部のディテールが捨てられ、ほかのどこにも保存されていません。ファイルをデコードすると、生き残ったピクセルがそのまま返ります。それらのピクセルをPNGに書き込むと、それ以上損失なく保存されます。つまりPNGはJPEGと同じに見え、サイズのために何も鈍らせないPNGでは、しばしば数倍大きくなります。

最後の点が変換する本当の理由です。JPEGをこれから編集するならPNGで作業し、保存するだけならJPEGのほうがすでに小さいです。

制限

要点

よくある質問

JFIFをPNGに変換すると画像は鮮明になりますか?

いいえ。鮮明さはJPEGが書かれたときに決まっており、捨てられたディテールをデコードで作り出すことはできません。PNGはデコード結果を忠実に保存するだけで、最初の圧縮を元に戻すわけではありません。

.jfifファイルは名前を変えただけの.jpgですか?

実質的にははい。JPEGデータストリームの先頭にJFIFヘッダーブロックが付き、一部のソフトウェアが好む拡張子が付いたものです。ブラウザやエディターはJPEGとして読み、珍しいのは拡張子だけです。

PNGがJFIFよりずっと大きいのはなぜですか?

JPEGは非可逆圧縮し、PNGはしないからです。PNGは同じピクセルをそれ以上圧縮せずに保持するため、写真をPNGで保存するとしばしば数倍大きくなります。

この記事のツール

記事一覧