5 Oracle Multimedia Imagesでのメタデータの操作
イメージ・ファイルには、イメージのコンテンツ、イメージ・ピクセル・データおよびイメージ・メタデータの情報が含まれます。
一般的に、データに関するデータをメタデータと呼びますこの場合、メタデータは実際のイメージの追加情報で、イメージとともにイメージ・ファイルに格納されています。
この章では、次の内容を説明します。
5.1 メタデータの概要
イメージ・ファイルには数種類のメタデータを格納でき、各タイプを異なる目的に使用できます。
1つのタイプはテクニカル・メタデータで、イメージを技術的に記述するために使用されます。たとえば、テクニカル・メタデータには、ピクセル単位での高さと幅や、格納に使用する圧縮のタイプなど、イメージに関する属性を含めることができます。
別のタイプであるコンテンツ・メタデータでは、イメージのコンテンツ、撮影者の名前、撮影日時を記述できます。
メタデータは、様々なメカニズムでイメージ・ファイルに格納されます。デジタル・カメラおよびスキャナは、作成するイメージに、自動的にメタデータを挿入します。Adobe Photoshopなどのデジタル写真処理アプリケーションを使用すると、イメージとともに格納するメタデータを追加または編集できます。写真処理アプリケーションやニュース収集アプリケーション、イメージの保存時、一般ユーザー・レベルにおいても、デジタル・イメージへのメタデータの追加は日常的な操作になっています。
イメージ・データと同じファイルに格納すると、メタデータはカプセル化されます。カプセル化により、両方の型のデータを共有し、1つのデータとして安全に交換できます。イメージ・ファイル・フォーマットに格納されたメタデータを埋込みメタデータと呼びます。
5.2 Oracle Multimedia Imageメタデータの概要
多数のイメージ・ファイル・フォーマットについて、Oracle Multimediaが抽出および管理できるメタデータ属性は限られます。これらの属性には、height、width、contentLength、fileFormat、contentFormat、compressionFormat、mimeTypeがあります。少数のイメージ・ファイル・フォーマットについて、Oracle Multimediaは多数のメタデータ属性を抽出できます。このメタデータは、スキーマベースのXML文書で表されます。これらのXML文書は、データベースへの格納、索引付け、検索、更新が可能で、Oracle Databaseの標準的なメカニズムを使用してアプリケーションからも利用可能にできます。
また、Oracle Multimediaは、ユーザーが指定するメタデータを少数のイメージ・データ・ファイルに書き込んだり、組み込むことができます。メタデータは、アプリケーションによりスキーマ・ベースのXML文書として提供されます。Oracle Multimediaは、XML文書を処理し、イメージ・ファイルにメタデータを書き込みます。
5.3 イメージ・ファイル・フォーマット
Oracle Multimediaは、GIF、TIFFおよびJPEGファイル・フォーマットに対し、メタデータの抽出および埋込みをサポートしています。
関連項目:
Oracle Multimediaがサポートするイメージ・ファイル・フォーマットの詳細は、『Oracle Multimediaリファレンス』を参照してください
5.4 イメージ・メタデータ・フォーマット
イメージ・メタデータ・フォーマットとは、イメージ・メタデータをイメージ・ファイルに格納するための標準的なプロトコルおよび技術です。
次の項では、Oracle Multimediaがサポートする埋込みイメージ・メタデータ・フォーマットについて説明します。
5.4.1 EXIF
Oracle Multimediaは、TIFFおよびJPEGファイル・フォーマットからEXIFメタデータを抽出できます。
Exchangeable Image File Format(EXIF)は、デジタル・スチール・カメラのイメージ・ファイルを格納するための規格です。デジタル・カメラで作成されたイメージとそのメタデータを格納する標準的な方法として、日本電子工業振興協会(JEIDA)が規格化したフォーマットです。EXIFイメージ・メタデータはTIFFおよびJPEGフォーマット・イメージとして格納できます。
5.4.2 IPTC–IIM
Oracle Multimediaは、TIFFおよびJPEGファイル・フォーマットからのIPTCメタデータの抽出をサポートしています。
International Press Telecommunications Council-Information Interchange Model(IPTC-IIM)バージョン4は、国際新聞通信委員会と米国新聞協会が共同で規格化したフォーマットです。このメタデータ規格は、ニュースの取材、報道および出版業務に特化した情報の取得を目的にしています。この規格の情報レコードは、一般的にIPTCタグと呼ばれます。
イメージ・ファイル・フォーマットでの埋込みIPTCタグの使用は、イメージ編集に使用されるAdobe Photoshopツールによって広まりました。IPTCメタデータはTIFFおよびJPEGフォーマット・イメージとして格納できます。
5.4.3 XMP
Oracle Multimediaでは、GIF、TIFFおよびJPEGファイル・フォーマットからXMPメタデータを抽出できます。また、Oracle Multimediaでは、GIF、TIFFおよびJPEGファイル・フォーマットへのXMPデータ・パケットの書込みも可能です。
Extensible Metadata Platform(XMP)は、Adobeが様々なアプリケーションでメタデータを作成、処理および交換するために規格化したメタデータ・フォーマットです。XMPは、データ・モデリングにResource Description Framework(RDF)技術を使用します。XMPでは、データ・モデルのシリアル化(バイト・ストリームへの変換)およびイメージ・ファイルへの埋込み方法も定義されています。
5.5 外部イメージへのメタデータの表示
バイナリ・イメージ・ファイルから抽出されたメタデータは、次に、簡単に格納、索引付け、問合せ、更新および表示できる形に変換されます。
Oracle Multimediaでは、イメージ・メタデータはXML文書で戻されます。これらのXML文書は、Oracle Multimediaがデータベースに登録するXMLスキーマに基づいています。各型のイメージ・メタデータは、個別のXMLスキーマと対応しています。これらのXMLスキーマは、それぞれORD_IMAGE PL/SQLパッケージのメタデータ・プロシージャとメソッド、およびORDImageオブジェクト型で使用されます。
XML文書は、データベース内のXMLType列に格納できます。これらのドキュメントは、Oracle XML DBで提供される標準ベースの様々なXML技術によって簡単に検索および処理できます。
関連項目:
-
Oracle MultimediaがサポートするXMLスキーマの詳細は、『Oracle Multimediaリファレンス』を参照してください
-
Oracle XML DBが提供するXMLテクノロジの詳細は、『Oracle XML DB開発者ガイド』を参照してください
5.6 Oracle Multimedia Imageメタデータの例
このトピックでは、Oracle Multimedia PL/SQL Web Toolkitフォト・アルバム・サンプル・アプリケーションの表を使用したイメージ・メタデータの抽出方法と埋込み方法を示す一連の例を紹介します。
次に、フォト・アルバム・サンプル・アプリケーションで定義された、photos
表を使用したメタデータの抽出および埋込みの例を示します。フォト・アルバム・サンプル・アプリケーションの実装は、PHOTO_ALBUM
というPL/SQLパッケージに定義されています。
photo
表には、1つのイメージに対して、原寸の写真と縮小イメージの2つのインスタンスが格納されます。この表には、異なるイメージ・メタデータ・ドキュメントを4つまで格納できます。これらのドキュメントは、ORDImage、EXIF、IPTCおよびXMPメタデータ・フォーマットのイメージ・メタデータを表し、それぞれ、metaORDImage
、metaEXIF
、metaIPTC
およびmetaXMP
という名前の列に格納されます。メタデータ列はXMLType型で、Oracle Multimediaが提供するそれぞれのメタデータXMLスキーマにバインドされています。
次の各項では、ORDImageオブジェクト型を使用してイメージ・メタデータで実行できる操作について説明します。
注意:
これらの例では、BLOBを使用してイメージおよび縮小イメージを格納し、ORDImageオブジェクト・メソッドではなくORD_IMAGE PL/SQLパッケージを使用しました。5.6.1 メタデータ格納用表の作成
メタデータを抽出または埋め込む前に、メタデータが格納される表と列を作成する必要があります。
次のPL/SQLコード・セグメントは、イメージ・メタデータの各タイプを格納する4つのXMLTYPE列(metaORDImage
、metaEXIF
、metaIPTC
およびmetaXMP
)と、元のイメージおよび縮小イメージをそれぞれ格納する2つのORDIMAGE列(image
およびthumb
)があるphotos
表を作成します。この例では、ORDImageオブジェクト型の使用方法を示し、列image
およびthumb
はORDImageではなくBLOB型の場合があります。
各メタデータ列は、対応するメタデータ・スキーマにバインドされます。たとえば、列metaEXIF
はネームスペースhttp://xmlns.oracle.com/ord/meta/exif
を持つXMLスキーマにバインドされ、XML要素exifMetadata
として定義されています。
イメージ・メタデータ列の定義およびXMLスキーマへのバインドを示す部分は、太字で強調表示しています。
-- -- Create the PHOTOS table -- CREATE TABLE photos( id NUMBER PRIMARY KEY, description VARCHAR2(40) NOT NULL, metaORDImage XMLTYPE, metaEXIF XMLTYPE, metaIPTC XMLTYPE, metaXMP XMLTYPE, image ORDSYS.ORDIMAGE, thumb ORDSYS.ORDIMAGE ) -- -- store full-size images and thumbnail images as SecureFiles LOBs -- LOB(image.source.localdata) STORE AS SECUREFILE LOB(thumb.source.localdata) STORE AS SECUREFILE -- and bind the XMLType columns to the Oracle Multimedia metadata schemas XMLType COLUMN metaORDImage XMLSCHEMA "http://xmlns.oracle.com/ord/meta/ordimage" ELEMENT "ordImageAttributes" XMLType COLUMN metaEXIF XMLSCHEMA "http://xmlns.oracle.com/ord/meta/exif" ELEMENT "exifMetadata" XMLType COLUMN metaIPTC XMLSCHEMA "http://xmlns.oracle.com/ord/meta/iptc" ELEMENT "iptcMetadata" XMLType COLUMN metaXMP XMLSCHEMA "http://xmlns.oracle.com/ord/meta/xmp" ELEMENT "xmpMetadata";
5.6.2 イメージ・メタデータの抽出
このトピックでは、イメージ・メタデータの抽出方法を示す例を使用します。
次のPL/SQLプロシージャを使用して、イメージからメタデータを抽出し、作成したphotos
表の指定した列に格納します。このプロシージャでは、XML文書の配列を戻すgetMetadata( )メソッドが使用されています。メタデータの型は、各ドキュメントのルート要素から判断されます。ドキュメントは、UPDATE文によって、photos
表の対応する列に格納されます。
getMetadata( )メソッドをコールする部分は、太字で強調表示しています。
--
-- fetch the metadata and sort the results
--
PROCEDURE extractMetadata(inID IN INTEGER)
IS
img ORDSYS.ORDIMAGE;
metav XMLSequenceType;
meta_root VARCHAR2(40);
xmlORD XMLType;
xmlXMP XMLType;
xmlEXIF XMLType;
xmlIPTC XMLType;
BEGIN
-- select the image
SELECT image
INTO img
FROM PHOTOS
WHERE id = inID;
-- extract all the metadata
metav := img.getMetadata( 'ALL' );
-- process the result array to discover what types of metadata were
returned
FOR i IN 1..metav.count() LOOP
meta_root := metav(i).getRootElement();
CASE meta_root
WHEN 'ordImageAttributes' THEN xmlORD := metav(i);
WHEN 'xmpMetadata' THEN xmlXMP := metav(i);
WHEN 'iptcMetadata' THEN xmlIPTC := metav(i);
WHEN 'exifMetadata' THEN xmlEXIF := metav(i);
ELSE NULL;
END CASE;
END LOOP;
-- Update metadata columns
--
UPDATE photos
SET metaORDImage = xmlORD,
metaEXIF = xmlEXIF,
metaIPTC = xmlIPTC,
metaXMP = xmlXMP
WHERE id = inID;
END extractMetadata;
5.6.3 イメージ・メタデータの埋込み
このトピックでは、イメージ・メタデータの埋込み方法を示す例を使用します。
次のPL/SQLプロシージャで、putMetadata( )メソッドを示します。このプロシージャには、6つの引数を指定できます。entry_id
引数は、photos
表の更新対象イメージを指定します。その他の引数(title
、creator
、date
、description
およびcopyright
)は、XMPパケットにフォーマットされ、ターゲット・イメージに埋め込まれる文字列です。
この例では、XMPメタデータ用のOracle Multimedia XMLスキーマに基づいたXML文書インスタンスを作成します。(このスキーマは、Oracle XML DBに事前登録されています。) )XMPメタデータのスキーマは、単一のグローバル要素(<xmpMetadata>
)を定義します。<xmpMetadata>要素には、整形式のRDFドキュメントが1つ含まれます。RDFドキュメントには、rdf
ネームスペースから導出された単一の<RDF>
要素が含まれます。このRDFドキュメントは、Dublin Core Schemaで定義されている要素で構成されています。
メタデータ・ドキュメントは、putMetadata( )メソッドをコールすることによってイメージ・ファイルに埋め込まれます。新規イメージおよび新規メタデータは、UPDATE文によってphotos
表に再度格納されます。
putMetadata( )メソッドをコールする部分は、太字で強調表示しています。
--
-- write the metadata to the image
--
PROCEDURE write_metadata( entry_id IN VARCHAR2,
title IN VARCHAR2,
creator IN VARCHAR2,
date IN VARCHAR2,
description IN VARCHAR2,
copyright IN VARCHAR2 )
IS
img ORDSYS.ORDImage;
xmp XMLType;
buf VARCHAR2(5000);
BEGIN
-- select the image
SELECT image
INTO img
FROM PHOTOS
WHERE id = entry_id FOR UPDATE;
-- Create the XMP packet it must be schema valid
-- to "http://xmlns.oracle.com/ord/meta/xmp"
-- and contain an <RDF> element. This example uses
-- the Dublin Core schema.
/* An example XML instance document
<xmpMetadata xmlns="http://xmlns.oracle.com/ord/meta/xmp"
xsi:schemaLocation="http://xmlns.oracle.com/ord/meta/xmp
http://xmlns.oracle.com/ord/meta/xmp"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:title>A Winter Day</dc:title>
<dc:creator>Frosty S. Man</dc:creator>
<dc:date>21-Dec-2004</dc:date>
<dc:description>a sleigh ride</dc:description>
<dc:copyright>North Pole Inc.</dc:copyright>
</rdf:Description>
</rdf:RDF>
</xmpMetadata>
*/
buf := '<xmpMetadata xmlns="http://xmlns.oracle.com/ord/meta/xmp"
xsi:schemaLocation="http://xmlns.oracle.com/ord/meta/xmp
http://xmlns.oracle.com/ord/meta/xmp"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description about="" xmlns:dc="http://purl.org/dc/elements/1.1/">';
IF title IS NOT NULL THEN
buf := buf || '<dc:title>' || htf.escape_sc(title) || '</dc:title>';
END IF;
IF creator IS NOT NULL THEN
buf := buf || '<dc:creator>' || htf.escape_sc(creator)
|| '</dc:creator>';
END IF;
IF date IS NOT NULL THEN
buf := buf || '<dc:date>' || htf.escape_sc(date)
|| '</dc:date>';
END IF;
IF description IS NOT NULL THEN
buf := buf || '<dc:description>' || htf.escape_sc(description)
|| '</dc:description>';
END IF;
IF copyright IS NOT NULL THEN
buf := buf || '<dc:copyright>' || htf.escape_sc(copyright)
|| '</dc:copyright>';
END IF;
buf := buf || '
</rdf:Description>
</rdf:RDF>
</xmpMetadata>';
-- create the XML document
xmp := XMLType.createXML(buf, 'http://xmlns.oracle.com/ord/meta/xmp');
-- write the metadata
img.putMetadata( xmp, 'XMP' );
-- update the image
UPDATE photos
SET image = img,
metaXMP = xmp
WHERE id = entry_id;
END write_Metadata;