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技術によって簡単に検索および処理できます。

関連項目:

5.6 Oracle Multimedia Imageメタデータの例

このトピックでは、Oracle Multimedia PL/SQL Web Toolkitフォト・アルバム・サンプル・アプリケーションの表を使用したイメージ・メタデータの抽出方法と埋込み方法を示す一連の例を紹介します。

次に、フォト・アルバム・サンプル・アプリケーションで定義された、photos表を使用したメタデータの抽出および埋込みの例を示します。フォト・アルバム・サンプル・アプリケーションの実装は、PHOTO_ALBUMというPL/SQLパッケージに定義されています。

photo表には、1つのイメージに対して、原寸の写真と縮小イメージの2つのインスタンスが格納されます。この表には、異なるイメージ・メタデータ・ドキュメントを4つまで格納できます。これらのドキュメントは、ORDImage、EXIF、IPTCおよびXMPメタデータ・フォーマットのイメージ・メタデータを表し、それぞれ、metaORDImagemetaEXIFmetaIPTCおよびmetaXMPという名前の列に格納されます。メタデータ列はXMLType型で、Oracle Multimediaが提供するそれぞれのメタデータXMLスキーマにバインドされています。

次の各項では、ORDImageオブジェクト型を使用してイメージ・メタデータで実行できる操作について説明します。

注意:

これらの例では、BLOBを使用してイメージおよび縮小イメージを格納し、ORDImageオブジェクト・メソッドではなくORD_IMAGE PL/SQLパッケージを使用しました。

5.6.1 メタデータ格納用表の作成

メタデータを抽出または埋め込む前に、メタデータが格納される表と列を作成する必要があります。

次のPL/SQLコード・セグメントは、イメージ・メタデータの各タイプを格納する4つのXMLTYPE列(metaORDImagemetaEXIFmetaIPTCおよび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表の更新対象イメージを指定します。その他の引数(titlecreatordatedescriptionおよび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;

5.7 メタデータ・リファレンス

このトピックには、イメージ・メタデータの操作の詳細に関する参照情報のリストが含まれています。

イメージ・メタデータの操作に関する規格および技術の詳細は、次のWebサイトを参照してください。