10 Oracle Multimedia ORDImageオブジェクト型

Oracle Multimediaでは、イメージ・データの格納、管理、操作をサポートするORDImageオブジェクト型が提供されます。

ORDImageオブジェクト型は、ordispec.sqlファイルで定義されています。インストール後、このファイルは次のOracleホーム・ディレクトリに格納されています。

<ORACLE_HOME>/ord/im/admin (LinuxおよびUNIXの場合)

<ORACLE_HOME>\ord\im\admin (Windowsの場合)

10.1 ORDImageオブジェクトの例

ORDImageオブジェクト型の例では、Oracle Database Product Media (PM)サンプル・スキーマのONLINE_MEDIA表を使用しています。Oracle Databaseサンプル・スキーマは、GitHubで使用できます。使用しているコンピュータでこれらの例を再現するには、まず、ORDImageのコンストラクタ、およびimport( )とimportFrom( )メソッドの項に示す例を実行してください。例のファイルは、実際のイメージ・ファイルで置き換えてください。

コンストラクタの「BLOBのORDImage」の例では、テスト・イメージ表のTIMGを使用しています。(この表の定義は、「TIMG表の定義」を参照してください。)

注意:

BLOBを直接修正するか、または外部ソースを変更してイメージ・データ自体を操作した場合、オブジェクト属性の同期が維持されていることと、更新時刻が修正されていることを確認する必要があります。そうしないと、オブジェクト属性がイメージ・データと一致しなくなります。

10.1.1 ORDImageオブジェクトの例に使用するディレクトリの定義

例を実行する前に、次の文を発行します(c:\mydir\workは、ユーザーronがイメージ・データを検索できるディレクトリです)。これらのコマンドを実行する前に、ディレクトリ・オブジェクトを作成する権限を持ったユーザーとして接続しておく必要があります。

CREATE OR REPLACE DIRECTORY FILE_DIR as 'c:\mydir\work';
GRANT READ ON DIRECTORY FILE_DIR TO 'ron';

10.2 ORDImageのメソッドの重要な注意事項

ORDSourceレベルでコールされたメソッドは、ソース・プラグインに渡されて処理され、最初の引数にctx (RAW)を取ります。これらのメソッドのいずれかをクライアントから初めてコールする場合、ctx構造体を割り当ててNULLに初期化してから、openSource( )メソッドをコールする必要があります。このとき、ソース・プラグインによって、このクライアントのコンテキストを初期化できます。処理が完了したら、クライアントからcloseSource( )メソッドをコールする必要があります。

ソース・プラグインのコールによってコールされたメソッドは、最初の引数にctx (RAW)を取ります。

注意:

今回のリリースでは、Oracleが提供するいずれのプラグインもctx構造体を使用しません。また、すべてのソース・プラグインまたはフォーマット・プラグインがctx構造体を使用するわけではありませんが、前述の方法でコーディングすると、アプリケーションは、現行または今後のソース・プラグインまたはフォーマット・プラグインで動作します。

ネイティブにサポートされているフォーマットでは、setProperties( )メソッドを使用してオブジェクトの属性を自動的に移入します。それ以外の場合、外部イメージに対するsetProperties( )メソッドを使用するか、ネイティブにサポートされていないフォーマットでは、個々のいずれかのsetメソッドを使用して、オブジェクトの属性値を設定します。

10.3 ORDImageオブジェクト型

ORDImageオブジェクト型は、イメージ・データの格納、管理および操作をサポートします。このオブジェクト型の属性は、ordispec.sqlファイルで次のように定義されています。

  -------------------
  -- TYPE ATTRIBUTES
  -------------------
  source              ORDSource,
  height              INTEGER,
  width               INTEGER,
  contentLength       INTEGER,
  fileFormat          VARCHAR2(4000),
  contentFormat       VARCHAR2(4000),
  compressionFormat   VARCHAR2(4000),
  mimeType            VARCHAR2(4000),

説明:

  • source: 格納されたイメージ・データのソース。

  • height: イメージのピクセル単位の高さ。

  • width: イメージのピクセル単位の幅。

  • contentLength: ディスク上のイメージ・ファイルのバイト単位のサイズ。

  • fileFormat: イメージ・データの格納ファイル・タイプまたは格納フォーマット(TIFF、JFIFなど)。

  • contentFormat: イメージのタイプ(モノクロなど)。

  • compressionFormat: イメージ・データに使用される圧縮アルゴリズム。

  • mimeType: MIMEタイプについての情報。

10.4 ORDImageのコンストラクタ

ORDImageのコンストラクタ・ファンクションには、BLOBの格納専用のものと、他のすべてのソースに対応したものと2つあります。

10.4.1 BLOBのORDImage

構文

ORDImage(SELF IN OUT NOCOPY ORDSYS.ORDImage,
         data IN BLOB,
         setproperties IN INTEGER DEFAULT 0)
 RETURN SELF AS RESULT

説明

BLOBからORDImageオブジェクトを構築します。構築されたORDImageオブジェクトが表に挿入または更新されると、BLOBに格納されているデータがORDImageオブジェクトにコピーされます。

パラメータ

data

BLOBに格納されているイメージ・コンテンツです。

setproperties

コンストラクタでsetProperties( )メソッドをコールするかどうかを決定するインジケータ・フラグです。値が1の場合、setProperties( )メソッドがコールされます。値が0の場合、メソッドはコールされません。デフォルトは0です。

プラグマ

なし。

例外

なし。

使用上の注意

イメージ・コンテンツが一時または永続BLOBのいずれかに格納される場合は、このコンストラクタを使用して、ORDImageオブジェクトを作成します。

BLOBオブジェクトからORDImageオブジェクトを作成し、表に挿入します。

注意:

この文を実行するユーザーは、ユーザーmediauserによって作成されたtimg表に対するSELECT権限を持っている必要があります。

テスト・イメージ表のTIMGの定義は、「TIMG表の定義」を参照してください。

INSERT INTO pm.online_media (product_id, product_photo)
  SELECT 3501, ORDSYS.ORDImage(t.img) FROM mediauser.timg t WHERE t.n = 1;

10.4.2 他のソースのORDImage

構文

ORDImage(SELF IN OUT NOCOPY ORDSYS.ORDImage,
         source_type      IN VARCHAR2 DEFAULT 'LOCAL',
         source_location  IN VARCHAR2 DEFAULT NULL,
         source_name      IN VARCHAR2 DEFAULT NULL,
         setproperties    IN INTEGER DEFAULT 0)
 RETURN SELF AS RESULT

説明

特定のソースからORDImageオブジェクトを構築します。デフォルトでは、ローカル・ソースによる空のオブジェクトが構築されます。

パラメータ

source_type

ソース・イメージ・データのタイプを指定します。有効な値は、FILEHTTPLOCALまたはユーザー定義です。デフォルトは、LOCALです。

パラメータ値のLOCALは、データがOracle Databaseに格納されていることを示します。パラメータ値のLOCALは、srcType属性に格納されることはありません。かわりに、このパラメータ値は、localData属性でデータがOracle Databaseに格納されていることを示します。(ORDSourceオブジェクトの説明は、「埋込みORDSourceオブジェクト」を参照してください。)

source_location

インポート元のソース・イメージ・データの位置を指定します。(表7-2を参照してください。)

source_name

ソース・イメージ・データの名前を指定します。(表7-3を参照してください。)

setproperties

コンストラクタでsetProperties( )メソッドをコールするかどうかを決定するインジケータ・フラグです。値が1の場合、setProperties( )メソッドがコールされます。値が0の場合、メソッドはコールされません。デフォルトは0です。

プラグマ

なし。

例外

なし。

使用上の注意

次のいずれかの状況のように、イメージ・コンテンツがBLOBに格納されていない場合は、このコンストラクタを使用して、ORDImageオブジェクトを作成します。

  • コンテンツがローカル・ファイルに存在します。
  • コンテンツがURLで参照されています。
  • コンテンツがORDImageオブジェクトの作成時に使用できません。

指定されたソースからORDImageオブジェクトを作成します。

-- Construct an ORDImage object from an external file and insert it into the table.
INSERT INTO pm.online_media (product_id, product_photo)
  VALUES (3515, ORDSYS.ORDImage('FILE', 'FILE_DIR', 'speaker.jpg'));
 
-- Initialize an ORDImage object in the table.
INSERT INTO pm.online_media (product_id, product_photo)
  VALUES(3501, ORDSYS.ORDImage());

10.5 ORDImageのメソッド

Oracle Multimediaのいくつかのメソッドは、特にイメージ・データの操作用に設計されています。

ORDAudio、ORDDoc、ORDImageおよびORDVideoに共通のOracle Multimediaのメソッドに関するリファレンス情報については、「すべてのOracle Multimediaオブジェクト型に共通のメソッド」を参照してください。この章と第2章で示すメソッドを使用すると、属性の取得と設定、処理操作、およびメタデータの抽出を実行できます。

関連項目:

オブジェクト型およびメソッドの詳細は、『Oracle Database概要』を参照してください

10.5.1 イメージのapplyWatermark( )

構文

applyWatermark(SELF IN OUT NOCOPY ORDImage,
               added_image          IN OUT NOCOPY ORDImage,
               dest                 IN OUT NOCOPY ORDImage,
               logging              OUT VARCHAR2,
               watermark_properties IN ORDSYS.ORD_STR_LIST default null);

説明

イメージ・ウォーターマークをソース・イメージに重ねて配置し、宛先イメージ・オブジェクトに書き込みます。

パラメータ

added_image

ソース・イメージに追加するORDImageオブジェクトに格納されたウォーターマーク・イメージです。

dest

ウォーターマーク・イメージの宛先ORDImageオブジェクトです。

logging

ウォーターマークの設定操作中に発生した予期しない動作に関する情報を含む文字列です。操作に成功した場合、空の文字列が戻されます。

watermark_properties

重ねて配置するウォーターマーク・イメージの属性(width、height、position、position_x、position_y、transparencyなど)を定義した名前/値ペアの文字列リストです。ウォーターマーク・プロパティの完全なリストは、表D-4を参照してください。

使用上の注意

同じORDImageをソースおよびコピー先の両方に指定することはできません。

このメソッドをコールすると、ソース(ローカルまたは外部)からイメージがコピー先BLOBにコピーされます。

ウォーターマークの設定操作およびウォーターマーク・プロパティの詳細は、「ウォーターマークの設定操作」を参照してください。

プラグマ

なし。

例外

ORDImageExceptions.DATA_NOT_LOCAL

この例外は、applyWatermark( )メソッドをコールし、宛先イメージのsource.local属性の値が0か、または宛先のsource.localData属性が初期化されていない場合に発生します。

ORDImageExceptions.NULL_DESTINATION

この例外は、applyWatermark( )メソッドをコールし、宛先イメージがNULLの場合に発生します。

ORDImageExceptions.NULL_LOCAL_DATA

この例外は、applyWatermark( )メソッドをコールし、宛先イメージのsource.localData属性の値がNULLの場合に発生します。この例外は、applyWatermark( )メソッドをコールし、ソース・イメージのsource.local属性の値が1またはNULLで、source.localData属性の値がNULLの場合にも発生します。

ORDImageExceptions.NULL_SOURCE

この例外は、ソースまたはウォーターマーク・イメージのsource属性の値がNULLの場合に発生します。

これらの例外の詳細は、「Oracle Multimediaオブジェクトの例外」を参照してください。

ウォーターマーク・イメージをソース・イメージに追加します。

-- add image as watermark to source image
DECLARE
  source_image ORDSYS.ORDImage;
  added_image ORDSYS.ORDImage;
  dest_image ORDSYS.ORDImage;
  prop ordsys.ord_str_list;
  logging VARCHAR2(2000);
BEGIN
  select product_photo into source_image from pm.online_media
    where product_id = 4001;
  select product_photo into added_image from pm.online_media
    where product_id = 4002;
  select product_photo into dest_image from pm.online_media
    where product_id = 4003 for update;
 
  -- specify properties
  prop := ordsys.ord_str_list(
                   'position=bottomright',
                   'transparency=0.2');
 
  -- add image watermark to source image
  source_image.applyWatermark(added_image, dest_image, logging, prop);
  update pm.online_media set product_photo = dest_image where product_id = 4003;
  commit;
EXCEPTION
  WHEN OTHERS THEN
      RAISE;
END;
/

10.5.2 テキストのapplyWatermark( )

構文

applyWatermark(SELF IN OUT NOCOPY ORDImage,
               added_text           IN VARCHAR2,
               dest                 IN OUT NOCOPY ORDImage,
               logging              OUT VARCHAR2,
               watermark_properties IN ORDSYS.ORD_STR_LIST default null);

説明

テキスト・ウォーターマークをソース・イメージに重ねて配置し、宛先イメージ・オブジェクトに書き込みます。

パラメータ

added_text

ソース・イメージに追加する文字列に格納されたウォーターマーク・テキストです。

dest

ウォーターマーク・イメージの宛先ORDImageオブジェクトです。

logging

ウォーターマークの設定操作中に発生した予期しない動作に関する情報を含む文字列です。操作に成功した場合、空の文字列が戻されます。それ以外の場合、このメソッドは、予期しない動作を記述した文字列を戻します。たとえば、ウォーターマーク・テキストが長すぎて切り捨てられる場合、「警告: テキストは長すぎるため切り捨てられます」という文字列が戻されます。

watermark_properties

重ねて配置するウォーターマーク・テキストの属性(font_name、font_style、font_size、text_color、position_x、position_y、transparencyなど)を定義した名前/値ペアの文字列リストです。ウォーターマーク・プロパティの完全なリストは、表D-4を参照してください。

使用上の注意

同じORDImageをソースおよびコピー先の両方に指定することはできません。

このメソッドをコールすると、ソース(ローカルまたは外部)からイメージがコピー先BLOBにコピーされます。

ウォーターマークの設定操作およびウォーターマーク・プロパティの詳細は、「ウォーターマークの設定操作」を参照してください。

プラグマ

なし。

例外

ORDImageExceptions.DATA_NOT_LOCAL

この例外は、applyWatermark( )メソッドをコールし、宛先イメージのsource.local属性の値が0か、または宛先のsource.localData属性が初期化されていない場合に発生します。

ORDImageExceptions.NULL_DESTINATION

この例外は、applyWatermark( )メソッドをコールし、宛先イメージがNULLの場合に発生します。

ORDImageExceptions.NULL_LOCAL_DATA

この例外は、applyWatermark( )メソッドをコールし、宛先イメージのsource.localData属性の値がNULLの場合に発生します。この例外は、applyWatermark( )メソッドをコールし、ソース・イメージのsource.local属性の値が1またはNULLで、source.localData属性の値がNULLの場合にも発生します。

ORDImageExceptions.NULL_SOURCE

この例外は、ソース・イメージのsource属性の値がNULLの場合に発生します。

これらの例外の詳細は、「Oracle Multimediaオブジェクトの例外」を参照してください。

ウォーターマーク・テキストをソース・イメージに追加します。

-- add text as watermark to source image
DECLARE
  source_image ORDSYS.ORDImage;
  added_text varchar2(200);
  dest_image ORDSYS.ORDImage;
  prop ordsys.ord_str_list;
  logging VARCHAR2(2000);
BEGIN
  select product_photo into source_image from pm.online_media
    where product_id = 4001;
  select product_photo into dest_image from pm.online_media
    where product_id = 4003 for update;
 
  added_text := 'Oracle Multimedia © 2009';
  -- specify properties
  prop := ordsys.ord_str_list(
                   'font_name=Times New Roman',
                   'font_style=bold',
                   'font_size=50',
                   'text_color=red',
                   'position_x=100',
                   'position_y=100',
                   'transparency=0.6');
 
  -- add text watermark to source image
  source_image.applyWatermark(added_text, dest_image, logging, prop);
  update pm.online_media set product_photo = dest_image where product_id = 4003;
  commit;
EXCEPTION
  WHEN OTHERS THEN
      RAISE;
END;
/

10.5.3 checkProperties( )

構文

checkProperties( ) RETURN BOOLEAN;

説明

イメージ・オブジェクトの属性に格納されたプロパティがイメージのプロパティと一致することを検証します。このメソッドは、外部イメージには使用しないでください(外部イメージは、Oracle Multimediaではネイティブにサポートされていません)。

パラメータ

なし。

使用上の注意

このメソッドを使用して、イメージの属性が実際のイメージと一致することを検証します。

プラグマ

なし。

例外

ORDImageExceptions.NULL_SOURCE

この例外は、ORDImage.source属性の値がNULLの場合に発生します。

この例外の詳細は、「Oracle Multimediaオブジェクトの例外」を参照してください。

イメージ属性をチェックします。

DECLARE
 image ORDSYS.ORDImage;
 properties_match BOOLEAN;
BEGIN
 SELECT p.product_photo INTO image FROM pm.online_media p
  WHERE p.product_id = 3515;
 -- check that properties match the image
 properties_match := image.checkProperties();
 IF properties_match THEN
  DBMS_OUTPUT.PUT_LINE('Check Properties succeeded');
 ELSE
  DBMS_OUTPUT.PUT_LINE('Check Properties failed');
 END IF;
COMMIT;
END;
/

10.5.4 copy( )

構文

copy(dest IN OUT ORDImage);

説明

イメージを変更せずにコピーします。

パラメータ

dest

新しいイメージのコピー先を指定します。

使用上の注意

このメソッドは、すべてのソースおよびイメージ属性を含めて、指定したローカルの宛先イメージにイメージ・データをそのままコピーします。

データがソースにローカルに格納されている場合、このメソッドをコールするとコピー先のsource.localData属性にBLOBがコピーされます。

このメソッドをコールすると、ソース・データがローカルに格納されているかどうかにかかわらず、外部ソース情報が新しいイメージの外部ソース情報にコピーされます。

このメソッドをコールすると、setUpdateTime( )メソッドがコピー先オブジェクトに暗黙的にコールされ、タイムスタンプ情報が更新されます。

プラグマ

なし。

例外

ORDImageExceptions.NULL_SOURCE

この例外は、ORDImage.source属性の値がNULLの場合に発生します。

この例外の詳細は、Oracle Multimediaオブジェクトの例外を参照してください。

イメージのコピーを作成します。

DECLARE
 image_1 ORDSYS.ORDImage;
 image_2 ORDSYS.ORDImage;
BEGIN
 -- Initialize a new ORDImage object where the copy will be stored:
  INSERT INTO pm.online_media (product_id, product_photo)
  VALUES (3091, ORDSYS.ORDImage());
 -- Select the source object into image_1:
 SELECT product_photo INTO image_1 FROM pm.online_media 
   WHERE product_id = 3515;
 -- Select the target object into image_2:
 SELECT product_photo INTO image_2 FROM pm.online_media 
   WHERE product_id = 3091 FOR UPDATE;
 -- Copy the data from image_1 to image_2:
 image_1.copy(image_2);
 UPDATE pm.online_media SET product_photo = image_2
  WHERE product_id = 3091;
 COMMIT;
END;
/

10.5.5 getCompressionFormat( )

構文

getCompressionFormat( ) RETURN VARCHAR2;

説明

イメージ・オブジェクトのcompressionFormat属性の値を戻します。

パラメータ

なし。

使用上の注意

compressionFormat属性に直接アクセスすると、ORDImageオブジェクトの内部表現を変更してしまう可能性があるため、それを避けるためにこのメソッドを使用します。

プラグマ

PRAGMA RESTRICT_REFERENCES(getCompressionFormat, WNDS, WNPS, RNDS, RNPS)

例外

なし。

イメージの圧縮タイプを取得します。

DECLARE
 image ORDSYS.ORDImage;
 compression_format VARCHAR2(4000);
BEGIN
 SELECT p.product_photo INTO image FROM pm.online_media p
  WHERE p.product_id = 3515;
 -- Get the image compression format:
 compression_format := image.getCompressionFormat();
 DBMS_OUTPUT.PUT_LINE('Compression format is ' || compression_format);
 COMMIT;
END;
/

10.5.6 getContentFormat( )

構文

getContentFormat( ) RETURN VARCHAR2;

説明

イメージ・オブジェクトのcontentFormat属性の値を戻します。

パラメータ

なし。

使用上の注意

contentFormat属性に直接アクセスすると、ORDImageオブジェクトの内部表現を変更してしまう可能性があるため、それを避けるためにこのメソッドを使用します。

プラグマ

PRAGMA RESTRICT_REFERENCES(getContentFormat, WNDS, WNPS, RNDS, RNPS)

例外

なし。

イメージのコンテンツ・タイプを取得します。

DECLARE
 image ORDSYS.ORDImage;
 content_format VARCHAR2(4000);
BEGIN
 SELECT p.product_photo INTO image FROM pm.online_media p
  WHERE p.product_id = 3515;
 -- Get the image content format:
 content_format := image.getContentFormat();
 DBMS_OUTPUT.PUT_LINE('Content format is ' || content_format);
 COMMIT;
END;
/

10.5.7 getContentLength( )

構文

getContentLength( ) RETURN INTEGER;

説明

イメージ・オブジェクトのcontentLength属性の値を戻します。

パラメータ

なし。

使用上の注意

contentLength属性に直接アクセスすると、ORDImageオブジェクトの内部表現を変更してしまう可能性があるため、それを避けるためにこのメソッドを使用します。

プラグマ

PRAGMA RESTRICT_REFERENCES(getContentLength, WNDS, WNPS, RNDS, RNPS)

例外

なし。

イメージのコンテンツ長を取得します。

DECLARE
 image ORDSYS.ORDImage;
 content_length INTEGER;
BEGIN
 SELECT p.product_photo INTO image FROM pm.online_media p
  WHERE p.product_id = 3515;
 -- Get the image size:
 content_length := image.getContentLength();
 DBMS_OUTPUT.PUT_LINE('Content length is ' || content_length);
 COMMIT;
END;
/

10.5.8 getFileFormat( )

構文

getFileFormat( ) RETURN VARCHAR2;

説明

イメージ・オブジェクトのfileFormat属性の値を戻します。

パラメータ

なし。

使用上の注意

fileFormat属性に直接アクセスすると、ORDImageオブジェクトの内部表現を変更してしまう可能性があるため、それを避けるためにこのメソッドを使用します。

プラグマ

PRAGMA RESTRICT_REFERENCES(getFileFormat, WNDS, WNPS, RNDS, RNPS)

例外

なし。

イメージのファイル・タイプを取得します。

DECLARE
 image ORDSYS.ORDImage;
 file_format VARCHAR2(4000);
BEGIN
 SELECT p.product_photo INTO image FROM pm.online_media p
  WHERE p.product_id = 3515;
 -- Get the image file format:
 file_format := image.getFileFormat();
 DBMS_OUTPUT.PUT_LINE('File format is ' || file_format);
COMMIT;
END;
/

10.5.9 getHeight( )

構文

getHeight( ) RETURN INTEGER;

説明

イメージ・オブジェクトのheight属性の値を戻します。

パラメータ

なし。

使用上の注意

height属性に直接アクセスすると、ORDImageオブジェクトの内部表現を変更してしまう可能性があるため、それを避けるためにこのメソッドを使用します。

プラグマ

PRAGMA RESTRICT_REFERENCES(getHeight, WNDS, WNPS, RNDS, RNPS)

例外

なし。

イメージの高さを取得します。

DECLARE
 image ORDSYS.ORDImage;
 height INTEGER;
BEGIN
 SELECT p.product_photo INTO image FROM pm.online_media p
  WHERE p.product_id = 3515;
 -- Get the image height:
 height := image.getHeight();
 DBMS_OUTPUT.PUT_LINE('Height is ' || height);
 COMMIT;
END;
/

10.5.10 getMetadata( )

構文

getMetadata(metadataType IN VARCHAR2 DEFAULT 'ALL') RETURN XMLSequenceType ;

説明

指定したタイプのメタデータをイメージから抽出し、スキーマが妥当なXML文書の配列を戻します。一致するメタデータが検出されなかった場合は、空の配列が戻されます。

パラメータ

metadataType

抽出する埋込みメタデータのタイプを指定する文字列です。有効な値は、ALLORDIMAGEXMPEXIFおよびIPTC-IIMです。デフォルト値はALLです。

使用上の注意

入力パラメータmetadataTypeの値がALLで、2つ以上のタイプのサポートされるメタデータがイメージに存在する場合、このメソッドは複数のXML文書(検出されたメタデータのタイプごとに1つ)を戻します。入力パラメータの値が他の値の場合、このメソッドは0(ゼロ)または1つのXML文書を戻します。

各文書は、XMLTypeのインスタンスとして格納され、いずれかのメタデータ・スキーマに基づいていてます。XQuery関数のfn:namespace-uriを使用して、その文書に示されているメタデータのタイプを判別します。

サポートされるメタデータ・スキーマの詳細は、「Oracle MultimediaメタデータXMLスキーマ」を参照してください。

関連項目:

プラグマ

なし。

例外

ORDImageExceptions.NULL_LOCAL_DATA

この例外は、source.localData属性の値がNULLの場合に発生します。

ORDImageExceptions.NULL_SOURCE

この例外は、ORDImage.source属性の値がNULLの場合に発生します。

これらの例外の詳細は、「Oracle Multimediaオブジェクトの例外」を参照してください。

埋込みメタデータを抽出し、スキーマが妥当なXML文書の配列を戻します。

DECLARE 
  image ORDSYS.ORDImage; 
  metav XMLSequenceType; 
  ns    varchar2(4000);
BEGIN 
  SELECT product_photo 
  INTO image
  FROM pm.online_media 
  WHERE product_id = 3106;
  
  metav := image.getMetadata('ALL');
  
  -- print the namespace of each metadata document
  FOR i in 1..metav.count LOOP
    select xmlcast(xmlquery('fn:namespace-uri($x)'
          passing metav(i) as "x" returning content) as varchar2(4000))
      into ns from dual;
    DBMS_OUTPUT.PUT_LINE('namespace: ' || ns);
  END LOOP;
 
  EXCEPTION 
  WHEN ORDSYS.ORDImageExceptions.NULL_LOCAL_DATA THEN 
    DBMS_OUTPUT.PUT_LINE('source local data is null'); 
  WHEN ORDSYS.ORDImageExceptions.NULL_SOURCE THEN 
    DBMS_OUTPUT.PUT_LINE('source is null'); 
  WHEN OTHERS THEN
    RAISE;
END; /

10.5.11 getWidth( )

構文

getWidth( ) RETURN INTEGER;

説明

イメージ・オブジェクトのwidth属性の値を戻します。

パラメータ

なし。

使用上の注意

width属性に直接アクセスすると、ORDImageオブジェクトの内部表現を変更してしまう可能性があるため、それを避けるためにこのメソッドを使用します。

プラグマ

PRAGMA RESTRICT_REFERENCES(getWidth, WNDS, WNPS, RNDS, RNPS)

例外

なし。

イメージの幅を取得します。

DECLARE
 image ORDSYS.ORDImage;
 width INTEGER;
BEGIN
 SELECT p.product_photo INTO image FROM pm.online_media p
  WHERE p.product_id = 3515;
 -- Get the image width:
 width := image.getWidth();
 DBMS_OUTPUT.PUT_LINE('Width is ' || width);
 COMMIT;
END;
/

10.5.12 import( )

構文

 import(ctx IN OUT RAW);

説明

外部イメージ・データ・ソースからデータベース内の(埋込みORDSourceオブジェクトの) source.localData属性にイメージ・データを転送します。

パラメータ

ctx

ソース・プラグインのコンテキスト情報を指定します。このパラメータは、常に割り当てて、NULLに初期化する必要があります。ユーザー定義のソース・プラグインを使用する場合は、openSource( )メソッドをコールします。(「ORDImageのメソッドの重要な注意事項」を参照してください。)

使用上の注意

import( )メソッドをコールする前に、setSource( )メソッドを使用して、外部ソースの(埋込みORDSourceオブジェクトの) source.srcType、source.srcLocationおよびsource.srcName属性を設定します。

外部イメージ・データ・ソースからローカル・ソース(Oracleデータベース内)にデータをインポートした後も、ソース情報は変更されません(データのインポート元のソースを指したままです)。

このメソッドをコールすると、setUpdateTime( )およびsetLocal( )メソッドが暗黙的にコールされます。

インポートしたイメージのファイル・フォーマットに、OTHERで始まる文字列が事前に設定されていない場合は、setProperties( )メソッドもコールされます。外部イメージに対するsetProperties( )メソッドをコールすると、外部イメージ・フォーマット用にOTHERで始まる文字列がファイル・フォーマットに設定されます。

source.srcType属性の値がFILEの場合、source.srcLocation属性にはインポート対象のファイルを格納したデータベース・ディレクトリ・オブジェクトの名前が含まれ、source.srcName属性にはインポート対象のファイルの名前が含まれます。このメソッドを使用する前に、外部ソースの位置にディレクトリが存在するか、または作成されていることを確認する必要があります。

import( )メソッドは、ユーザーがアクセス権を持つデータベース・ディレクトリのオブジェクトからのみ読み取ります。つまり、SQL文のCREATE DIRECTORYを使用して作成したディレクトリ・オブジェクト、または読取り権限を付与されたディレクトリ・オブジェクトにアクセスできます。

たとえば、次のSQL*Plusコマンドを実行すると、ディレクトリ・オブジェクトが作成され、ディレクトリc:\mydir\work内の任意のファイルに対する読取り権限がユーザーronに付与されます。これらのコマンドを実行する前に、ディレクトリ・オブジェクトを作成する権限を持ったユーザーとして接続しておく必要があります。

CREATE OR REPLACE DIRECTORY FILE_DIR AS 'c:\mydir\work';
GRANT READ ON DIRECTORY FILE_DIR TO ron;

ディレクトリおよび表の定義の詳細は、「ORDImageオブジェクトの例」を参照してください。

source.srcType属性の値がHTTPの場合、source.srcLocation属性にはインポート対象のオブジェクトを格納したディレクトリを検索するために必要なベースURLが含まれ、source.srcName属性にはインポート対象のオブジェクトの名前が含まれます。

このメソッドは、PL/SQL UTL_HTTPパッケージを使用して、HTTPデータ・ソースからメディア・データをインポートします。環境変数を使用して、UTL_HTTPパッケージのプロキシの動作を指定できます。たとえば、LinuxおよびUNIXの場合、環境変数http_proxyをURLに設定すると、UTL_HTTPパッケージはそのURLをHTTPリクエスト用のプロキシ・サーバーとして使用する必要があります。環境変数no_proxyをドメイン名に設定すると、HTTPプロキシ・サーバーは指定したドメイン内のURLには使用されません。

関連項目:

UTL_HTTPパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください

source.srcType属性の値がユーザー定義の名前の場合、source.srcLocation属性にはインポート対象のユーザー定義オブジェクトにアクセスするために必要な識別子文字列が含まれ、source.srcName属性にはインポート対象のオブジェクトの名前が含まれます。

プラグマ

なし。

例外

ORDImageExceptions.NULL_SOURCE

この例外は、ORDImage.source属性の値がNULLの場合に発生します。

ORDSourceExceptions.INCOMPLETE_SOURCE_INFORMATION

この例外は、import( )メソッドをコールし、source.srcType属性の値がNULLの場合に発生します。

ORDSourceExceptions.METHOD_NOT_SUPPORTED

この例外は、import( )メソッドをコールし、使用するソース・プラグインがこのメソッドをサポートしていない場合に発生します。

これらの例外の詳細は、「Oracle Multimediaオブジェクトの例外」を参照してください。

外部イメージ・データ・ソースからローカル・ソースにイメージ・データをインポートします。

DECLARE
 obj ORDSYS.ORDImage;
 ctx RAW(64) :=NULL;
BEGIN
 SELECT p.product_photo INTO obj FROM pm.online_media p 
  WHERE p.product_id  = 3515 FOR UPDATE;
 DBMS_OUTPUT.PUT_LINE('getting source');
 DBMS_OUTPUT.PUT_LINE('--------------------------');
 -- Get source information
 DBMS_OUTPUT.PUT_LINE(obj.getSource());
 -- Import data
 obj.import(ctx);
 -- Check size
 DBMS_OUTPUT.PUT_LINE('Length is ' || obj.getContentLength());
 UPDATE pm.online_media p SET p.product_photo = obj WHERE p.product_id = 3515;
 COMMIT;
END;
/

10.5.13 importFrom( )

構文

importFrom(ctx              IN OUT RAW,
           source_type      IN VARCHAR2,
           source_location  IN VARCHAR2,
           source_name      IN VARCHAR2);

説明

指定された外部イメージ・データ・ソースからデータベース内の(埋込みORDSourceオブジェクトの)source.localData属性にイメージ・データを転送します。

パラメータ

ctx

ソース・プラグインのコンテキスト情報を指定します。このパラメータは、常に割り当てて、NULLに初期化する必要があります。ユーザー定義のソース・プラグインを使用する場合は、openSource( )メソッドをコールします。(「ORDImageのメソッドの重要な注意事項」を参照してください。)

source_type

ソース・イメージ・データのタイプを指定します。(表7-1を参照してください。)

source_location

インポート元のソース・イメージ・データの位置を指定します。(表7-2を参照してください。)

source_name

ソース・イメージ・データの名前を指定します。(表7-3を参照してください。)

使用上の注意

このメソッドは、ソース情報を個別に指定せずにパラメータで指定すること以外は、import( )メソッドと同じです。

外部イメージ・データ・ソースからローカル・ソース(Oracleデータベース内)にデータをインポートすると、(データのインポート元のソースを指している)ソース情報は入力値に設定されます。

このメソッドをコールすると、setUpdateTime( )およびsetLocal( )メソッドが暗黙的にコールされます。

インポートしたイメージのファイル・フォーマットに、OTHERで始まる文字列が事前に設定されていない場合は、setProperties( )メソッドもコールされます。外部イメージに対するsetProperties( )メソッドをコールすると、外部イメージ・フォーマット用にOTHERで始まる文字列がファイル・フォーマットに設定されます。

source_typeパラメータの値がFILEの場合、source_locationパラメータにはインポート対象のファイルを格納したデータベース・ディレクトリ・オブジェクトの名前が含まれ、source_nameパラメータにはインポート対象のファイルの名前が含まれます。このメソッドを使用する前に、source_locationパラメータで指定したディレクトリが存在するか、または作成されていることを確認する必要があります。

importFrom( )メソッドは、ユーザーがアクセス権を持つデータベース・ディレクトリのオブジェクトからのみ読み取ります。つまり、SQL文のCREATE DIRECTORYを使用して作成したディレクトリ・オブジェクト、または読取り権限を付与されたディレクトリ・オブジェクトにアクセスできます。

たとえば、次のSQL*Plusコマンドを実行すると、ディレクトリ・オブジェクトが作成され、ディレクトリc:\mydir\work内の任意のファイルに対する読取り権限がユーザーronに付与されます。これらのコマンドを実行する前に、ディレクトリ・オブジェクトを作成する権限を持ったユーザーとして接続しておく必要があります。

CREATE OR REPLACE DIRECTORY FILE_DIR AS 'c:\mydir\work';
GRANT READ ON DIRECTORY FILE_DIR TO ron;

ディレクトリおよび表の定義の詳細は、「ORDImageオブジェクトの例」を参照してください。

source_typeパラメータの値がHTTPの場合、source_locationパラメータにはインポート対象のオブジェクトを格納したディレクトリを検索するために必要なベースURLが含まれ、source_nameパラメータにはインポート対象のオブジェクトの名前が含まれます。

このメソッドは、PL/SQL UTL_HTTPパッケージを使用して、HTTPデータ・ソースからメディア・データをインポートします。環境変数を使用して、UTL_HTTPパッケージのプロキシの動作を指定できます。たとえば、LinuxおよびUNIXの場合、環境変数http_proxyをURLに設定すると、UTL_HTTPパッケージはそのURLをHTTPリクエスト用のプロキシ・サーバーとして使用する必要があります。環境変数no_proxyをドメイン名に設定すると、HTTPプロキシ・サーバーは指定したドメイン内のURLには使用されません。

関連項目:

UTL_HTTPパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください

source_typeパラメータの値がユーザー定義の名前の場合、source_locationパラメータにはインポート対象のユーザー定義オブジェクトにアクセスするために必要な識別子文字列が含まれ、source_nameパラメータにはインポート対象のオブジェクトの名前が含まれます。

プラグマ

なし。

例外

ORDImageExceptions.NULL_SOURCE

この例外は、ORDImage.source属性の値がNULLの場合に発生します。

ORDSourceExceptions.METHOD_NOT_SUPPORTED

この例外は、importFrom( )メソッドをコールし、使用するソース・プラグインがこのメソッドをサポートしていない場合に発生します。

これらの例外の詳細は、「Oracle Multimediaオブジェクトの例外」を参照してください。

指定した外部データ・ソースからローカル・ソースにイメージ・データをインポートします。

DECLARE
 obj ORDSYS.ORDImage;
 ctx RAW(64) :=NULL;
BEGIN
 SELECT p.product_photo INTO obj FROM pm.online_media p 
  WHERE p.product_id  = 3501 FOR UPDATE;
 -- set source to a file
 -- import data
 obj.importFrom(ctx,'file','FILE_DIR','speaker.jpg');
 -- check size
 DBMS_OUTPUT.PUT_LINE('Length is ' || obj.getContentLength());
 DBMS_OUTPUT.PUT_LINE('Source is ' || obj.getSource());
 UPDATE pm.online_media p SET p.product_photo = obj WHERE p.product_id = 3501;
 COMMIT;
END;
/

10.5.14 process( )

構文

process(command IN VARCHAR2);

説明

BLOB上でイメージ処理操作を実行し、イメージを上書きします。

パラメータ

command

実行するイメージ処理操作のリストを指定します。

使用上の注意

このメソッドをコールしても、import( )またはimportFrom( )の暗黙的なコールは実行されません。データが外部に存在する場合、処理の前にまずimport( )またはimportFrom( )メソッドをコールして、データをローカルに移す必要があります。

process( )メソッドをコールすると、setProperties( )、setUpdateTime( )およびsetMimeType( )メソッドが暗黙的にコールされます。

表10-1に示す1つ以上のイメージ属性を変更できます。

表10-1 イメージ処理演算子

演算子名 用途

compressionFormat

指定された圧縮フォーマットが出力ファイル・フォーマットでサポートされている場合、その圧縮フォーマットで強制的に出力します。(compressionFormatを参照)

JPEG、SUNRLE、BMPRLE、TARGARLE、LZW、LZWHDIFF、FAX3、FAX4、HUFFMAN3、PACKBITS、GIFLZW、ASCII、RAW、DEFLATE、NONE

compressionQuality

不可逆圧縮の品質を指定します。JPEGのみに有効です。(compressionQualityを参照)

MAXCOMPRATIO、MAXINTEGRITY、LOWCOMP、MEDCOMP、HIGHCOMP、または0から100の整数

contentFormat

イメージ・コンテンツのフォーマットを指定します。(contentFormatを参照)

値は「contentFormat」を参照

contrast

イメージのコントラストを調整します。(contrastを参照してください。)脚注1

FLOAT (負ではない数)脚注2、FLOAT FLOAT FLOAT (負ではない数)脚注3、FLOAT FLOAT (負ではない数)脚注2、FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT (負ではない数)脚注4

cut

カットまたはトリミングするウィンドウ(起点.x 起点.y 幅 高さ)を定義します。xまたはyの最初のピクセルは0(ゼロ)です。イメージの内側でウィンドウを定義する必要があります。(cutを参照)

INTEGER INTEGER INTEGER INTEGER (負ではない数)。最大値は2147483648

fileFormat

指定されたファイル・フォーマットで強制的に出力します。(fileFormatを参照)

BMPF、CALS、GIFF、JFIF、PBMF、PGMF、PICT、PNGF、PNMF、PPMF、RASF、RPIX、TGAF、TIFF、WBMP

fixedScale

ピクセル単位で指定されたサイズ(幅、高さ)にイメージを変更します。他のスケール演算子と組み合せることはできません。(fixedScaleを参照)

INTEGER INTEGER (正の数)

flip

イメージの走査線を逆(下から上)に順序付けします。(flipを参照)

引数なし

gamma

イメージのガンマ(輝度)を調整します。(gammaを参照)脚注1

FLOAT (正の数)脚注2、FLOAT FLOAT FLOAT (正の数)脚注5

maxScale

アスペクト比を保持したまま、ピクセル単位で指定されたサイズ(幅、高さ)にイメージを変更します。他のスケール演算子と組み合せることはできません。(maxScaleを参照)

INTEGER INTEGER (正の数)

mirror

イメージの列を逆(右から左)に順序付けします。(mirrorを参照)

引数なし

nometadata

結果イメージでイメージのメタデータをエンコーディングせずにイメージを処理します。(nometadataを参照)

引数なし

page

複数ページのファイルでページを選択します。TIFFのみに有効です。最初のページは0(ゼロ)です。(pageを参照)

INTEGER (負ではない数)

quantize

イメージのビット深度を下げる際にイメージを量子化する方法を指定します。(quantizeを参照)

ERRORDIFFUSION(デフォルト)、ORDEREDDITHER、THRESHOLD、MEDIANCUT

rotate

指定された角度に基づいてイメージ・プレーン内でイメージを回転します。(rotateを参照)脚注1

FLOAT

scale

イメージを係数(0.5、2.0など)によって均等にスケール変更します。他のスケール演算子と組み合せることはできません。(scaleを参照)脚注1

FLOAT (正の数)

sharpen

イメージを指定されたカーネル・タイプとゲイン係数(0と2.0など)によって鮮鋭化します。スケール演算子と組み合せることはできません。(sharpenを参照)脚注1

INTEGER (正の数)、FLOAT (正の数)

tiled

出力イメージを強制的にタイル処理します。TIFFのみに有効です。(tiledを参照)

引数なし

transparencyFillColor

PNGイメージ・ファイル・フォーマットの透明な領域を色で塗りつぶします。(transparencyFillColorを参照)

BLACK、BLUE、CYAN、DARK_GRAY、GRAY、GREEN、LIGHT_GRAY、MAGENTA、ORANGE、PINK、RED、WHITE、YELLOW、またはINTEGER INTEGER INTEGER (負ではない数)

xScale

イメージを係数(デフォルトは1)によってX軸方向にスケール変更します。イメージのスケール変更の比率は均等ではありません。yScale演算子とのみ組み合せて使用できますが、それ以外のスケール演算子と組み合せることはできません。(xScaleを参照)脚注1

FLOAT (正の数)

yScale

イメージを係数(デフォルトは1)によってY軸方向にスケール変更します。イメージのスケール変更の比率は均等ではありません。xScale演算子とのみ組み合せて使用できますが、それ以外のスケール演算子と組み合せることはできません。(yScaleを参照)脚注1

FLOAT (正の数)

脚注1

グローバリゼーション・サポートで正しく解釈されるように、浮動小数点の引数を二重引用符で囲んでください。

脚注2

すべてのバンドに適用されるコントラスト強調の度合い(パーセント単位)を指定します(GRAYまたはRGB)

脚注3

各バンドに適用されるコントラスト強調の度合い(パーセント単位)を指定します(RGBのみ)

脚注4

各バンドに適用されるコントラスト強調の境界を指定します(RGBのみ)

脚注5

各バンドに適用される個別のガンマ値を指定します(RGBのみ)

注意:

セッションのNLS_TERRITORY設定に基づいて浮動小数点数値が解釈されるように、値を二重引用符("")で囲んでください。たとえば、AMERICAN地域では'scale="0.7"'を、FRENCH地域では'scale="0,7"'を使用します。

表10-2には、ロー・ピクセルおよび外部イメージに対してのみ追加で変更可能な演算子を示します。

表10-2 ロー・ピクセルおよび外部イメージの追加イメージ処理演算子

演算子名 用途

channelOrder

イメージ内の赤、緑、青のチャネル(バンド)の相対位置を示します。出力チャネルの順序を変更します。RPIXのみに有効です。(channelOrderを参照)

RGB(デフォルト)、RBG、GRB、GBR、BRG、BGR

inputChannels

マルチバンド・イメージの場合、1つの整数(グレースケール)か、または赤(1番目)、緑(2番目)、青(3番目)に割り当てるチャネルを示す3つの整数を指定します。この演算子は、宛先ではなくソース・イメージに影響します(RPIXのみ)。(inputChannelsを参照)

INTEGER (正の数)脚注6、INTEGER INTEGER INTEGER (正の数)脚注7

pixelOrder

ピクセルの方向を強制します。NORMALの場合、イメージの左端のピクセルが先頭になります。RPIXのみに有効です。(pixelOrderを参照)

NORMAL (デフォルト)、REVERSE

scanlineOrder

走査線の方向を強制します。NORMALの場合、イメージの上端の走査線が先頭になります。RPIXおよびBMPFのみに有効です。(scanlineOrderを参照)

NORMAL (デフォルト)、INVERSE

脚注6

入力イメージから1つのバンドを選択して、そのバンドがグレースケール出力イメージの作成に使用されるように指定します

脚注7

入力イメージから3つのバンドを選択して、それらのバンドがRGB出力イメージの赤、緑および青バンドに使用されるように指定します

process( )メソッドの演算子の詳細は、「Oracle Multimediaイメージ処理」を参照してください。

プラグマ

なし。

例外

ORDImageExceptions.DATA_NOT_LOCAL

この例外は、process( )メソッドをコールし、データがローカルではない(source.local属性が0(ゼロ)である)場合に発生します。

ORDImageExceptions.NULL_SOURCE

この例外は、ORDImage.source属性の値がNULLの場合に発生します。

これらの例外の詳細は、「Oracle Multimediaオブジェクトの例外」を参照してください。

例1:

image1のファイル・フォーマットをGIFFに変更します。

DECLARE
 obj ORDSYS.ORDImage;
BEGIN
 SELECT product_photo INTO obj FROM pm.online_media
  WHERE product_id = 3515 FOR UPDATE;
 obj.process('fileFormat=GIFF');
 -- Update 
 UPDATE pm.online_media SET product_photo = obj WHERE product_id = 3515;
 -- Roll back to keep original format of image:
 ROLLBACK;
 EXCEPTION
  WHEN ORDSYS.ORDImageExceptions.DATA_NOT_LOCAL THEN
   DBMS_OUTPUT.PUT_LINE('Data is not local');
END;
/

例2:

image1をMAXCOMPRATIOのJPEG圧縮フォーマットに変更し、イメージの長さをX軸方向に倍にします。

DECLARE
 obj ORDSYS.ORDImage;
BEGIN
 SELECT product_photo INTO obj FROM pm.online_media
  WHERE product_id = 3515 FOR UPDATE;
  obj.process(
       'compressionFormat=JPEG,compressionQuality=MAXCOMPRATIO, xScale="2.0"'); 
 -- Update: 
 UPDATE pm.online_media SET product_photo = obj WHERE product_id = 3515;
 -- Roll back to keep original format of image:
 ROLLBACK;
 EXCEPTION
  WHEN ORDSYS.ORDImageExceptions.DATA_NOT_LOCAL THEN
   DBMS_OUTPUT.PUT_LINE('Data is not local');
END;
/

注意:

一方の軸の長さを変更しても(xScale=2.0など)他方の軸の長さは影響を受けず、その結果、イメージがゆがむことに注意してください。また、1回のスケール操作では、xScaleとyScaleパラメータのみを組み合せることができます。それ以外のスケール演算子の組合せではエラーが発生します。

例3:

縮小イメージを作成します。

maxScaleおよびfixedScale演算子は、様々なサイズの元のイメージから縮小イメージを作成する場合に特に便利です。次の例では、元のアスペクト比を保持したまま32×32ピクセルの縮小イメージを作成します。

DECLARE
 obj ORDSYS.ORDImage;
BEGIN
 SELECT product_photo INTO obj FROM pm.online_media
  WHERE product_id = 3515 FOR UPDATE;
 obj.process('maxScale=32 32');
 UPDATE pm.online_media p SET product_thumbnail = obj 
  WHERE product_id = 3515;
 COMMIT;
 EXCEPTION
  WHEN ORDSYS.ORDImageExceptions.DATA_NOT_LOCAL THEN
   DBMS_OUTPUT.PUT_LINE('Data is not local');
END;
/

例4:

フォーマットをTIFFに変更し、コンテンツ・フォーマットを8BIT、BIPピクセル・レイアウト、LUT解釈およびRGB色領域に変更します。

DECLARE
 obj ORDSYS.ORDImage;
BEGIN
 SELECT product_photo INTO obj FROM pm.online_media
  WHERE product_id = 3515 FOR UPDATE;
 obj.process('fileFormat=TIFF, contentFormat=8BITBIPLUTRGB');
 UPDATE pm.online_media SET product_photo = obj WHERE product_id = 3515;
 -- Roll back to keep original format of image:
 ROLLBACK;
 EXCEPTION
  WHEN ORDSYS.ORDImageExceptions.DATA_NOT_LOCAL THEN
   DBMS_OUTPUT.PUT_LINE('Data is not local');
END;
/

10.5.15 processCopy( )

構文

processCopy(command IN VARCHAR2,
            dest    IN OUT ORDImage);

説明

(埋込みORDSourceオブジェクトの) source.LocalData属性のイメージを読み取り、そのイメージに1つ以上のイメージ処理操作を実行して、結果イメージを宛先ORDImageオブジェクトに格納します。ソースORDImageオブジェクトの元のイメージ・コンテンツは変更されません。

パラメータ

command

宛先イメージで実行するイメージ処理変更操作のリストです。

dest

新しいイメージのコピー先を指定します。

使用上の注意

同じORDImageをソースおよびコピー先の両方に指定することはできません。

このメソッドをコールすると、ソース(ローカルまたは外部)からイメージがコピー先BLOBにコピーされます。

processCopy( )メソッドをコールすると、setProperties( )、setUpdateTime( )およびsetMimeType( )メソッドが暗黙的に宛先イメージに適用されます。

イメージ処理演算子の詳細は、「process( )」の特に表10-1および表10-2を参照してください。

processCopy( )メソッドの演算子の詳細は、「Oracle Multimediaイメージ処理」を参照してください。

プラグマ

なし。

例外

ORDImageExceptions.DATA_NOT_LOCAL

この例外は、processCopy( )メソッドをコールし、宛先イメージのsource.local属性の値が0か、または宛先のsource.localData属性が初期化されていない場合に発生します。

ORDImageExceptions.NULL_DESTINATION

この例外は、processCopy( )メソッドをコールし、コピー先イメージの値がNULLの場合に発生します。

ORDImageExceptions.NULL_LOCAL_DATA

この例外は、processCopy( )メソッドをコールし、宛先イメージのsource.localData属性の値がNULLの場合に発生します。この例外は、processCopy( )メソッドをコールし、ソース・イメージのsource.local属性の値が1またはNULLで、source.localData属性の値がNULLの場合にも発生します。

ORDImageExceptions.NULL_SOURCE

この例外は、ソース・イメージのsource属性の値がNULLの場合に発生します。

これらの例外の詳細は、「Oracle Multimediaオブジェクトの例外」を参照してください。

ソース・イメージから縮小イメージを生成します。

DECLARE
 obj_1 ORDSYS.ORDImage;
 obj_2 ORDSYS.ORDImage;
 
BEGIN
 SELECT product_photo, product_thumbnail INTO obj_1, obj_2 
  FROM pm.online_media
  WHERE product_id = 3515 FOR UPDATE;
  obj_1.processCopy('maxScale=32 32', obj_2);
 UPDATE pm.online_media SET product_thumbnail = obj_2 
  WHERE product_id=3515;
 COMMIT;
EXCEPTION
  WHEN ORDSYS.ORDImageExceptions.NULL_DESTINATION THEN
   DBMS_OUTPUT.PUT_LINE('The destination is null');
  WHEN ORDSYS.ORDImageExceptions.DATA_NOT_LOCAL THEN
   DBMS_OUTPUT.PUT_LINE('Data is not local');
  WHEN ORDSYS.ORDImageExceptions.NULL_LOCAL_DATA THEN
   DBMS_OUTPUT.PUT_LINE('dest.source.localData attribute is null');
COMMIT;
END;
/

10.5.16 putMetadata( )

構文

putMetadata(xmlData      IN NOCOPY XMLType,
            metadataType IN VARCHAR2 DEFAULT 'XMP'
            encoding     IN VARCHAR2 DEFAULT 'UTF-8');

説明

スキーマが妥当なXML文書を受け入れ、ターゲット・イメージのファイル・フォーマットへの埋込みに適したバイナリ・パケットを作成します。このパケットは、エンコーディング・パラメータの値に基づいてエンコードされます。metadataTypeパラメータの値がXMPの場合、このメソッドは新しいXMPパケットをイメージに書き込み、既存のXMPパケットを置き換えます。

パラメータ

xmlData

指定したmetadataTypeに対してスキーマが妥当なXML文書を含むXMLTypeを指定します。metadataTypeパラメータの値がXMPの場合は、ルート要素に整形式RDF文書が含まれている必要があります。

metadataType

書き込むメタデータのタイプを指定する文字列です。有効な値はXMPで、この値がデフォルトです。

encoding

イメージ・ファイルで使用される文字コードを指定します。有効な値は、UTF-8UTF-16UTF-16BEおよびUTF-16LEです。デフォルトはUTF-8です。

使用上の注意

同じxmlData入力から生成されたバイナリ・メタデータ・パケットのサイズは、エンコーディングによって異なる場合があります。サポートされるエンコーディングはイメージ・ファイル・フォーマットによって異なり、バイナリ・メタデータ・パケットのサイズが制限される場合があります。サポートされるイメージ・フォーマットの制限は、次のとおりです。

  • GIF89aは、UTF-8エンコーディングのみをサポートします。

  • JPEGのバイナリ・パケットのサイズは、65502バイトより小さくする必要があります。

  • TIFFのバイナリ・パケットのサイズは、4GBより小さくする必要があります。

関連項目:

メタデータの機能の詳細は、『Oracle Multimediaユーザーズ・ガイド』を参照してください

プラグマ

なし。

例外

ORDImageExceptions.DATA_NOT_LOCAL

この例外は、データがローカルに存在しない場合(source.local属性が0(ゼロ)の場合)に発生します。

ORDImageExceptions.NULL_LOCAL_DATA

この例外は、source.localData属性の値がNULLの場合に発生します。

ORDImageExceptions.NULL_SOURCE

この例外は、ORDImage.source属性の値がNULLの場合に発生します。

これらの例外の詳細は、「Oracle Multimediaオブジェクトの例外」を参照してください。

pm.online_media表のORDImageオブジェクトを、更新されたXMPメタデータを含む新しいORDImageに置き換えます。

DECLARE
  image     ORDSYS.ORDImage;
  xmlData   XMLType;
BEGIN
  SELECT product_photo 
  INTO image
  FROM pm.online_media
  WHERE product_id = 3106 FOR UPDATE; 
 
  xmlData := xmltype(
       '<xmpMetadata xmlns="http://xmlns.oracle.com/ord/meta/xmp">' ||
       '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"' ||
       '  xmlns:dc="http://purl.org/dc/elements/1.1/">' ||
       '<dc:rights>' ||
       '  <rdf:Alt>' ||
       '    <rdf:li xml:lang="en-us">' ||
       '      Oracle Corporation' ||
       '    </rdf:li>' ||
       '  </rdf:Alt>'||
       '</dc:rights>' ||
       '</rdf:RDF>' ||
       '</xmpMetadata>', 'http://xmlns.oracle.com/ord/meta/xmp'); 
 
  image.putMetadata(xmlData, 'xmp', 'utf-8'); 
 
  UPDATE pm.online_media 
  SET product_photo = image 
  WHERE product_id=3106;
  COMMIT;
 
  EXCEPTION
    WHEN ORDSYS.ORDImageExceptions.DATA_NOT_LOCAL THEN
      DBMS_OUTPUT.PUT_LINE('Data is not local');
    WHEN ORDSYS.ORDImageExceptions.NULL_LOCAL_DATA THEN
      DBMS_OUTPUT.PUT_LINE('source.localData attribute is null');
    WHEN ORDSYS.ORDImageExceptions.NULL_SOURCE THEN
      DBMS_OUTPUT.PUT_LINE('source is null');
    WHEN OTHERS THEN
      RAISE;
    END;/

10.5.17 setProperties( )

構文

setProperties( );

説明

イメージ・データを読み取ってオブジェクト属性の値を取得し、適切な属性フィールドに格納します。イメージ・データは、データベースのsource.localData属性に格納するか、外部的にBFILEまたはURLに格納できます。データが外部でBFILE以外に格納される場合、データは一時BLOBに読み取られてイメージ特性が判断されます。

このメソッドは、外部イメージにはコールしないでください。かわりに、外部イメージに対するsetProperties( )メソッドを使用します。

パラメータ

なし。

使用上の注意

ネイティブ・フォーマットのイメージのコピー、格納または処理を行った後で、このメソッドをコールして、新しいコンテンツの現在の特性を設定します。このメソッドが暗黙的にコールされる場合はその必要はありません。

このメソッドを使用して、イメージに関する次の情報を設定します。

  • ピクセル単位の高さ

  • ピクセル単位の幅

  • ディスク上のイメージのバイト単位のデータ・サイズ

  • ファイル・タイプ(TIFF、JFIFなど)

  • イメージ・タイプ(モノクロなど)

  • 圧縮タイプ(JPEG、LZWなど)

  • MIMEタイプ(ファイル・フォーマットに基づいて生成)

このメソッドをコールすると、setUpdateTime( )およびsetMimeType( )メソッドが暗黙的にコールされます。

プラグマ

なし。

例外

ORDImageExceptions.NULL_LOCAL_DATA

この例外は、setProperties( )メソッドをコールし、source.local属性の値が1またはNULLで、source.localData属性の値がNULLの場合に発生します。

ORDImageExceptions.NULL_SOURCE

この例外は、ORDImage.source属性の値がNULLの場合に発生します。

これらの例外の詳細は、「Oracle Multimediaオブジェクトの例外」を参照してください。

イメージを選択し、その後にsetProperties( )メソッドで属性を設定します。

DECLARE
 image ORDSYS.ORDImage;
BEGIN
 SELECT p.product_photo INTO image FROM pm.online_media p
  WHERE p.product_id = 3515 FOR UPDATE;
 -- set property attributes for the image data
 image.setProperties();
 DBMS_OUTPUT.PUT_LINE('image width = ' || image.getWidth());
 DBMS_OUTPUT.PUT_LINE('image height = ' || image.getHeight());
 DBMS_OUTPUT.PUT_LINE('image size = ' || image.getContentLength());
 DBMS_OUTPUT.PUT_LINE('image file type = ' || image.getFileFormat());
 DBMS_OUTPUT.PUT_LINE('image type = ' || image.getContentFormat());
 DBMS_OUTPUT.PUT_LINE('image compression = ' || image.getCompressionFormat());
 DBMS_OUTPUT.PUT_LINE('image mime type = ' || image.getMimeType());
 UPDATE pm.online_media p SET p.product_photo = image 
   WHERE p.product_id = 3515;
 COMMIT;
END;
/

10.5.18 外部イメージに対するsetProperties( )

構文

setProperties(description IN VARCHAR2);

説明

Oracle Multimediaによってネイティブに認識されないフォーマットの特定の外部イメージの特性を、適切な属性フィールドに書き込みます。

パラメータ

description

外部イメージに設定するイメージ特性を指定します。

使用上の注意

注意:

外部イメージのプロパティを一度設定すると、その後のプロパティの一貫性はユーザーが管理する必要があります。Oracle Multimediaで不明なファイル・フォーマットが検出された場合、プロパティは暗黙的に設定されません。

外部イメージ・サポートを使用する場合の詳細は、「Oracle Multimediaで使用するイメージ・ロー・ピクセル・フォーマット」を参照してください。このsetProperties( )メソッドを使用して記述できるフォーマットは、ネイティブに認識されない一部のフォーマットのみです。

外部イメージのコピー、格納または処理を行った後、このメソッドをコールし、新しいイメージ・コンテンツの特性を設定します。「Oracle Multimediaで使用するイメージ・ファイル・フォーマットおよび圧縮形式」で説明するネイティブ・イメージ・タイプとは異なり、外部イメージにはファイルのビットを解釈する方法についての情報がないか、Oracle Multimediaでその情報を認識できません。この場合、情報は明示的に設定する必要があります。

表10-3に、外部イメージに設定可能なイメージ特性を示します。

表10-3 外部ファイルのイメージ特性

フィールド データ型 説明

CompressionFormat

STRING

圧縮フォーマットの値を指定します。有効な値は、CCITTG3CCITTG4NONE (デフォルト)です。

DataOffset

INTEGER

Oracle Multimediaでは解釈されないオフセット(ファイルの先頭からイメージ・データの先頭まで)を指定します。オフセットを設定すると、ヘッダーになる可能性がある部分をスキップできます。値はLOB長より小さい負ではない整数を設定します。デフォルトはゼロです。

DefaultChannelSelection

INTEGERまたは

INTEGER, INTEGER, INTEGER

マルチバンド・イメージで、イメージが読取りまたは処理される際に、カラー・チャネルとして解釈されるバンドを指定します。1つの整数を指定した場合、イメージは、指定したバンドのみのデータを含むグレースケール・イメージとして扱われます。3つの整数を指定した場合、イメージはRGBイメージとして扱われ、指定した先頭のバンドが赤チャネル、2番目が緑チャネル、3番目が青チャネルに使用されます。イメージの先頭のバンドには、1の番号が付けられます。指定するバンドの番号はイメージのバンド数以下である必要があります。

次に例を示します。

  • DefaultChannelSelection = 1と指定すると、イメージの先頭のバンドがグレースケール・イメージとして解釈されます。

  • DefaultChannelSelection = 4と指定すると、イメージの4番目のバンドがグレースケール・イメージとして解釈されます。

  • DefaultChannelSelection = 1, 2, 3と指定すると、イメージはRGBとして解釈され、イメージの先頭の3つのバンドがそれぞれ赤、緑および青チャネルとして使用されます。

  • DefaultChannelSelection = 3, 1, 4と指定すると、イメージはRGBとして解釈され、イメージの3番目、1番目および4番目のバンドがそれぞれ赤、緑および青チャネルとして使用されます。

Height

INTEGER

イメージの高さをピクセル単位で指定します。値は正整数である必要があります。デフォルトはないため、値は必ず指定する必要があります。

インターリーブ

STRING

イメージ内のバンド・レイアウトを指定します。有効なスタイルは次のとおりです。

  • BIP(デフォルト): ピクセル単位のバンド・インターリーブ

  • BIL: 行単位のバンド・インターリーブ

  • BSQ: 順次バンド

NumberOfBands

INTEGER

255より小さい正の整数値で、イメージ内のカラー・バンド数を指定します。デフォルトは3です。

PixelOrder

STRING

ピクセル順序を示す文字列を指定します。文字列がNORMAL(デフォルト)の場合、左端のピクセルがファイルの先頭になります。文字列がREVERSEの場合、右端のピクセルが先頭になります。

ScanlineOrder

STRING

走査線順序を示す文字列を指定します。文字列がNORMAL(デフォルト)の場合、上端の走査線がファイルの先頭になります。文字列がINVERSEの場合は、下端の走査線が先頭になります。

UserString

STRING

4文字で記述する文字列を指定します。使用する場合、文字列はfileFormat属性に格納され、ユーザー文字列「OTHER:」に追加されます。デフォルトは空白で、fileFormatは「OTHER」に設定されます。

Width

INTEGER

イメージの幅をピクセル単位で指定します。値は正整数である必要があります。デフォルトはないため、値は必ず指定する必要があります。

MimeType

STRING

img/gifなどのMIMEタイプを指定します。

外部イメージに対するsetProperties( )メソッドに渡される値は、既存のORDImageデータ属性に書き込まれます。fileFormat属性はOTHERに設定され、指定がある場合はユーザー文字列が含まれます(たとえば、OTHER: LANDSATなど)。

プラグマ

なし。

例外

ORDImageExceptions.NULL_PROPERTIES_DESCRIPTION

この例外は、外部イメージに対するsetProperties( )メソッドをコールし、descriptionパラメータの値がNULLの場合に発生します。

この例外の詳細は、「Oracle Multimediaオブジェクトの例外」を参照してください。

外部イメージを選択し、その後にイメージのプロパティを設定します。

DECLARE
    obj ORDSYS.ORDImage;
BEGIN
 SELECT p.product_photo INTO obj FROM pm.online_media p
  WHERE p.product_id = 3501 FOR UPDATE;
 -- Set property attributes for the image data:
 obj.setProperties('width=123 height=321 compressionFormat=NONE' ||
                     ' userString= LANDSTAT dataOffset=128' || 
                     ' scanlineOrder=INVERSE pixelOrder=REVERSE' ||
                     ' interleaving=BIL numberOfBands=1' ||
                     ' defaultChannelSelection=1');
 UPDATE pm.online_media SET product_photo = obj 
   WHERE product_id=3501;
 COMMIT;
END;
/