web用jpgファイルの考察
2004.2.29
<2005.6.19>記事の内容が古くなってますが、しばらくはこのまま残しておきます。ソフトの公開は終了しました。
*概要*
現在web用に使われる画像ファイルの大半はjpg形式のファイルですが、ファイルサイズを圧縮したいが為にjpgファイルを使っているという場合が殆どだと思われます。
しかし、jpgファイルには画像表示に必要なデータ以外の付加情報が有り、ファイルサイズを大きくしてしまっている場合が有る事を知らない人は少なく無いようです。
付加情報は主に、画像ソフトにより付加されるオプション情報と、デジタルカメラ等の機器により付加されるExif情報が有ります。それぞれ画像ソフトによるファイル保存時とデジタルカメラによる撮影時に付加されます。
これらの情報はブラウザで表示する場合、全く意味の無い情報です。
ところで、web用画像を作成する場合、デジカメやスキャナーなどで作成したjpgファイルをそのまま使用する事は少なく、画像ソフトで縮小などして作成しますが、各ソフトに付加情報を付けず(あるいは少なくして)に保存する機能が有り、これを活用するとweb用に特化したjpgファイルを作成できます。
ここでは、自分が使用しているPhotoShopElements2とPaintShopPro8での処理方法と、その結果生成されるjpgファイルの構造をごく簡単に説明します。
*以下、画像ファイルに関する知識が特に無い人間が書いている記事ですので、誤解や適切でない部分が有ると思われます。お気付きの点が有りましたら連絡下さい。
*jpgファイルの構造*
jpgファイルはJPEG規格に沿ったものですが、さまざまな形式に対応しており、長い歴史の中で現在の形に落ち着いたようです。
現在見られるjpgファイルの殆どがJFIF形式か、それを拡張したExif形式のファイル形式となっています。
jpgファイル中に現れるセグメントは基本的に2byteのマーカーとその直後の2byteでセグメントの長さを規定しています。
一つのセグメントの長さは2byteで規定されるので最長で65536byteになります。
SOIとEOIはマーカーのみです、SOSはセグメントの長さは規定されません。
jpgファイル中に現れる主なセグメント | ||
マーカー | 内容 | |
FFD8 | SOI | イメージの開始(Start Of Image) |
FFE0 | APP0 | JFIF形式のアプリケーションデータ Exif形式の場合は存在しない。 |
FFE1 | APP0 | Exif形式のアプリケーションデータ JFIF形式でも存在する事が有る。 |
FFE* | APP0 | オプションのアプリケーションデータ JFIF/Exifどちらでも複数個存在しうる。 |
FFDE | DQT | 量子化されたテーブル |
FFC0 | SOFO | フレームマーカー |
FFC4 | DHT | ハフマンテーブル |
FFDD | DRI | リスタートの間隔(オプション) |
FFDA | SOS | イメージのデータ |
FFD9 | EOI | イメージの終了(End Of Image) |
実際のファイルを覗いてみると、微妙にマーカーが違ったりして正確には判らないのですが要するにFFE*のマーカー以下のセグメントが画像を表示するのには不要の部分です。
なお、デジカメで撮影したデータなどが入るExif形式もJFIFのセグメントが増える形となっています。
FFE0から始まるセグメントが無くなりFFE1から始まるセグメントがSOIの直後に入り、ここでファイル形式を認識するようです。
*参考文献*
グラフィックファイルフォーマットハンドブック(アスキー出版局、1995)
デジタルスチルカメラ用ファイルフォーマット規格(Exif)Ver2.1(JEIDA規格)
*PhotoShopElements2の場合*
PhotoShopではVer5.5から通常の保存と別にweb用に保存する機能が追加されたようです。
この経緯は詳しく判りませんが、付加情報がだんだん増えていってファイルサイズが無駄に大きいという不満が生じたせいではないでしょうか。
そして、PhotoShopElements2でも、ファイルの保存と別に「web用に保存」というメニューが有ります。
web用に保存ではjpg以外にGIFとPNGも選べるようですが、写真を処理する場合はjpgを選んでおけば良いと思います。
同じ画像を通常の保存とweb用の保存で作成してみたのが下の図です(圧縮率は、指定の仕方が違うので全く同じにはなっていないのですが)。FFDAより前のセグメントのマーカーとサイズを抜き出しています。
<別名で保存(上)とweb用に保存(下)の違い>
ところで、この項の最初の方に書くべきでしたが、PhotoShopElements2はExifには対応していません。
その為、Exif形式のjpgファイルからファイルの保存でjpgファイルを生成するとJFIFのFFE0のセグメントが付加され、Exif情報が見られなくなります。
が、正確に調べた訳では無いのですが、FFE1辺りを見るとExif情報が残っているようで、将来の拡張を想定して残しているんでしょうか?
どっちにしても、web用には無駄なだけです。
*PaintShopPro8の場合*
PaintShopProではVer7まではExi規格に対応してませんでした。また、特に意識して選択しなければ余計なアプリデータが付加する事も無かったのですが、Ver8からExif規格に対応するようになりました。
そして、パッケージからインストールして普通に使うと、Exif情報が有る場合、別名で保存してもアプリ内でコピー&ペーストしてもjpgで保存する際にExif情報が付加されてしまいます。
プログレッシブ方式で保存すれば付加されないのですが、この動作は不評だったようで、バージョンアップで対応されています。
PaintShopPro8のヘルプからバージョン情報を見て8.10より前である事を確認し、PaintShopProのダウンロードページからバージョン8.10(以降)をダウンロードしてインストールします。
jpg関連以外にも多くの変更やバグフィックスが行われているようなので、必ず当てておいた方が良いでしょう。
これで、jpgファイルのエクスポートのダイアログに「Exifデータを保存する」というチェックボックスが追加されますので、そのチェックを外して保存します。
この設定は保存されますが、「名前を付けて保存」でjpgを保存する方には適用されません(こちらからエクスポートに行く事も出来ますが、階層が深いので)ので、jpgを保存する場合はエクスポートを使った方が良いでしょう。
<jpgで保存した場合(上)とjpgでエクスポートした場合(下)>
なお、PaintShopPro8では、普通の保存とエクスポートで生成されるjpgファイルには全く差が無く、Exifを保存する/しないによってFFE1セグメント周辺が調整されるだけです。
因みに、FFFEセグメントは何なのかは良く判りません。
*既存のjpgファイルから付加情報を削除する*
付加情報について特に意識せずに長期間jpgを処理している場合、既に大量の付加情報付きファイルを抱えてしまっている事が有ります。
これを処理し直すのはかなり面倒ですし、jpgを再圧縮した際の画質の劣化も気になります。
こういう場合に有効なのが、jpgファイルから付加情報のみを削除するようなソフトです。デジカメ情報ページの「ぴっぴののらねこ洞」の画像ソフト編に判りやすく纏まっていますので探してみて下さい。((閉鎖されたようです、お疲れ様でした)
実は、自分でも作ってみました。まだ動作確認中ですが、宜しかったら使ってみて下さい。
jpgslim0903.lzh(262Kb)
*適当なフォルダに解凍して下さい。
*最初の起動時にC:\jpg-workというフォルダを(無ければ)作成します。
*使い方等は一緒に圧縮されているreadme.txtを参照して下さい。