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.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オブジェクトにコピーされます。
パラメータ
プラグマ
なし。
例外
なし。
使用上の注意
イメージ・コンテンツが一時または永続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
-
ソース・イメージ・データのタイプを指定します。有効な値は、
FILE
、HTTP
、LOCAL
またはユーザー定義です。デフォルトは、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);
説明
イメージを変更せずにコピーします。
使用上の注意
このメソッドは、すべてのソースおよびイメージ属性を含めて、指定したローカルの宛先イメージにイメージ・データをそのままコピーします。
データがソースにローカルに格納されている場合、このメソッドをコールするとコピー先の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の値がALL
で、2つ以上のタイプのサポートされるメタデータがイメージに存在する場合、このメソッドは複数のXML文書(検出されたメタデータのタイプごとに1つ)を戻します。入力パラメータの値が他の値の場合、このメソッドは0(ゼロ)または1つのXML文書を戻します。
各文書は、XMLTypeのインスタンスとして格納され、いずれかのメタデータ・スキーマに基づいていてます。XQuery関数のfn:namespace-uri
を使用して、その文書に示されているメタデータのタイプを判別します。
サポートされるメタデータ・スキーマの詳細は、「Oracle MultimediaメタデータXMLスキーマ」を参照してください。
関連項目:
-
メタデータの機能の詳細は、『Oracle Multimediaユーザーズ・ガイド』を参照してください
-
XQuery関数の詳細は、『Oracle XML DB開発者ガイド』を参照してください
プラグマ
なし。
例外
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上でイメージ処理操作を実行し、イメージを上書きします。
使用上の注意
このメソッドをコールしても、import( )またはimportFrom( )の暗黙的なコールは実行されません。データが外部に存在する場合、処理の前にまずimport( )またはimportFrom( )メソッドをコールして、データをローカルに移す必要があります。
process( )メソッドをコールすると、setProperties( )、setUpdateTime( )およびsetMimeType( )メソッドが暗黙的にコールされます。
表10-1に示す1つ以上のイメージ属性を変更できます。
表10-1 イメージ処理演算子
演算子名 | 用途 | 値 |
---|---|---|
指定された圧縮フォーマットが出力ファイル・フォーマットでサポートされている場合、その圧縮フォーマットで強制的に出力します。(compressionFormatを参照) |
JPEG、SUNRLE、BMPRLE、TARGARLE、LZW、LZWHDIFF、FAX3、FAX4、HUFFMAN3、PACKBITS、GIFLZW、ASCII、RAW、DEFLATE、NONE |
|
不可逆圧縮の品質を指定します。JPEGのみに有効です。(compressionQualityを参照) |
MAXCOMPRATIO、MAXINTEGRITY、LOWCOMP、MEDCOMP、HIGHCOMP、または0から100の整数 |
|
イメージ・コンテンツのフォーマットを指定します。(contentFormatを参照) |
値は「contentFormat」を参照 |
|
FLOAT (負ではない数)脚注2、FLOAT FLOAT FLOAT (負ではない数)脚注3、FLOAT FLOAT (負ではない数)脚注2、FLOAT FLOAT FLOAT FLOAT FLOAT FLOAT (負ではない数)脚注4 |
||
カットまたはトリミングするウィンドウ(起点.x 起点.y 幅 高さ)を定義します。xまたはyの最初のピクセルは0(ゼロ)です。イメージの内側でウィンドウを定義する必要があります。(cutを参照) |
INTEGER INTEGER INTEGER INTEGER (負ではない数)。最大値は |
|
指定されたファイル・フォーマットで強制的に出力します。(fileFormatを参照) |
BMPF、CALS、GIFF、JFIF、PBMF、PGMF、PICT、PNGF、PNMF、PPMF、RASF、RPIX、TGAF、TIFF、WBMP |
|
ピクセル単位で指定されたサイズ(幅、高さ)にイメージを変更します。他のスケール演算子と組み合せることはできません。(fixedScaleを参照) |
INTEGER INTEGER (正の数) |
|
イメージの走査線を逆(下から上)に順序付けします。(flipを参照) |
引数なし |
|
アスペクト比を保持したまま、ピクセル単位で指定されたサイズ(幅、高さ)にイメージを変更します。他のスケール演算子と組み合せることはできません。(maxScaleを参照) |
INTEGER INTEGER (正の数) |
|
イメージの列を逆(右から左)に順序付けします。(mirrorを参照) |
引数なし |
|
結果イメージでイメージのメタデータをエンコーディングせずにイメージを処理します。(nometadataを参照) |
引数なし |
|
複数ページのファイルでページを選択します。TIFFのみに有効です。最初のページは0(ゼロ)です。(pageを参照) |
INTEGER (負ではない数) |
|
イメージのビット深度を下げる際にイメージを量子化する方法を指定します。(quantizeを参照) |
ERRORDIFFUSION(デフォルト)、ORDEREDDITHER、THRESHOLD、MEDIANCUT |
|
FLOAT |
||
イメージを係数(0.5、2.0など)によって均等にスケール変更します。他のスケール演算子と組み合せることはできません。(scaleを参照)脚注1 |
FLOAT (正の数) |
|
イメージを指定されたカーネル・タイプとゲイン係数(0と2.0など)によって鮮鋭化します。スケール演算子と組み合せることはできません。(sharpenを参照)脚注1 |
INTEGER (正の数)、FLOAT (正の数) |
|
出力イメージを強制的にタイル処理します。TIFFのみに有効です。(tiledを参照) |
引数なし |
|
PNGイメージ・ファイル・フォーマットの透明な領域を色で塗りつぶします。(transparencyFillColorを参照) |
BLACK、BLUE、CYAN、DARK_GRAY、GRAY、GREEN、LIGHT_GRAY、MAGENTA、ORANGE、PINK、RED、WHITE、YELLOW、またはINTEGER INTEGER INTEGER (負ではない数) |
|
イメージを係数(デフォルトは1)によってX軸方向にスケール変更します。イメージのスケール変更の比率は均等ではありません。yScale演算子とのみ組み合せて使用できますが、それ以外のスケール演算子と組み合せることはできません。(xScaleを参照)脚注1 |
FLOAT (正の数) |
|
イメージを係数(デフォルトは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 ロー・ピクセルおよび外部イメージの追加イメージ処理演算子
演算子名 | 用途 | 値 |
---|---|---|
イメージ内の赤、緑、青のチャネル(バンド)の相対位置を示します。出力チャネルの順序を変更します。RPIXのみに有効です。(channelOrderを参照) |
RGB(デフォルト)、RBG、GRB、GBR、BRG、BGR |
|
マルチバンド・イメージの場合、1つの整数(グレースケール)か、または赤(1番目)、緑(2番目)、青(3番目)に割り当てるチャネルを示す3つの整数を指定します。この演算子は、宛先ではなくソース・イメージに影響します(RPIXのみ)。(inputChannelsを参照) |
||
ピクセルの方向を強制します。NORMALの場合、イメージの左端のピクセルが先頭になります。RPIXのみに有効です。(pixelOrderを参照) |
NORMAL (デフォルト)、REVERSE |
|
走査線の方向を強制します。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オブジェクトの元のイメージ・コンテンツは変更されません。
使用上の注意
同じ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入力から生成されたバイナリ・メタデータ・パケットのサイズは、エンコーディングによって異なる場合があります。サポートされるエンコーディングはイメージ・ファイル・フォーマットによって異なり、バイナリ・メタデータ・パケットのサイズが制限される場合があります。サポートされるイメージ・フォーマットの制限は、次のとおりです。
-
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によってネイティブに認識されないフォーマットの特定の外部イメージの特性を、適切な属性フィールドに書き込みます。
使用上の注意
注意:
外部イメージのプロパティを一度設定すると、その後のプロパティの一貫性はユーザーが管理する必要があります。Oracle Multimediaで不明なファイル・フォーマットが検出された場合、プロパティは暗黙的に設定されません。
外部イメージ・サポートを使用する場合の詳細は、「Oracle Multimediaで使用するイメージ・ロー・ピクセル・フォーマット」を参照してください。このsetProperties( )メソッドを使用して記述できるフォーマットは、ネイティブに認識されない一部のフォーマットのみです。
外部イメージのコピー、格納または処理を行った後、このメソッドをコールし、新しいイメージ・コンテンツの特性を設定します。「Oracle Multimediaで使用するイメージ・ファイル・フォーマットおよび圧縮形式」で説明するネイティブ・イメージ・タイプとは異なり、外部イメージにはファイルのビットを解釈する方法についての情報がないか、Oracle Multimediaでその情報を認識できません。この場合、情報は明示的に設定する必要があります。
表10-3に、外部イメージに設定可能なイメージ特性を示します。
表10-3 外部ファイルのイメージ特性
フィールド | データ型 | 説明 |
---|---|---|
CompressionFormat |
STRING |
圧縮フォーマットの値を指定します。有効な値は、 |
DataOffset |
INTEGER |
Oracle Multimediaでは解釈されないオフセット(ファイルの先頭からイメージ・データの先頭まで)を指定します。オフセットを設定すると、ヘッダーになる可能性がある部分をスキップできます。値はLOB長より小さい負ではない整数を設定します。デフォルトはゼロです。 |
DefaultChannelSelection |
INTEGERまたは INTEGER, INTEGER, INTEGER |
マルチバンド・イメージで、イメージが読取りまたは処理される際に、カラー・チャネルとして解釈されるバンドを指定します。1つの整数を指定した場合、イメージは、指定したバンドのみのデータを含むグレースケール・イメージとして扱われます。3つの整数を指定した場合、イメージはRGBイメージとして扱われ、指定した先頭のバンドが赤チャネル、2番目が緑チャネル、3番目が青チャネルに使用されます。イメージの先頭のバンドには、1の番号が付けられます。指定するバンドの番号はイメージのバンド数以下である必要があります。 次に例を示します。
|
Height |
INTEGER |
イメージの高さをピクセル単位で指定します。値は正整数である必要があります。デフォルトはないため、値は必ず指定する必要があります。 |
インターリーブ |
STRING |
イメージ内のバンド・レイアウトを指定します。有効なスタイルは次のとおりです。
|
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; /