原典情報: $ORACLE_HOME\ord\im\admin\README_JPEG2000.txt
JPEG2000は、国際電気通信連合(ITU)によって定義されたイメージ圧縮形式です。 イメージ・ファイル形式JP2(この形式もITUによる定義)を使用して、JPEG2000の圧縮イメージ・データをラップできます。
Oracle 10g リリース2では、interMediaによってJP2ファイル形式が認識され、イメージのプロパティ(高さ、幅、圧縮形式など)が取得されます。また、interMediaでは、JP2ファイルに対して、Extensible Metadata Platform(XMP)を使用してフォーマットされたメタデータを読取り/書込みできます。 この機能を使用するために必要な処理はありません。
JP2形式またはDICOM形式で格納されたJPEG2000圧縮イメージの処理を有効化するには、追加のJavaパッケージをOracle Databaseにインストールする必要があります。 このパッケージはSun社のサイトからダウンロードできます。このパッケージは、Java Advanced Imaging Image I/Oツールの一部です。 パッケージをインストールすると、interMediaが実行時にデータベース内のJPEG2000コーデックの存在を動的に検出するようになります。 コーデックが存在する場合は、interMediaイメージ処理コードがコーデックを使用して、JPEG2000イメージ・データを必要に応じて圧縮および解凍します。
interMediaによるデータベース内のJPEG2000イメージ処理を有効化する手順は、次のとおりです。
Sun社のJava Webサイトで、「Java Advanced Imaging(JAI)API」Webページから「Java Advanced Imaging Image I/O Tools 1.0_01」パッケージをダウンロードします。 ダウンロード・ボタンをクリックしてライセンスを受け入れると、ダウンロード・ページが表示されます。 ダウンロード・ページには、複数のインストール・オプション(CLASSPATHのインストール、JDKのインストール、JREのインストールなど)があります。 CLASSPATHをインストールするオプションを選択します。
ダウンロード・パッケージからjai_imageio.jarおよびclibwrapper_jiio.jarのJPEG2000コーデックが次の位置に抽出されます。
<ORACLE_HOME>/ord/jlib (UNIX) <ORACLE_HOME>\ord\jlib (Windows)
SQL*Plusを起動してSYSDBAとして接続します。
initjp2.sqlスクリプトを起動して、ORDJP2Kスキーマを作成し、JPEG2000コーデックをORDJP2Kスキーマにインストールします。
-> SQL> @/ord/im/admin/initjp2.sql (UNIX) @ \ord\im\admin\initjp2.sql (Windows)
JPEG2000コーデックを別のスキーマにインストールする場合は、initjp2.sqlスクリプトのJP2SCHEMA定義を適宜編集できます。
JPEG2000コーデックのSun社の実装ではjava.io.File.createTempFileをコールするため、ORDJP2KおよびORDSYSに対するjava.io.tmpdirの読取り/書込み/削除の権限がスクリプトinitjp2.sqlによって付与されます。
ユーザーがJPEG2000圧縮ファイルを書き込む場合は、一時ディレクトリに対して別の権限が必要です。 これらの権限は、2つのいずれかの方法で付与できます。
ORDSYS.ORDImage.processCopyをコールしてJPEG2000イメージを書き込む各データベース・スキーマに、java.io.tmpdirに対する読取り/書込み/削除の権限を明示的に付与します。
定義者権限をクラスJ2KImageWriterに付与します。このクラスは、JPEG2000コーデックのSun社の実装に含まれているクラスの1つです。
SQL*Plusを起動してSYSDBAとして接続します。
次のSQLコマンドを実行します。
SQL> alter session set current_schema = "ORDJP2K"; SQL> alter java class "com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageWriter" AUTHID DEFINER;
プラットフォームでOracle Java AcceleratorツールであるNCOMPがサポートされる場合は、NCOMPを使用してJPEG2000イメージ処理のパフォーマンスを向上させることができます。 NCOMPツールでは、指定されたJARファイルについて次の処理を実行します。
データベースにロードされるクラスを検証します。
これらのクラスのJavaバイトコードをデータベースから取得し、指定のプロジェクト・ディレクトリに格納します。
Javaバイトコードをプラットホームに依存しないCコードに変換します。
プラットフォームに依存するCコンパイラを使用して、共有ライブラリまたはダイナミック・リンク・ライブラリに、Cソース・コードをコンパイルしてリンクします。
ライブラリをOracle Databaseにデプロイします。 デプロイされたライブラリは、<ORACLE_HOME>/javavm/adminディレクトリに配置されます。
実行時にJava Virtual Machine(JVM)は、ネイティブにコンパイルされたライブラリが使用可能な場合は、そのライブラリへの関数呼出しをルーティングします。
アクセラレータを使用してネイティブにコンパイルされたライブラリを作成する方法は、『Oracle Database Java開発者ガイド』の「Oracle Database Javaアプリケーションのパフォーマンス」の章を参照してください。
interMediaにはPerlスクリプトncompjp2.plが付属しています。このスクリプトは、JPEG2000イメージ・コーデックのネイティブにコンパイルされたライブラリを作成するのに便利です。
ncompjp2.plスクリプトを実行する手順は、次のとおりです。
次のディレクトリに移動します。
<ORACLE_HOME>/ord/im/admin (UNIX) <ORACLE_HOME>\ord\im\admin (Windows)
ncompjp2.plを起動します。
PROMPT> perl ncompjp2.pl -u <JP2SCHEMA name> -d <projectDir> -h
引数:
-u: JPEG2000スキーマ名を示します。 initjp2.sqlで上書きされないかぎり、JP2SCHEMAはデフォルトでORDJP2Kです。 この引数は必須です。
-d: NCOMPプロジェクト・ディレクトリのフルパスを指定します。
このディレクトリは存在している必要があります。 このディレクトリがツールによって作成されることはありません。 この引数は必須です。
-h: ヘルプ・メッセージを表示します。 この引数はオプションです。
スクリプトを実行する前に、次の要件を満たしていることを確認します。
データベースが起動され、環境変数ORACLE_HOMEが設定されていること
コマンド・プロンプトからSQL*Plusを実行できること
PERL実行ファイルが格納されているディレクトリが環境変数PATHに指定されていること
NCOMPプロジェクト・ディレクトリが存在すること
NCOMPユーティリティを実行するための次の要件を整えます。 詳細は、『Oracle Database Java開発者ガイド』を参照してください。
NCOMPを実行しているコンピュータに、目的のプラットフォームに対応するCコンパイラをインストールします。
<ORACLE_HOME>/javavm/jahomeディレクトリのSettings_os.propertiesファイル内で、適切なコンパイラおよびリンカーのコマンドが参照されることを確認します。 設定が正しくないと、Settings_os_PRODUCT.propertiesというファイルがNCOMPプロジェクト・ディレクトリに作成されて、ファイルが上書きされる可能性があります。 このファイルの設定は、グローバル設定より優先されます。 たとえば、Windowsで、Settings_os.propertiesが次のようにデフォルト設定されているとします。
visual.c.home = c:/devstudio/vc
次のディレクトリにVISUAL Cがインストールされているとします。
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7
次の1行でSettings_os_PRODUCT.propertiesを作成できます。
visual.c.home = "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7"
これで、NCOMPが正しいディレクトリでコンパイラおよびリンカーを選択するようになります。
注意: Windowsでは、「visual.c.home」パス文字列に空白がある場合は、前述の例のように文字列の周囲を二重引用符(")で囲みます。
このスクリプトでは、ユーザーにSYSDBAパスワードの入力を求めるプロンプトが表示されます。
このスクリプトでは、NCOMPが正常に終了した場合は「JPEG2000 library NCOMP succeeds!」が出力され、それ以外の場合は「JPEG2000 library NCOMP problems detected!」が出力されます。 NCOMPが正常に終了しなかった場合は、JP2SCHEMAのjaccelerator$dlls表およびjaccelerator$dll_errors表の内容が出力されます。 これらの2つの表は、デプロイメント結果とエラーを記録するためにNCOMPによって生成されます。 jaccelerator$dlls表の各行は、共有ライブラリを表します。 STATUS列が「installed」の場合は、ライブラリが正しくNCOMP(ネイティブにコンパイル)されています。
NCOMPプロジェクト・ディレクトリには、NCOMPユーティリティで生成されるncomp.logに加え、このスクリプトにより、NCOMPの標準的なエラーが保存されるncompjp2.logという名前のログ・ファイルも生成されます。
NCOMPが正常に終了しなかった場合は、これらの2つのログ・ファイルで詳細なエラー情報を確認します。
注意: 「JPEG2000 library NCOMP problems detected!」が表示された場合は、最初にncomp.logでCコンパイラの参照が正しいかどうかを確認してください。 Cコンパイラまたはリンカーが見つからなかった場合は、ncomp.logに「got java.io.IOException: CreateProcess」のようなエラーが記載されます。
interMediaによるデータベース内のJPEG2000イメージ処理を無効化する手順は、次のとおりです。
SQL*Plusを起動してSYSDBAとして接続します。
imdrpjp2.sqlスクリプトを起動してORDJP2Kスキーマを削除し、ORDJP2Kに付与されている権限を取り消します。
-> SQL> @<ORACLE_HOME>/ord/im/admin/imdrpjp2.sql (UNIX) @<ORACLE_HOME>\ord\im\admin\imdrpjp2.sql (Windows)