オープンソースを使った JPEG 操作
最終更新日:2000/02/20
 JPEG ファイルを操作する為のユーティリティは、フリーソフトでも、
結構たくさんあるのですが、
いざ、「自分の思った操作をしたい」と思った時、なかなか、それに適する
ものは見つからないのものです。

例えば、私が欲しかったのは、ファイルからでは無く、メモリ上にある
JPEG イメージを、直接、DIB(BMP イメージ)に変換して、
アプリケーションで、自由に表示処理を行いたい、というものです。
というのも、最近は、DBMS 中に BLOB(バイナリラージオブジェクト)型
として、バイナリイメージを格納出来ますが、これを直接表示する手段は
限られています。
Web 経由であれば、単に、CGI で、標準出力(stdio)へそのまま出力すれば、
ブラウザが表示してくれるので、手間はかからないのですが、そうで無い場合は、
簡単ではありません。

【 フリーソフトを使う 】

 実際、探したのですが、目的にかなう DLL はありません。
特に、ソースを公開しているものは皆無に近いです。

【 JPEG 操作を1から作る? 】

 4〜5年前の昔ならいざ知らず、画像処理を専門に扱う人や、
勉強の為なら別ですが、今さら、そこまで自分で作り上げるのは
あまり意味が無いように思います。そもそも、速度の最適化や、テストの
事まで考えると、能力的にも、時間的にも難しいでしょう。

【 オープンソースを使う 】

 そこで、多少手間でも、オープンソースを使わせていただく
事にしました。幸い

Independent JPEG Group's software
ftp://ftp.uu.net/graphics/jpeg/

で公開されています。
私が使用したバージョンは、JPEG-6b です。

まず、ファイルをダウンロードし、unzip で展開して、中のドキュメントに
目を通します。
当然、全て英語(苦手です!)ですが、これを日本語で解説したサイトは
残念ながら見つけられませんでした。

ライセンスについては、次の点が、とりあえず重要だと思います。

------------- README より抜粋 --------------------------------------

1. We don't promise that this software works.  
   (But if you find any bugs, please let us know!)
2. You can use this software for whatever you want.  
   You don't have to pay us.
3. You may not pretend that you wrote this software.  
   If you use it in a program, you must acknowledge somewhere 
   in your documentation that you've used the IJG code.

1. われわれは、このソフトウェアが動作する事を保証しません。
   (でも、もしあなたがバグを見つけたら、わたしたちに知らせて下さい!)
2. あなたはどんなものにでも、このソフトウエアを使えます。
   あなたはわれわれに(金銭を)支払う必要はありません。
3. あなたは、このソフトを自分で書いたと偽ってはなりません。
   もしプログラムでこれを使うなら、あなたのドキュメントのどこかで、
   IJG コードを使った事を認めなければなりません。
--------------------------------------------------------------------

※ 私の使っている IE4.0 でも IJG の著作権表示があります。(^o^)

IJG のソースコードは、特別な環境(Windows 環境等)に特化された
ものでは無く、UNIX をはじめ、多くのプラットフォームで
使えるように、共通化されています。
今回は、Windows(WIN32) 環境で使う事を前提に話をすすめます。

【 ライブラリの作成(ビルド) 】

 IJG のこのパッケージは、ライブラリ(LIB)の提供を主な目的に
しています。コンパイル済みのバイナリイメージは、
言語製品や、プラットフォームごとに違ってくるので、特に、
提供されていないようです。従って、自分で作成(make)する事になります。

README に続いて、install.doc にも目を通しましょう。

とりあえず、ビルドする為には、プラットフォーム用の makefile
をコピーします。
私の場合、WIN32 で、VC++ を使うので、makefile.vc を makefile に
コピーしました。
それと、jconfig.h も、各プラットフォーム用をコピーします。
(jconfig.vc -> jconfig.h)

後は、コンソール(DOS 画面)で make(nmake) するだけです。
(統合環境でも使用可能なようですが、私は、使わない主義です。
注釈がありますので、必要なら読んで下さい。)

この IJG パッケージの中には、ライブラリの他に、それを使った
アプリケーション例も入っています。
ビルドすると、次のイメージが出来ます。

     CJPEG.EXE      --- JPEG 圧縮
     DJPEG.EXE      --- JPEG 解凍
     JPEGTRAN.EXE   --- JPEG 変換
     RDJPGCOM.EXE   --- JFIF コメント読み取り
     WRJPGCOM.EXE   --- JFIF コメント書き込み

CJPEG.EXE、DJPEG.EXE は、BMP ファイルと、JPEG ファイルとの
相互変換に使えます。
圧縮、解凍以外のものは、私には良くわかりません。(読んでいません)
当然、すべてコマンドラインツールですので、使い方のサンプルという
位置付けのようです。

ライブラリは、

     LIBJPEG.LIB

として作成されます。

【 自分で、簡単なサンプルアプリケーションを作ってみよう! 】

 何はともあれ、自分で簡単な例を書くのが最初でしょう。
まず、簡単なプログラムとして、

「JPEG ファイルから BMP ファイルに変換するプログラム」

上記の手順が一通り理解できれば、同様に、

「BMP ファイルから JPEG ファイルに変換するプログラム」

は簡単でしょう。

次に、DLL 化の課題について考えてみましょう

IJG JPEG ライブラリの DLL 化

応用として、ファイルへの入出力ではなく、メモリ上で、
形式を変換する方法についても考えてみましょう。

入力マネージャのカスタマイズ

|HOME|戻る|