356 lines
17 KiB
HTML
356 lines
17 KiB
HTML
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||
|
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
|
||
|
<html>
|
||
|
<head><title>example.config</title>
|
||
|
<link rel=stylesheet type='text/css' href='style.css' title='Style'>
|
||
|
</head>
|
||
|
<body>
|
||
|
<pre>
|
||
|
<span class=com>#------------------------------------------------------------------------------
|
||
|
# File: example.config
|
||
|
#
|
||
|
# Description: Example user configuration file for Image::ExifTool
|
||
|
#
|
||
|
# Notes: This example file shows how to define your own shortcuts and
|
||
|
# add new EXIF, IPTC, XMP, PNG, MIE and Composite tags, as well
|
||
|
# as how to specify preferred lenses for the LensID tag, and
|
||
|
# define new file types and default ExifTool option values.
|
||
|
#
|
||
|
# Note that unknown tags may be extracted even if they aren't
|
||
|
# defined, but tags must be defined to be written. Also note
|
||
|
# that it is possible to override an existing tag definition
|
||
|
# with a user-defined tag.
|
||
|
#
|
||
|
# To activate this file, rename it to ".ExifTool_config" and
|
||
|
# place it in your home directory or the exiftool application
|
||
|
# directory. (On Windows and Mac systems this must be done via
|
||
|
# the command line since the GUI's don't allow filenames to begin
|
||
|
# with a dot. Use the "rename" command in Windows or "mv" on the
|
||
|
# Mac.) This causes ExifTool to automatically load the file when
|
||
|
# run. Your home directory is determined by the first defined of
|
||
|
# the following environment variables:
|
||
|
#
|
||
|
# 1. EXIFTOOL_HOME
|
||
|
# 2. HOME
|
||
|
# 3. HOMEDRIVE + HOMEPATH
|
||
|
# 4. (the current directory)
|
||
|
#
|
||
|
# Alternatively, the -config option of the exiftool application
|
||
|
# may be used to load a specific configuration file (note that
|
||
|
# this must be the first option on the command line):
|
||
|
#
|
||
|
# exiftool -config example.config ...
|
||
|
#
|
||
|
# This example file defines the following 16 new tags as well as
|
||
|
# a number of Shortcut and Composite tags:
|
||
|
#
|
||
|
# 1. EXIF:NewEXIFTag
|
||
|
# 2. GPS:GPSPitch
|
||
|
# 3. GPS:GPSRoll
|
||
|
# 4. IPTC:NewIPTCTag
|
||
|
# 5. XMP-xmp:NewXMPxmpTag
|
||
|
# 6. XMP-exif:GPSPitch
|
||
|
# 7. XMP-exif:GPSRoll
|
||
|
# 8. XMP-xxx:NewXMPxxxTag1
|
||
|
# 9. XMP-xxx:NewXMPxxxTag2
|
||
|
# 10. XMP-xxx:NewXMPxxxTag3
|
||
|
# 11. XMP-xxx:NewXMPxxxStruct
|
||
|
# 12. PNG:NewPngTag1
|
||
|
# 13. PNG:NewPngTag2
|
||
|
# 14. PNG:NewPngTag3
|
||
|
# 15. MIE-Meta:NewMieTag1
|
||
|
# 16. MIE-Test:NewMieTag2
|
||
|
#
|
||
|
# For detailed information on the definition of tag tables and
|
||
|
# tag information hashes, see lib/Image/ExifTool/README.
|
||
|
#------------------------------------------------------------------------------
|
||
|
|
||
|
# Shortcut tags are used when extracting information to simplify
|
||
|
# commonly used commands. They can be used to represent groups
|
||
|
# of tags, or to provide an alias for a tag name.</span>
|
||
|
%Image::ExifTool::UserDefined::Shortcuts = (
|
||
|
MyShortcut => ['exif:createdate','exposuretime','aperture'],
|
||
|
MyAlias => 'FocalLengthIn35mmFormat',
|
||
|
);
|
||
|
|
||
|
<span class=com># NOTE: All tag names used in the following tables are case sensitive.
|
||
|
|
||
|
# The %Image::ExifTool::UserDefined hash defines new tags to be added
|
||
|
# to existing tables.</span>
|
||
|
%Image::ExifTool::UserDefined = (
|
||
|
<span class=com># All EXIF tags are added to the Main table, and WriteGroup is used to
|
||
|
# specify where the tag is written (default is ExifIFD if not specified):</span>
|
||
|
'Image::ExifTool::Exif::Main' => {
|
||
|
<span class=com># Example 1. EXIF:NewEXIFTag</span>
|
||
|
0xd000 => {
|
||
|
Name => 'NewEXIFTag',
|
||
|
Writable => 'int16u',
|
||
|
WriteGroup => 'IFD0',
|
||
|
},
|
||
|
<span class=com># add more user-defined EXIF tags here...</span>
|
||
|
},
|
||
|
<span class=com># the <a href="geotag.html">Geotag feature</a> writes these additional GPS tags if available:</span>
|
||
|
'Image::ExifTool::GPS::Main' => {
|
||
|
<span class=com># Example 2. GPS:GPSPitch</span>
|
||
|
0xd000 => {
|
||
|
Name => 'GPSPitch',
|
||
|
Writable => 'rational64s',
|
||
|
},
|
||
|
<span class=com># Example 3. GPS:GPSRoll</span>
|
||
|
0xd001 => {
|
||
|
Name => 'GPSRoll',
|
||
|
Writable => 'rational64s',
|
||
|
},
|
||
|
},
|
||
|
<span class=com># IPTC tags are added to a specific record type (eg. application record):
|
||
|
# (Note: IPTC tag ID's are limited to the range 0-255)</span>
|
||
|
'Image::ExifTool::IPTC::ApplicationRecord' => {
|
||
|
<span class=com># Example 4. IPTC:NewIPTCTag</span>
|
||
|
160 => {
|
||
|
Name => 'NewIPTCTag',
|
||
|
Format => 'string[0,16]',
|
||
|
},
|
||
|
<span class=com># add more user-defined IPTC ApplicationRecord tags here...</span>
|
||
|
},
|
||
|
<span class=com># XMP tags may be added to existing namespaces:</span>
|
||
|
'Image::ExifTool::XMP::xmp' => {
|
||
|
<span class=com># Example 5. XMP-xmp:NewXMPxmpTag</span>
|
||
|
NewXMPxmpTag => { Groups => { 2 => 'Author' } },
|
||
|
<span class=com># add more user-defined XMP-xmp tags here...</span>
|
||
|
},
|
||
|
<span class=com># special Geotag tags for XMP-exif:</span>
|
||
|
'Image::ExifTool::XMP::exif' => {
|
||
|
<span class=com># Example 6. XMP-exif:GPSPitch</span>
|
||
|
GPSPitch => { Writable => 'rational', Groups => { 2 => 'Location' } },
|
||
|
<span class=com># Example 7. XMP-exif:GPSRoll</span>
|
||
|
GPSRoll => { Writable => 'rational', Groups => { 2 => 'Location' } },
|
||
|
},
|
||
|
<span class=com># new XMP namespaces (eg. xxx) must be added to the Main XMP table:</span>
|
||
|
'Image::ExifTool::XMP::Main' => {
|
||
|
<span class=com># namespace definition for examples 8 to 11</span>
|
||
|
xxx => { <span class=com># <-- must be the same as the NAMESPACE prefix</span>
|
||
|
SubDirectory => {
|
||
|
TagTable => 'Image::ExifTool::UserDefined::xxx',
|
||
|
<span class=com># (see the definition of this table below)</span>
|
||
|
},
|
||
|
},
|
||
|
<span class=com># add more user-defined XMP namespaces here...</span>
|
||
|
},
|
||
|
<span class=com># new PNG tags are added to the PNG::TextualData table:</span>
|
||
|
'Image::ExifTool::PNG::TextualData' => {
|
||
|
<span class=com># Example 12. PNG:NewPngTag1</span>
|
||
|
NewPngTag1 => { },
|
||
|
<span class=com># Example 13. PNG:NewPngTag2</span>
|
||
|
NewPngTag2 => { },
|
||
|
<span class=com># Example 14. PNG:NewPngTag3</span>
|
||
|
NewPngTag3 => { },
|
||
|
},
|
||
|
<span class=com># add a new MIE tag (NewMieTag1) and group (MIE-Test) to MIE-Meta
|
||
|
# (Note: MIE group names must NOT end with a number)</span>
|
||
|
'Image::ExifTool::MIE::Meta' => {
|
||
|
<span class=com># Example 15. MIE-Meta:NewMieTag1</span>
|
||
|
NewMieTag1 => {
|
||
|
Writable => 'rational64u',
|
||
|
Units => [ 'cm', 'in' ],
|
||
|
},
|
||
|
<span class=com># new MIE "Test" group for example 16</span>
|
||
|
Test => {
|
||
|
SubDirectory => {
|
||
|
TagTable => 'Image::ExifTool::UserDefined::MIETest',
|
||
|
DirName => 'MIE-Test',
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
<span class=com># Composite tags are added to the Composite table:</span>
|
||
|
'Image::ExifTool::Composite' => {
|
||
|
<span class=com># Composite tags are unique: The Require/Desire elements specify
|
||
|
# tags that must/may exist, and the keys of these hashes are used as
|
||
|
# indices in the @val array of the ValueConv expression to access
|
||
|
# the numerical (-n) values of these tags. All Require'd tags must
|
||
|
# exist for the Composite tag to be evaluated. If no Require'd tags
|
||
|
# are specified, then at least one of the Desire'd tags must exist.
|
||
|
# See the Composite table in Image::ExifTool::Exif for more
|
||
|
# examples, and lib/Image/ExifTool/README for all of the details.</span>
|
||
|
BaseName => {
|
||
|
Require => {
|
||
|
0 => 'FileName',
|
||
|
},
|
||
|
<span class=com># remove the extension from FileName</span>
|
||
|
ValueConv => '$val[0] =~ /(.*)\./ ? $1 : $val[0]',
|
||
|
},
|
||
|
<span class=com># the next few examples demonstrate simplifications which may be
|
||
|
# used if only one tag is Require'd or Desire'd:
|
||
|
# 1) the Require lookup may be replaced with a simple tag name
|
||
|
# 2) "$val" may be used to represent "$val[0]" in the expression</span>
|
||
|
FileExtension => {
|
||
|
Require => 'FileName',
|
||
|
ValueConv => '$val=~/\.([^.]*)$/; $1',
|
||
|
},
|
||
|
<span class=com># override CircleOfConfusion tag to use D/1750 instead of D/1440</span>
|
||
|
CircleOfConfusion => {
|
||
|
Require => 'ScaleFactor35efl',
|
||
|
Groups => { 2 => 'Camera' },
|
||
|
ValueConv => 'sqrt(24*24+36*36) / ($val * 1750)',
|
||
|
<span class=com># an optional PrintConv may be used to format the value</span>
|
||
|
PrintConv => 'sprintf("%.3f mm",$val)',
|
||
|
},
|
||
|
<span class=com># generate a description for this file type</span>
|
||
|
FileTypeDescription => {
|
||
|
Require => 'FileType',
|
||
|
ValueConv => 'GetFileType($val,1) || $val',
|
||
|
},
|
||
|
<span class=com># calculate physical image size based on resolution</span>
|
||
|
PhysicalImageSize => {
|
||
|
Require => {
|
||
|
0 => 'ImageWidth',
|
||
|
1 => 'ImageHeight',
|
||
|
2 => 'XResolution',
|
||
|
3 => 'YResolution',
|
||
|
4 => 'ResolutionUnit',
|
||
|
},
|
||
|
ValueConv => '$val[0]/$val[2] . " " . $val[1]/$val[3]',
|
||
|
<span class=com># (the @prt array contains print-formatted values)</span>
|
||
|
PrintConv => 'sprintf("%.1fx%.1f $prt[4]", split(" ",$val))',
|
||
|
},
|
||
|
<span class=com># [advanced] select largest JPEG preview image</span>
|
||
|
BigImage => {
|
||
|
Groups => { 2 => 'Preview' },
|
||
|
Desire => {
|
||
|
0 => 'JpgFromRaw',
|
||
|
1 => 'PreviewImage',
|
||
|
2 => 'OtherImage',
|
||
|
<span class=com># (DNG and A100 ARW may be have 2 PreviewImage's)</span>
|
||
|
3 => 'PreviewImage (1)',
|
||
|
},
|
||
|
<span class=com># ValueConv may also be a code reference
|
||
|
# Inputs: 0) reference to list of values, 1) ExifTool object</span>
|
||
|
ValueConv => sub {
|
||
|
my $val = shift;
|
||
|
my ($image, $bigImage, $len, $bigLen);
|
||
|
foreach $image (@$val) {
|
||
|
next unless ref $image eq 'SCALAR';
|
||
|
<span class=com># check for JPEG image (or "Binary data" if -b not used)</span>
|
||
|
next unless $$image =~ /^(\xff\xd8\xff|Binary data (\d+))/;
|
||
|
$len = $2 || length $$image; <span class=com># get image length</span>
|
||
|
<span class=com># save largest image</span>
|
||
|
next if defined $bigLen and $bigLen >= $len;
|
||
|
$bigLen = $len;
|
||
|
$bigImage = $image;
|
||
|
}
|
||
|
return $bigImage;
|
||
|
},
|
||
|
},
|
||
|
<span class=com># **** ADD ADDITIONAL COMPOSITE TAG DEFINITIONS HERE ****</span>
|
||
|
},
|
||
|
);
|
||
|
|
||
|
<a name='xmp-xxx'><span class=com># This is a basic example of the definition for a new XMP namespace.
|
||
|
# This table is referenced through a SubDirectory tag definition
|
||
|
# in the %Image::ExifTool::UserDefined definition above.
|
||
|
# The namespace prefix for these tags is 'xxx', which corresponds to
|
||
|
# an ExifTool family 1 group name of 'XMP-xxx'.</span></a>
|
||
|
%Image::ExifTool::UserDefined::xxx = (
|
||
|
GROUPS => { 0 => 'XMP', 1 => 'XMP-xxx', 2 => 'Image' },
|
||
|
NAMESPACE => { 'xxx' => 'http://ns.myname.com/xxx/1.0/' },
|
||
|
WRITABLE => 'string',
|
||
|
<span class=com># Example 8. XMP-xxx:NewXMPxxxTag1</span>
|
||
|
<span class=com># - replace "NewXMPxxxTag1" with your own tag name (eg. "MyTag")</span>
|
||
|
NewXMPxxxTag1 => { Writable => 'lang-alt' },
|
||
|
<span class=com># Example 9. XMP-xxx:NewXMPxxxTag2</span>
|
||
|
NewXMPxxxTag2 => { Groups => { 2 => 'Author' } },
|
||
|
<span class=com># Example 10. XMP-xxx:NewXMPxxxTag3</span>
|
||
|
NewXMPxxxTag3 => { List => 'Bag' },
|
||
|
<span class=com># Example 11. XMP-xxx:NewXMPxxxStruct</span>
|
||
|
<span class=com># - example structured XMP tag</span>
|
||
|
NewXMPxxxStruct => {
|
||
|
<span class=com># the "Struct" entry defines the structure fields</span>
|
||
|
Struct => {
|
||
|
<span class=com># optional namespace prefix and URI for structure fields
|
||
|
# (required only if different than NAMESPACE above)</span>
|
||
|
NAMESPACE => { 'test' => 'http://x.y.z/test/' },
|
||
|
<span class=com># optional structure name (used for warning messages only)</span>
|
||
|
STRUCT_NAME => 'MyStruct',
|
||
|
<span class=com># optional rdf:type property for the structure</span>
|
||
|
TYPE => 'http://x.y.z/test/xystruct',
|
||
|
<span class=com># structure fields (very similar to tag definitions)</span>
|
||
|
X => { Writable => 'integer' },
|
||
|
Y => { Writable => 'integer' },
|
||
|
<span class=com># a nested structure...</span>
|
||
|
Things => {
|
||
|
List => 'Bag',
|
||
|
Struct => {
|
||
|
NAMESPACE => { thing => 'http://x.y.z/thing/' },
|
||
|
What => { },
|
||
|
Where => { },
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
List => 'Seq', <span class=com># structures may also be elements of a list</span>
|
||
|
},
|
||
|
<span class=com> # Each field in the structure has an automatically-generated
|
||
|
# corresponding flattened tag with an ID that is the concatenation
|
||
|
# of the original structure tag ID and the field name (after
|
||
|
# capitalizing the first letter of the field name if necessary).
|
||
|
# The Name and/or Description of these flattened tags may be changed
|
||
|
# if desired, but all other tag properties are taken from the
|
||
|
# structure field definition. When this is done, the "Flat" flag
|
||
|
# must also be set in the tag definition. For example:</span>
|
||
|
NewXMPxxxStructX => { Name => 'SomeOtherName', Flat => 1 },
|
||
|
);
|
||
|
|
||
|
<span class=com># Adding a new MIE group requires a few extra definitions</span>
|
||
|
use Image::ExifTool::MIE;
|
||
|
%Image::ExifTool::UserDefined::MIETest = (
|
||
|
%Image::ExifTool::MIE::tableDefaults, <span class=com># default MIE table entries</span>
|
||
|
GROUPS => { 0 => 'MIE', 1 => 'MIE-Test', 2 => 'Document' },
|
||
|
WRITE_GROUP => 'MIE-Test',
|
||
|
<span class=com># Example 16. MIE-Test:NewMieTag2</span>
|
||
|
NewMieTag2 => { }, <span class=com># new user-defined tag in MIE-Test group</span>
|
||
|
);
|
||
|
|
||
|
<span class=com># A special 'Lenses' list can be defined to give priority to specific lenses
|
||
|
# in the logic to determine a lens model for the Composite:LensID tag</span>
|
||
|
@Image::ExifTool::UserDefined::Lenses = (
|
||
|
'Sigma AF 10-20mm F4-5.6 EX DC',
|
||
|
'Tokina AF193-2 19-35mm f/3.5-4.5',
|
||
|
);
|
||
|
|
||
|
<span class=com># User-defined file types to recognize</span>
|
||
|
%Image::ExifTool::UserDefined::FileTypes = (
|
||
|
XXX => { <span class=com># <-- the extension of the new file type (case insensitive)</span>
|
||
|
<span class=com># BaseType specifies the format upon which this file is based.
|
||
|
# If BaseType is defined, then the file will be fully supported,
|
||
|
# and in this case the Magic pattern should not be defined</span>
|
||
|
BaseType => 'TIFF',
|
||
|
MIMEType => 'image/x-xxx',
|
||
|
Description => 'My XXX file type',
|
||
|
},
|
||
|
YYY => {
|
||
|
<span class=com># without BaseType, the file will be recognized but not supported</span>
|
||
|
Magic => '0123abcd', <span class=com># regular expression to match at start of file</span>
|
||
|
MIMEType => 'application/test',
|
||
|
Description => 'Test imaginary file type',
|
||
|
},
|
||
|
ZZZ => {
|
||
|
<span class=com># if neither BaseType nor Magic are defined, the file will be
|
||
|
# recognized by extension only</span>
|
||
|
Description => 'My ZZZ file type',
|
||
|
},
|
||
|
);
|
||
|
|
||
|
<span class=com># Specify default ExifTool option values
|
||
|
# (see the <a href="ExifTool.html#Options">Options function documentation</a> for available options)</span>
|
||
|
%Image::ExifTool::UserDefined::Options = (
|
||
|
CoordFormat => '%.6f', <span class=com># change default GPS coordinate format</span>
|
||
|
Duplicates => 1, <span class=com># make -a default for the exiftool app</span>
|
||
|
GeoMaxHDOP => 4, <span class=com># ignore GPS fixes with HDOP > 4</span>
|
||
|
);
|
||
|
|
||
|
<span class=com>#------------------------------------------------------------------------------</span>
|
||
|
1; <span class=com>#end</span>
|
||
|
</pre>
|
||
|
<hr>
|
||
|
<p class='lf'><a href="index.html"><-- Back to ExifTool home page</a></p>
|
||
|
</body>
|
||
|
</html>
|