# 20.12 `jpeg` -- JPEGファイルの読み書きを行う

利用可能な条件: IRIX.

この`jpeg`モジュールはIndependent JPEG Group (IJG) によって書かれたJEPG圧縮及び展開アルゴリズムを提供します。 JPEG形式は写真等の画像圧縮で標準的に利用され、ISO 10918で定義されてます。 JPEG、あるいはIndependent JPEG Groupソフトウェアの詳細は、 標準JPEG、若しくは提供されるソフトウェアのドキュメントを参照してください。

JPEGファイルを扱うポータブルなインタフェースはFredrik Lundhによる Python Imaging Library (PIL)があります。また、PILの情報は http://www.pythonware.com/products/pil/で見つけることができます。

モジュール`jpeg`では、一つの例外といくつかの関数を定義しています。

exception `error`
  関数`compress()`または`decompress()`のエラーで 上げられる例外です。

`compress`( | data, w, h, b)

  イメージファイルの幅w、高さh、1ピクセルあたりのバイト数bを 引数として扱います。データはSGI GL順になっていて、 最初のピクセルは左下端になります。 また、これは`gl.lrectread()`が返す値をすぐに`compress()`に かけるためです。現在は、1バイト若しくは4バイトのピクセルを 取り扱うことができます、前者はグレースケール、後者はRGBカラーを扱います。 `compress()`は、圧縮されたJFIF形式のイメージが 含まれた文字列を返します。

`decompress`( | data)

  データは圧縮されたJFIF形式のイメージが含まれた文字列で、 この関数はタプル`(data, width, height, bytesperpixel)`を返します。また、そのデータは `gl.lrectwrite()`を通過します。

`setoption`( | name, value)

  `compress()`と`decompress()`を呼ぶための様々な オプションをセットします。次のオプションが利用できます:

  オプション | 効果
  --- | ---
  `'forcegray'` | 入力がRGBでも強制的にグレースケールを出力します。
  `'quality'` | 圧縮後イメージの品質を`0`から`100`の間の値で指定します (デフォルトは`75`です)。これは圧縮にのみ影響します。
  `'optimize'` | ハフマンテーブルを最適化します。時間がかかりますが、高圧縮になります。 これは圧縮にのみ影響します。
  `'smooth'` | 圧縮されていないイメージ上でインターブロックスムーシングを行います。 低品質イメージに役立ちます。これは展開にのみ影響します。

参考資料:

JPEG Still Image Data Compression Standard
  The canonical reference for the JPEG image format, by Pennebaker and Mitchell.

Information Technology - Digital Compression and Coding of Continuous-tone Still Images - Requirements and Guidelines
  The ISO standard for JPEG is also published as ITU T.81. This is available online in PDF form.