Tips

ピクチャメタデータをブロック単位で抽出する

日付2011/11/01
ID76389 (英語原文参照)
バージョンv12
プラットフォームMac/Win

4D v12以降,GET PICTURE METADATAコマンドで,ピクチャフィールドまたはピクチャ変数からメタデータが取り出せるようになりました。このコマンドは,一回の呼び出しでTIFF,EXIF,GPS,IPTCなどのメタデータをプロック単位で取り出すこともできます。

以下は,このコマンドの特性を活かし,次のようなコードですべてのメタデータをXML形式に統合するメソッドです。

C_STRING(16;$xml_root;$xml_TIFF;$xml_GPS;$xml_EXIF;$xml_IPTC)
C_PICTURE($1;$image_i)
$image_i:=$1

$xml_root:=DOM Create XML Ref("e;Root"e;) // Creation of an XML DOM tree

$xml_TIFF:=DOM Create XML element($xml_root;"e;/Root/TIFF"e;)
GET PICTURE METADATA($image_i;"e;TIFF"e;;$xml_TIFF)

$xml_GPS:=DOM Create XML element($xml_root;"e;/Root/GPS"e;)
GET PICTURE METADATA($image_i;"e;GPS"e;;$xml_GPS)

$xml_EXIF:=DOM Create XML element($xml_root;"e;/Root/EXIF"e;)
GET PICTURE METADATA($image_i;"e;EXIF"e;;$xml_EXIF)

$xml_IPTC:=DOM Create XML element($xml_root;"e;/Root/IPTC"e;)
GET PICTURE METADATA($image_i;"e;IPTC"e;;$xml_IPTC)

DOM EXPORT TO FILE($xml;Get 4D folder(Database Folder)+"e;image_meta.xml"e;)
DOM CLOSE XML($xml)

たとえば,下記のようなXMLが出来上がります。

<?xml version="e;1.0"e; encoding="e;UTF-8"e; standalone="e;no"e; ?>
<Root>

    <TIFF DateTime="e;2004-03-10T09:37:27Z"e; Make="e;Canon"e; Model="e;Canon DIGITAL IXUS 400"e; Orientation="e;1"e; ResolutionUnit="e;2"e; Software="e;Adobe Photoshop 7.0"e; XResolution="e;180"e; YResolution="e;180"e;/>

    <GPS/>

    <EXIF ApertureValue="e;5.65625"e; ColorSpace="e;1"e; ComponentsConfiguration="e;1;2;3;0"e; CompressedBitsPerPixel="e;5"e; CustomRendered="e;0"e; DateTimeDigitized="e;2004-03-09T17:47:30Z"e; DateTimeOriginal="e;2004-03-09T17:47:30Z"e; DigitalZoomRatio="e;1"e; ExifVersion="e;0220"e; ExposureBiasValue="e;0"e; ExposureMode="e;0"e; ExposureTime="e;0.0025"e; FNumber="e;7.1"e; FileSource="e;3"e; Flash="e;24"e; FlashPixVersion="e;0100"e; FocalLength="e;7.40625"e; FocalPlaneResolutionUnit="e;2"e; FocalPlaneXResolution="e;8114.2857142857"e; FocalPlaneYResolution="e;8114.2857142857"e; MaxApertureValue="e;2.96875"e; MeteringMode="e;5"e; PixelXDimension="e;2272"e; PixelYDimension="e;1704"e; SceneCaptureType="e;0"e; SensingMethod="e;2"e; ShutterSpeedValue="e;8.65625"e; WhiteBalance="e;0"e;/>

    <IPTC/>

</Root>