exiftool_vendored 11.99.0 → 12.06.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of exiftool_vendored might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/bin/Changes +119 -2
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +32 -32
- data/bin/exiftool +55 -50
- data/bin/lib/Image/ExifTool.pm +155 -109
- data/bin/lib/Image/ExifTool.pod +103 -77
- data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
- data/bin/lib/Image/ExifTool/APE.pm +2 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +11 -6
- data/bin/lib/Image/ExifTool/Canon.pm +2 -1
- data/bin/lib/Image/ExifTool/CanonCustom.pm +82 -16
- data/bin/lib/Image/ExifTool/DPX.pm +56 -2
- data/bin/lib/Image/ExifTool/DarwinCore.pm +16 -3
- data/bin/lib/Image/ExifTool/Exif.pm +15 -6
- data/bin/lib/Image/ExifTool/Font.pm +9 -2
- data/bin/lib/Image/ExifTool/GIF.pm +5 -0
- data/bin/lib/Image/ExifTool/GeoTiff.pm +2 -0
- data/bin/lib/Image/ExifTool/GoPro.pm +10 -1
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/ID3.pm +86 -12
- data/bin/lib/Image/ExifTool/Lang/de.pm +3 -1
- data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +3 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +134 -15
- data/bin/lib/Image/ExifTool/Olympus.pm +34 -17
- data/bin/lib/Image/ExifTool/PNG.pm +14 -3
- data/bin/lib/Image/ExifTool/PPM.pm +5 -5
- data/bin/lib/Image/ExifTool/Panasonic.pm +147 -13
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +33 -0
- data/bin/lib/Image/ExifTool/Parrot.pm +2 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +2 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +2 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +204 -27
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +355 -19
- data/bin/lib/Image/ExifTool/README +20 -19
- data/bin/lib/Image/ExifTool/Ricoh.pm +19 -1
- data/bin/lib/Image/ExifTool/Shift.pl +1 -0
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +40 -33
- data/bin/lib/Image/ExifTool/Sony.pm +376 -11
- data/bin/lib/Image/ExifTool/TagLookup.pm +1949 -1872
- data/bin/lib/Image/ExifTool/TagNames.pod +329 -53
- data/bin/lib/Image/ExifTool/Validate.pm +4 -4
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -0
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +23 -15
- data/bin/lib/Image/ExifTool/Writer.pl +44 -21
- data/bin/lib/Image/ExifTool/XMP.pm +41 -4
- data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
- data/bin/lib/Image/ExifTool/ZISRAW.pm +123 -0
- data/bin/perl-Image-ExifTool.spec +31 -31
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +4 -3
data/bin/lib/Image/ExifTool.pm
CHANGED
@@ -28,7 +28,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
|
|
28
28
|
%mimeType $swapBytes $swapWords $currentByteOrder %unpackStd
|
29
29
|
%jpegMarker %specialTags %fileTypeLookup $testLen $exePath);
|
30
30
|
|
31
|
-
$VERSION = '
|
31
|
+
$VERSION = '12.06';
|
32
32
|
$RELEASE = '';
|
33
33
|
@ISA = qw(Exporter);
|
34
34
|
%EXPORT_TAGS = (
|
@@ -91,7 +91,7 @@ sub GetExtended($$);
|
|
91
91
|
sub Set64u(@);
|
92
92
|
sub DecodeBits($$;$);
|
93
93
|
sub EncodeBits($$;$$);
|
94
|
-
sub Filter(
|
94
|
+
sub Filter($$$);
|
95
95
|
sub HexDump($;$%);
|
96
96
|
sub DumpTrailer($$);
|
97
97
|
sub DumpUnknownTrailer($$);
|
@@ -137,17 +137,18 @@ sub ReadValue($$$;$$$);
|
|
137
137
|
@loadAllTables = qw(
|
138
138
|
PhotoMechanic Exif GeoTiff CanonRaw KyoceraRaw Lytro MinoltaRaw PanasonicRaw
|
139
139
|
SigmaRaw JPEG GIMP Jpeg2000 GIF BMP BMP::OS2 BMP::Extra BPG BPG::Extensions
|
140
|
-
PICT PNG MNG FLIF DjVu DPX OpenEXR MIFF PCX PGF PSP PhotoCD Radiance
|
141
|
-
PostScript Photoshop::Header Photoshop::Layers Photoshop::ImageData
|
140
|
+
PICT PNG MNG FLIF DjVu DPX OpenEXR ZISRAW MIFF PCX PGF PSP PhotoCD Radiance
|
141
|
+
PDF PostScript Photoshop::Header Photoshop::Layers Photoshop::ImageData
|
142
142
|
FujiFilm::RAF FujiFilm::IFD Samsung::Trailer Sony::SRF2 Sony::SR2SubIFD
|
143
|
-
Sony::PMP ITC ID3 FLAC Ogg Vorbis APE APE::NewHeader
|
144
|
-
MPC MPEG::Audio MPEG::Video MPEG::Xing M2TS QuickTime
|
145
|
-
QuickTime::Stream Matroska MOI
|
146
|
-
Real::Audio Real::Metafile Red RIFF AIFF
|
147
|
-
XMP::SVG Palm Palm::MOBI Palm::EXTH Torrent
|
148
|
-
EXE::MachO EXE::PEF EXE::ELF EXE::AR
|
149
|
-
VCard::VCalendar RSRC Rawzor ZIP ZIP::GZIP
|
150
|
-
FLIR::AFF FLIR::FPF MacOS::MDItem MacOS::XAttr
|
143
|
+
Sony::PMP ITC ID3 ID3::Lyrics3 FLAC Ogg Vorbis APE APE::NewHeader
|
144
|
+
APE::OldHeader Audible MPC MPEG::Audio MPEG::Video MPEG::Xing M2TS QuickTime
|
145
|
+
QuickTime::ImageFile QuickTime::Stream QuickTime::Tags360Fly Matroska MOI
|
146
|
+
MXF DV Flash Flash::FLV Real::Media Real::Audio Real::Metafile Red RIFF AIFF
|
147
|
+
ASF WTV DICOM FITS MIE JSON HTML XMP::SVG Palm Palm::MOBI Palm::EXTH Torrent
|
148
|
+
EXE EXE::PEVersion EXE::PEString EXE::MachO EXE::PEF EXE::ELF EXE::AR
|
149
|
+
EXE::CHM LNK Font VCard Text VCard::VCalendar RSRC Rawzor ZIP ZIP::GZIP
|
150
|
+
ZIP::RAR RTF OOXML iWork ISO FLIR::AFF FLIR::FPF MacOS::MDItem MacOS::XAttr
|
151
|
+
FlashPix::DocTable
|
151
152
|
);
|
152
153
|
|
153
154
|
# alphabetical list of current Lang modules
|
@@ -186,9 +187,9 @@ $defaultLang = 'en'; # default language
|
|
186
187
|
PSD XMP BMP BPG PPM RIFF AIFF ASF MOV MPEG Real SWF PSP FLV OGG
|
187
188
|
FLAC APE MPC MKV MXF DV PMP IND PGF ICC ITC FLIR FLIF FPF LFP
|
188
189
|
HTML VRD RTF FITS XCF DSS QTIF FPX PICT ZIP GZIP PLIST RAR BZ2
|
189
|
-
TAR EXE EXR HDR CHM LNK WMF AVC DEX DPX RAW Font RSRC M2TS
|
190
|
-
PCX DCX DWF DWG WTV Torrent VCard LRI R3D AA PDB MOI ISO
|
191
|
-
JSON MP3 DICOM PCD TXT);
|
190
|
+
CZI TAR EXE EXR HDR CHM LNK WMF AVC DEX DPX RAW Font RSRC M2TS
|
191
|
+
PHP PCX DCX DWF DWG WTV Torrent VCard LRI R3D AA PDB MOI ISO
|
192
|
+
ALIAS JSON MP3 DICOM PCD TXT);
|
192
193
|
|
193
194
|
# file types that we can write (edit)
|
194
195
|
my @writeTypes = qw(JPEG TIFF GIF CRW MRW ORF RAF RAW PNG MIE PSD XMP PPM EPS
|
@@ -253,6 +254,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
253
254
|
CRW => ['CRW', 'Canon RAW format'],
|
254
255
|
CS1 => ['PSD', 'Sinar CaptureShop 1-Shot RAW'],
|
255
256
|
CSV => ['TXT', 'Comma-Separated Values'],
|
257
|
+
CZI => ['CZI', 'Zeiss Integrated Software RAW'],
|
256
258
|
DC3 => 'DICM',
|
257
259
|
DCM => 'DICM',
|
258
260
|
DCP => ['TIFF', 'DNG Camera Profile'],
|
@@ -527,6 +529,8 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
527
529
|
XLTM => [['ZIP','FPX'], 'Office Open XML Spreadsheet Template Macro-enabled'],
|
528
530
|
XLTX => [['ZIP','FPX'], 'Office Open XML Spreadsheet Template'],
|
529
531
|
XMP => ['XMP', 'Extensible Metadata Platform'],
|
532
|
+
WOFF => ['Font', 'Web Open Font Format'],
|
533
|
+
WOFF2=> ['Font', 'Web Open Font Format2'],
|
530
534
|
WTV => ['WTV', 'Windows recorded TV show'],
|
531
535
|
ZIP => ['ZIP', 'ZIP archive'],
|
532
536
|
);
|
@@ -581,6 +585,7 @@ my %fileDescription = (
|
|
581
585
|
CRM => 'video/x-canon-crm',
|
582
586
|
CRW => 'image/x-canon-crw',
|
583
587
|
CSV => 'text/csv',
|
588
|
+
CZI => 'image/x-zeiss-czi', #PH (NC)
|
584
589
|
DCP => 'application/octet-stream', #PH (NC)
|
585
590
|
DCR => 'image/x-kodak-dcr',
|
586
591
|
DCX => 'image/dcx',
|
@@ -781,6 +786,7 @@ my %moduleName = (
|
|
781
786
|
CRW => 'CanonRaw',
|
782
787
|
CHM => 'EXE',
|
783
788
|
COS => 'CaptureOne',
|
789
|
+
CZI => 'ZISRAW',
|
784
790
|
DEX => 0,
|
785
791
|
DOCX => 'OOXML',
|
786
792
|
DCX => 0,
|
@@ -851,6 +857,7 @@ $testLen = 1024; # number of bytes to read when testing for magic number
|
|
851
857
|
BZ2 => 'BZh[1-9]\x31\x41\x59\x26\x53\x59',
|
852
858
|
CHM => 'ITSF.{20}\x10\xfd\x01\x7c\xaa\x7b\xd0\x11\x9e\x0c\0\xa0\xc9\x22\xe6\xec',
|
853
859
|
CRW => '(II|MM).{4}HEAP(CCDR|JPGM)',
|
860
|
+
CZI => 'ZISRAWFILE\0{6}',
|
854
861
|
DCX => '\xb1\x68\xde\x3a',
|
855
862
|
DEX => "dex\n035\0",
|
856
863
|
DICOM=> '(.{128}DICM|\0[\x02\x04\x06\x08]\0[\0-\x20]|[\x02\x04\x06\x08]\0[\0-\x20]\0)',
|
@@ -872,7 +879,7 @@ $testLen = 1024; # number of bytes to read when testing for magic number
|
|
872
879
|
FLIR => '[AF]FF\0',
|
873
880
|
FLV => 'FLV\x01',
|
874
881
|
Font => '((\0\x01\0\0|OTTO|true|typ1)[\0\x01]|ttcf\0[\x01\x02]\0\0|\0[\x01\x02]|' .
|
875
|
-
'(.{6})?%!(PS-(AdobeFont-|Bitstream )|FontType1-)|Start(Comp|Master)?FontMetrics)',
|
882
|
+
'(.{6})?%!(PS-(AdobeFont-|Bitstream )|FontType1-)|Start(Comp|Master)?FontMetrics|wOF[F2])',
|
876
883
|
FPF => 'FPF Public Image Format\0',
|
877
884
|
FPX => '\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1',
|
878
885
|
GIF => 'GIF8[79]a',
|
@@ -1445,6 +1452,11 @@ my %systemTagsNotes = (
|
|
1445
1452
|
return Image::ExifTool::XMP::CheckXMP($self, $tagInfo, \$val);
|
1446
1453
|
},
|
1447
1454
|
},
|
1455
|
+
XML => {
|
1456
|
+
Notes => 'the XML data block, extracted for some file types',
|
1457
|
+
Groups => { 0 => 'XML', 1 => 'XML' },
|
1458
|
+
Binary => 1,
|
1459
|
+
},
|
1448
1460
|
ICC_Profile => {
|
1449
1461
|
Notes => q{
|
1450
1462
|
the full ICC_Profile data block. This tag is generated only if specifically
|
@@ -2236,6 +2248,7 @@ sub ClearOptions($)
|
|
2236
2248
|
GeoSpeedRef => undef, # geotag GPSSpeedRef
|
2237
2249
|
GlobalTimeShift => undef, # apply time shift to all extracted date/time values
|
2238
2250
|
# Group# => undef, # return tags for specified groups in family #
|
2251
|
+
HexTagIDs => 0, # use hex tag ID's in family 7 group names
|
2239
2252
|
HtmlDump => 0, # HTML dump (0-3, higher # = bigger limit)
|
2240
2253
|
HtmlDumpBase => undef, # base address for HTML dump
|
2241
2254
|
IgnoreMinorErrors => undef, # ignore minor errors when reading/writing
|
@@ -2249,6 +2262,7 @@ sub ClearOptions($)
|
|
2249
2262
|
MakerNotes => undef, # extract maker notes as a block
|
2250
2263
|
MDItemTags => undef, # extract MacOS metadata item tags
|
2251
2264
|
MissingTagValue =>undef,# value for missing tags when expanded in expressions
|
2265
|
+
NoMultiExif => undef, # raise error when writing multi-segment EXIF
|
2252
2266
|
NoPDFList => undef, # flag to avoid splitting PDF List-type tag values
|
2253
2267
|
Password => undef, # password for password-protected PDF documents
|
2254
2268
|
PrintConv => 1, # flag to enable print conversion
|
@@ -3095,30 +3109,9 @@ sub GetValue($$;$)
|
|
3095
3109
|
}
|
3096
3110
|
if (ref $conv eq 'HASH') {
|
3097
3111
|
# look up converted value in hash
|
3098
|
-
|
3099
|
-
if (defined($value = $$conv{$val})) {
|
3100
|
-
# override with our localized language PrintConv if available
|
3101
|
-
if ($$self{CUR_LANG} and $convType eq 'PrintConv' and
|
3102
|
-
# (no need to check for lang-alt tag names -- they won't have a PrintConv)
|
3103
|
-
ref($lc = $$self{CUR_LANG}{$$tagInfo{Name}}) eq 'HASH' and
|
3104
|
-
($lc = $$lc{PrintConv}) and ($lc = $$lc{$value}))
|
3105
|
-
{
|
3106
|
-
$value = $self->Decode($lc, 'UTF8');
|
3107
|
-
}
|
3108
|
-
} else {
|
3112
|
+
if (not defined($value = $$conv{$val})) {
|
3109
3113
|
if ($$conv{BITMASK}) {
|
3110
3114
|
$value = DecodeBits($val, $$conv{BITMASK}, $$tagInfo{BitsPerWord});
|
3111
|
-
# override with localized language strings
|
3112
|
-
if (defined $value and $$self{CUR_LANG} and $convType eq 'PrintConv' and
|
3113
|
-
ref($lc = $$self{CUR_LANG}{$$tagInfo{Name}}) eq 'HASH' and
|
3114
|
-
($lc = $$lc{PrintConv}))
|
3115
|
-
{
|
3116
|
-
my @vals = split ', ', $value;
|
3117
|
-
foreach (@vals) {
|
3118
|
-
$_ = $$lc{$_} if defined $$lc{$_};
|
3119
|
-
}
|
3120
|
-
$value = join ', ', @vals;
|
3121
|
-
}
|
3122
3115
|
} else {
|
3123
3116
|
# use alternate conversion routine if available
|
3124
3117
|
if ($$conv{OTHER}) {
|
@@ -3131,12 +3124,30 @@ sub GetValue($$;$)
|
|
3131
3124
|
if ($$tagInfo{PrintHex} and $val and IsInt($val) and
|
3132
3125
|
$convType eq 'PrintConv')
|
3133
3126
|
{
|
3134
|
-
$
|
3127
|
+
$value = sprintf('Unknown (0x%x)',$val);
|
3128
|
+
} else {
|
3129
|
+
$value = "Unknown ($val)";
|
3135
3130
|
}
|
3136
|
-
$value = "Unknown ($val)";
|
3137
3131
|
}
|
3138
3132
|
}
|
3139
3133
|
}
|
3134
|
+
# override with our localized language PrintConv if available
|
3135
|
+
my $tmp;
|
3136
|
+
if ($$self{CUR_LANG} and $convType eq 'PrintConv' and
|
3137
|
+
# (no need to check for lang-alt tag names -- they won't have a PrintConv)
|
3138
|
+
ref($tmp = $$self{CUR_LANG}{$$tagInfo{Name}}) eq 'HASH' and
|
3139
|
+
($tmp = $$tmp{PrintConv}))
|
3140
|
+
{
|
3141
|
+
if ($$conv{BITMASK} and not defined $$conv{$val}) {
|
3142
|
+
my @vals = split ', ', $value;
|
3143
|
+
foreach (@vals) {
|
3144
|
+
$_ = $$tmp{$_} if defined $$tmp{$_};
|
3145
|
+
}
|
3146
|
+
$value = join ', ', @vals;
|
3147
|
+
} elsif (defined($tmp = $$tmp{$value})) {
|
3148
|
+
$value = $self->Decode($tmp, 'UTF8');
|
3149
|
+
}
|
3150
|
+
}
|
3140
3151
|
} else {
|
3141
3152
|
# call subroutine or do eval to convert value
|
3142
3153
|
local $SIG{'__WARN__'} = \&SetWarning;
|
@@ -3294,7 +3305,7 @@ sub GetGroup($$;$)
|
|
3294
3305
|
{
|
3295
3306
|
local $_;
|
3296
3307
|
my ($self, $tag, $family) = @_;
|
3297
|
-
my ($tagInfo, @groups, @families, $simplify, $byTagInfo, $ex);
|
3308
|
+
my ($tagInfo, @groups, @families, $simplify, $byTagInfo, $ex, $noID);
|
3298
3309
|
if (ref $tag eq 'HASH') {
|
3299
3310
|
$tagInfo = $tag;
|
3300
3311
|
$tag = $$tagInfo{Name};
|
@@ -3325,6 +3336,7 @@ sub GetGroup($$;$)
|
|
3325
3336
|
$simplify = 1 unless $family =~ /^:/;
|
3326
3337
|
undef $family;
|
3327
3338
|
foreach (0..2) { $groups[$_] = $$groups{$_}; }
|
3339
|
+
$noID = 1 if @families == 1 and $families[0] != 7;
|
3328
3340
|
} else {
|
3329
3341
|
return(($ex && $$ex{"G$family"}) || $$groups{$family}) if $family == 0 or $family == 2;
|
3330
3342
|
$groups[1] = $$groups{1};
|
@@ -3336,14 +3348,29 @@ sub GetGroup($$;$)
|
|
3336
3348
|
$groups[3] = 'Main';
|
3337
3349
|
$groups[4] = ($tag =~ /\((\d+)\)$/) ? "Copy$1" : '';
|
3338
3350
|
# handle dynamic group names if necessary
|
3339
|
-
|
3340
|
-
$
|
3341
|
-
|
3342
|
-
|
3343
|
-
|
3344
|
-
|
3345
|
-
|
3346
|
-
|
3351
|
+
unless ($byTagInfo) {
|
3352
|
+
if ($ex) {
|
3353
|
+
$groups[0] = $$ex{G0} if $$ex{G0};
|
3354
|
+
$groups[1] = $$ex{G1} =~ /^\+(.*)/ ? "$groups[1]$1" : $$ex{G1} if $$ex{G1};
|
3355
|
+
$groups[3] = 'Doc' . $$ex{G3} if $$ex{G3};
|
3356
|
+
$groups[5] = $$ex{G5} || $groups[1] if defined $$ex{G5};
|
3357
|
+
if (defined $$ex{G6}) {
|
3358
|
+
$groups[5] = '' unless defined $groups[5]; # (can't leave a hole in the array)
|
3359
|
+
$groups[6] = $$ex{G6};
|
3360
|
+
}
|
3361
|
+
}
|
3362
|
+
# generate tag ID group names unless obviously not needed
|
3363
|
+
unless ($noID) {
|
3364
|
+
my $id = $$tagInfo{TagID};
|
3365
|
+
if (not defined $id) {
|
3366
|
+
$id = ''; # (just to be safe)
|
3367
|
+
} elsif ($id =~ /^\d+$/) {
|
3368
|
+
$id = sprintf('0x%x', $id) if $$self{OPTIONS}{HexTagIDs};
|
3369
|
+
} else {
|
3370
|
+
$id =~ s/([^-_A-Za-z0-9])/sprintf('%.2x',ord $1)/ge;
|
3371
|
+
}
|
3372
|
+
$groups[7] = 'ID-' . $id;
|
3373
|
+
defined $groups[$_] or $groups[$_] = '' foreach (5,6);
|
3347
3374
|
}
|
3348
3375
|
}
|
3349
3376
|
if ($family) {
|
@@ -4191,6 +4218,22 @@ sub ParseArguments($;@)
|
|
4191
4218
|
}
|
4192
4219
|
}
|
4193
4220
|
|
4221
|
+
#------------------------------------------------------------------------------
|
4222
|
+
# Does group name match the tag ID?
|
4223
|
+
# Inputs: 0) tag ID, 1) group name (with "ID-" removed)
|
4224
|
+
# Returns: true on success
|
4225
|
+
sub IsSameID($$)
|
4226
|
+
{
|
4227
|
+
my ($id, $grp) = @_;
|
4228
|
+
return 1 if $grp eq $id; # decimal ID's or raw ID's
|
4229
|
+
if ($id =~ /^\d+$/) { # numerical numerical ID's may be in hex
|
4230
|
+
return 1 if $grp =~ s/^0x0*// and $grp eq sprintf('%x', $id);
|
4231
|
+
} else { # other ID's may conform to ExifTool group name conventions
|
4232
|
+
return 1 if $id =~ s/([^-_A-Za-z0-9])/sprintf('%.2x',ord $1)/ge and $grp eq $id;
|
4233
|
+
}
|
4234
|
+
return 0;
|
4235
|
+
}
|
4236
|
+
|
4194
4237
|
#------------------------------------------------------------------------------
|
4195
4238
|
# Get list of tags in specified group
|
4196
4239
|
# Inputs: 0) ExifTool ref, 1) group spec, 2) tag key or reference to list of tag keys
|
@@ -4202,40 +4245,41 @@ sub GroupMatches($$$)
|
|
4202
4245
|
my ($self, $group, $tagList) = @_;
|
4203
4246
|
$tagList = [ $tagList ] unless ref $tagList;
|
4204
4247
|
my ($tag, @matches);
|
4205
|
-
|
4206
|
-
|
4207
|
-
|
4208
|
-
|
4248
|
+
# check each group name individually (eg. "Author:1IPTC")
|
4249
|
+
my @grps = split ':', $group;
|
4250
|
+
my (@fmys, $g);
|
4251
|
+
for ($g=0; $g<@grps; ++$g) {
|
4252
|
+
if ($grps[$g] =~ s/^(\d*)(id-)?//i) {
|
4253
|
+
$fmys[$g] = $1 if length $1;
|
4254
|
+
if ($2) {
|
4255
|
+
$fmys[$g] = 7;
|
4256
|
+
next; # (don't convert tag ID's to lower case)
|
4257
|
+
}
|
4258
|
+
}
|
4259
|
+
$grps[$g] = lc $grps[$g];
|
4260
|
+
$grps[$g] = '' if $grps[$g] eq 'copy0'; # accept 'Copy0' for primary tag
|
4261
|
+
}
|
4262
|
+
foreach $tag (@$tagList) {
|
4263
|
+
my @groups = $self->GetGroup($tag, -1);
|
4209
4264
|
for ($g=0; $g<@grps; ++$g) {
|
4210
|
-
$
|
4211
|
-
$
|
4212
|
-
|
4213
|
-
|
4214
|
-
|
4215
|
-
|
4216
|
-
|
4217
|
-
next if $grp eq '*' or $grp eq 'all';
|
4218
|
-
if (defined $fmys[$g]) {
|
4219
|
-
my $f = $fmys[$g];
|
4220
|
-
last unless defined $groups[$f] and $grp eq lc $groups[$f];
|
4265
|
+
my $grp = $grps[$g];
|
4266
|
+
next if $grp eq '*' or $grp eq 'all';
|
4267
|
+
my $f;
|
4268
|
+
if (defined($f = $fmys[$g])) {
|
4269
|
+
last unless defined $groups[$f];
|
4270
|
+
if ($f == 7) {
|
4271
|
+
next if IsSameID($self->GetTagID($tag), $grp);
|
4221
4272
|
} else {
|
4222
|
-
|
4273
|
+
next if $grp eq lc $groups[$f];
|
4223
4274
|
}
|
4224
|
-
|
4225
|
-
|
4226
|
-
|
4227
|
-
push @matches, $tag;
|
4275
|
+
last;
|
4276
|
+
} else {
|
4277
|
+
last unless grep /^$grp$/i, @groups;
|
4228
4278
|
}
|
4229
4279
|
}
|
4230
|
-
|
4231
|
-
|
4232
|
-
|
4233
|
-
foreach $tag (@$tagList) {
|
4234
|
-
my @groups = $self->GetGroup($tag, $family);
|
4235
|
-
if (grep(/^$group$/i, @groups)) {
|
4236
|
-
return $tag unless wantarray;
|
4237
|
-
push @matches, $tag;
|
4238
|
-
}
|
4280
|
+
if ($g == @grps) {
|
4281
|
+
return $tag unless wantarray;
|
4282
|
+
push @matches, $tag;
|
4239
4283
|
}
|
4240
4284
|
}
|
4241
4285
|
return wantarray ? @matches : $matches[0];
|
@@ -4694,13 +4738,13 @@ sub AddCompositeTags($;$)
|
|
4694
4738
|
my ($module, $prefix, $tagID);
|
4695
4739
|
unless (ref $add) {
|
4696
4740
|
($prefix = $add) =~ s/.*:://;
|
4697
|
-
$prefix .= '::';
|
4698
4741
|
$module = $add;
|
4699
4742
|
$add .= '::Composite';
|
4700
4743
|
no strict 'refs';
|
4701
4744
|
$add = \%$add;
|
4745
|
+
$prefix .= '-';
|
4702
4746
|
} else {
|
4703
|
-
$prefix = 'UserDefined
|
4747
|
+
$prefix = 'UserDefined-';
|
4704
4748
|
}
|
4705
4749
|
my $defaultGroups = $$add{GROUPS};
|
4706
4750
|
my $compTable = GetTagTable('Image::ExifTool::Composite');
|
@@ -5415,36 +5459,38 @@ sub GetDescriptions($$)
|
|
5415
5459
|
|
5416
5460
|
#------------------------------------------------------------------------------
|
5417
5461
|
# Apply filter to value(s) if necessary
|
5418
|
-
# Inputs: 0) ExifTool ref, 1) filter expression, 2
|
5419
|
-
# Returns:
|
5420
|
-
sub Filter(
|
5462
|
+
# Inputs: 0) ExifTool ref, 1) filter expression, 2) reference to value to filter
|
5463
|
+
# Returns: true unless a filter returned undef; changes value if necessary
|
5464
|
+
sub Filter($$$)
|
5421
5465
|
{
|
5422
5466
|
local $_;
|
5423
|
-
my $self =
|
5424
|
-
|
5425
|
-
|
5426
|
-
|
5427
|
-
|
5428
|
-
|
5429
|
-
|
5430
|
-
|
5431
|
-
|
5432
|
-
|
5433
|
-
|
5434
|
-
|
5435
|
-
|
5436
|
-
|
5437
|
-
|
5438
|
-
|
5439
|
-
|
5440
|
-
|
5441
|
-
|
5442
|
-
|
5443
|
-
|
5444
|
-
|
5445
|
-
|
5446
|
-
|
5467
|
+
my ($self, $filter, $valPt) = @_;
|
5468
|
+
return 1 unless defined $filter and defined $$valPt;
|
5469
|
+
my $rtnVal;
|
5470
|
+
if (not ref $$valPt) {
|
5471
|
+
$_ = $$valPt;
|
5472
|
+
#### eval Filter ($_, $self)
|
5473
|
+
eval $filter;
|
5474
|
+
if (defined $_) {
|
5475
|
+
$$valPt = $_;
|
5476
|
+
$rtnVal = 1;
|
5477
|
+
}
|
5478
|
+
} elsif (ref $$valPt eq 'SCALAR') {
|
5479
|
+
my $val = $$$valPt; # make a copy to avoid filtering twice
|
5480
|
+
$rtnVal = $self->Filter($filter, \$val);
|
5481
|
+
$$valPt = \$val;
|
5482
|
+
} elsif (ref $$valPt eq 'ARRAY') {
|
5483
|
+
my @val = @{$$valPt}; # make a copy to avoid filtering twice
|
5484
|
+
$self->Filter($filter, \$_) and $rtnVal = 1 foreach @val;
|
5485
|
+
$$valPt = \@val;
|
5486
|
+
} elsif (ref $$valPt eq 'HASH') {
|
5487
|
+
my %val = %{$$valPt}; # make a copy to avoid filtering twice
|
5488
|
+
$self->Filter($filter, \$val{$_}) and $rtnVal = 1 foreach keys %val;
|
5489
|
+
$$valPt = \%val;
|
5490
|
+
} else {
|
5491
|
+
$rtnVal = 1;
|
5447
5492
|
}
|
5493
|
+
return $rtnVal;
|
5448
5494
|
}
|
5449
5495
|
|
5450
5496
|
#------------------------------------------------------------------------------
|
@@ -7555,7 +7601,7 @@ sub ProcessDirectory($$$;$)
|
|
7555
7601
|
|
7556
7602
|
#------------------------------------------------------------------------------
|
7557
7603
|
# Get Metadata path
|
7558
|
-
# Inputs: 0)
|
7604
|
+
# Inputs: 0) ExifTool object ref
|
7559
7605
|
# Return: Metadata path string
|
7560
7606
|
sub MetadataPath($)
|
7561
7607
|
{
|
@@ -8197,7 +8243,7 @@ sub VerboseDir($$;$$)
|
|
8197
8243
|
}
|
8198
8244
|
my $indent = substr($$self{INDENT}, 0, -2);
|
8199
8245
|
my $out = $$self{OPTIONS}{TextOut};
|
8200
|
-
my $str = $entries ? " with $entries entries" : '';
|
8246
|
+
my $str = ($entries or defined $entries and not $size) ? " with $entries entries" : '';
|
8201
8247
|
$str .= ", $size bytes" if $size;
|
8202
8248
|
print $out "$indent+ [$name directory$str]\n";
|
8203
8249
|
}
|
data/bin/lib/Image/ExifTool.pod
CHANGED
@@ -65,35 +65,36 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
65
65
|
|
66
66
|
File Types
|
67
67
|
------------+-------------+-------------+-------------+------------
|
68
|
-
3FR r |
|
69
|
-
3G2 r/w |
|
70
|
-
3GP r/w |
|
71
|
-
A r |
|
72
|
-
AA r |
|
73
|
-
AAE r |
|
74
|
-
AAX r/w |
|
75
|
-
ACR r |
|
76
|
-
AFM r |
|
77
|
-
AI r/w |
|
78
|
-
AIFF r |
|
79
|
-
APE r |
|
80
|
-
ARQ r/w |
|
81
|
-
ARW r/w |
|
82
|
-
ASF r |
|
83
|
-
AVI r |
|
84
|
-
AVIF r/w |
|
85
|
-
AZW r |
|
86
|
-
BMP r |
|
87
|
-
BPG r |
|
88
|
-
BTF r |
|
89
|
-
CHM r |
|
90
|
-
COS r |
|
91
|
-
CR2 r/w |
|
92
|
-
CR3 r/w |
|
93
|
-
CRM r/w |
|
94
|
-
CRW r/w |
|
95
|
-
CS1 r/w |
|
96
|
-
CSV r |
|
68
|
+
3FR r | DPX r | ISO r | O r | RAW r/w
|
69
|
+
3G2 r/w | DR4 r/w/c | ITC r | ODP r | RIFF r
|
70
|
+
3GP r/w | DSS r | J2C r | ODS r | RSRC r
|
71
|
+
A r | DV r | JNG r/w | ODT r | RTF r
|
72
|
+
AA r | DVB r/w | JP2 r/w | OFR r | RW2 r/w
|
73
|
+
AAE r | DVR-MS r | JPEG r/w | OGG r | RWL r/w
|
74
|
+
AAX r/w | DYLIB r | JSON r | OGV r | RWZ r
|
75
|
+
ACR r | EIP r | K25 r | OPUS r | RM r
|
76
|
+
AFM r | EPS r/w | KDC r | ORF r/w | SEQ r
|
77
|
+
AI r/w | EPUB r | KEY r | OTF r | SKETCH r
|
78
|
+
AIFF r | ERF r/w | LA r | PAC r | SO r
|
79
|
+
APE r | EXE r | LFP r | PAGES r | SR2 r/w
|
80
|
+
ARQ r/w | EXIF r/w/c | LNK r | PBM r/w | SRF r
|
81
|
+
ARW r/w | EXR r | LRV r/w | PCD r | SRW r/w
|
82
|
+
ASF r | EXV r/w/c | M2TS r | PCX r | SVG r
|
83
|
+
AVI r | F4A/V r/w | M4A/V r/w | PDB r | SWF r
|
84
|
+
AVIF r/w | FFF r/w | MAX r | PDF r/w | THM r/w
|
85
|
+
AZW r | FITS r | MEF r/w | PEF r/w | TIFF r/w
|
86
|
+
BMP r | FLA r | MIE r/w/c | PFA r | TORRENT r
|
87
|
+
BPG r | FLAC r | MIFF r | PFB r | TTC r
|
88
|
+
BTF r | FLIF r/w | MKA r | PFM r | TTF r
|
89
|
+
CHM r | FLV r | MKS r | PGF r | TXT r
|
90
|
+
COS r | FPF r | MKV r | PGM r/w | VCF r
|
91
|
+
CR2 r/w | FPX r | MNG r/w | PLIST r | VRD r/w/c
|
92
|
+
CR3 r/w | GIF r/w | MOBI r | PICT r | VSD r
|
93
|
+
CRM r/w | GPR r/w | MODD r | PMP r | WAV r
|
94
|
+
CRW r/w | GZ r | MOI r | PNG r/w | WDP r/w
|
95
|
+
CS1 r/w | HDP r/w | MOS r/w | PPM r/w | WEBP r
|
96
|
+
CSV r | HDR r | MOV r/w | PPT r | WEBM r
|
97
|
+
CZI r | HEIC r/w | MP3 r | PPTX r | WMA r
|
97
98
|
DCM r | HEIF r/w | MP4 r/w | PS r/w | WMV r
|
98
99
|
DCP r/w | HTML r | MPC r | PSB r/w | WTV r
|
99
100
|
DCR r | ICC r/w/c | MPG r | PSD r/w | WV r
|
@@ -104,7 +105,6 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
104
105
|
DNG r/w | INSP r/w | NEF r/w | RAF r/w | XMP r/w/c
|
105
106
|
DOC r | INSV r | NRW r/w | RAM r | ZIP r
|
106
107
|
DOCX r | INX r | NUMBERS r | RAR r |
|
107
|
-
DPX r | ISO r | O r | RAW r/w |
|
108
108
|
|
109
109
|
Meta Information
|
110
110
|
----------------------+----------------------+---------------------
|
@@ -662,7 +662,7 @@ option is disabled.
|
|
662
662
|
Perl expression used to filter PrintConv values when writing. The
|
663
663
|
expression acts on the value of the Perl default variable ($_), and changes
|
664
664
|
the value of this variable as required. The current ExifTool object may be
|
665
|
-
accessed through $self. The
|
665
|
+
accessed through $self. The tag is not written if $_ is set to undef.
|
666
666
|
|
667
667
|
=item FixBase
|
668
668
|
|
@@ -731,6 +731,11 @@ to be excluded by preceding group name with a '-'. See L</GetGroup> for a
|
|
731
731
|
description of group families, and L</GetAllGroups [static]> for lists of
|
732
732
|
group names.
|
733
733
|
|
734
|
+
=item HexTagIDs
|
735
|
+
|
736
|
+
Use hexadecimal instead of decimal for the family 7 group names of tags with
|
737
|
+
numerical ID's.
|
738
|
+
|
734
739
|
=item HtmlDump
|
735
740
|
|
736
741
|
Dump information in hex to dynamic HTML web page. The value may be 0-3 for
|
@@ -809,6 +814,11 @@ formatting expression returns undef). If not set, a minor error is issued
|
|
809
814
|
for missing values, or the value is set to '' if L</IgnoreMinorErrors> is
|
810
815
|
set. Default is undef.
|
811
816
|
|
817
|
+
=item NoMultiExif
|
818
|
+
|
819
|
+
Raise error when attempting to write multi-segment EXIF in a JPEG image.
|
820
|
+
Default is undef.
|
821
|
+
|
812
822
|
=item NoPDFList
|
813
823
|
|
814
824
|
Flag to avoid splitting PDF list-type tag values into separate items.
|
@@ -1601,7 +1611,8 @@ values in list context.
|
|
1601
1611
|
|
1602
1612
|
0) ExifTool object reference
|
1603
1613
|
|
1604
|
-
1) Tag name (case sensitive, may be prefixed by family 0 or
|
1614
|
+
1) Tag name (case sensitive, may be prefixed by family 0, 1 or 7 group
|
1615
|
+
names, separated by colons)
|
1605
1616
|
|
1606
1617
|
=item Return Values:
|
1607
1618
|
|
@@ -1663,34 +1674,35 @@ in a specified file.
|
|
1663
1674
|
|
1664
1675
|
2-N) [optional] List of tag names to set or options hash references. All
|
1665
1676
|
writable tags are set if none are specified. The tag names are not case
|
1666
|
-
sensitive, and may be prefixed by one or more family 0, 1 or
|
1667
|
-
with optional leading family numbers, separated by colons (eg.
|
1668
|
-
A leading '-' indicates tags to be excluded (eg. '-comment'),
|
1669
|
-
'#' causes the ValueConv value to be copied (same as setting
|
1670
|
-
to 'ValueConv' for this tag only). Wildcards ('*' and '?')
|
1671
|
-
the tag name. A tag name of '*' is commonly used when a
|
1672
|
-
to copy all tags in the group (eg. 'XMP:*'). A special
|
1673
|
-
names of the form 'DSTTAGE<lt>SRCTAG' (or
|
1674
|
-
specified to copy information to a tag with a
|
1675
|
-
group. Both 'SRCTAG' and 'DSTTAG' may contain
|
1676
|
-
by a group name (eg.
|
1677
|
-
and/or suffixed by a '#'
|
1678
|
-
|
1679
|
-
'DSTTAG+E<lt>SRCTAG' or
|
1680
|
-
|
1681
|
-
|
1682
|
-
|
1683
|
-
Braces '{}' may be used
|
1684
|
-
|
1685
|
-
|
1686
|
-
The tag value may be modified
|
1687
|
-
|
1688
|
-
following the tag name (see the last
|
1689
|
-
after the tag name (before the
|
1690
|
-
|
1691
|
-
|
1692
|
-
references may be passed to set
|
1693
|
-
Options apply to subsequent tags in
|
1677
|
+
sensitive, and may be prefixed by one or more family 0, 1, 2 or 7 group
|
1678
|
+
names with optional leading family numbers, separated by colons (eg.
|
1679
|
+
'exif:iso'). A leading '-' indicates tags to be excluded (eg. '-comment'),
|
1680
|
+
or a trailing '#' causes the ValueConv value to be copied (same as setting
|
1681
|
+
the Type option to 'ValueConv' for this tag only). Wildcards ('*' and '?')
|
1682
|
+
may be used in the tag name. A tag name of '*' is commonly used when a
|
1683
|
+
group is specified to copy all tags in the group (eg. 'XMP:*'). A special
|
1684
|
+
feature allows tag names of the form 'DSTTAGE<lt>SRCTAG' (or
|
1685
|
+
'SRCTAGE<gt>DSTTAG') to be specified to copy information to a tag with a
|
1686
|
+
different name or a specified group. Both 'SRCTAG' and 'DSTTAG' may contain
|
1687
|
+
wildcards and/or be prefixed by a group name (eg.
|
1688
|
+
'fileModifyDateE<lt>modifyDate' or 'xmp:*E<lt>*'), and/or suffixed by a '#'
|
1689
|
+
to disable print conversion. Copied tags may also be added or deleted from
|
1690
|
+
a list with arguments of the form 'DSTTAG+E<lt>SRCTAG' or
|
1691
|
+
'DSTTAG-E<lt>SRCTAG'. Tags are evaluated in order, so exclusions apply only
|
1692
|
+
to tags included earlier in the list. An extension of this feature allows
|
1693
|
+
the tag value to be set from a string containing tag names with leading '$'
|
1694
|
+
symbols (eg. 'CommentE<lt>the file is $filename'). Braces '{}' may be used
|
1695
|
+
around the tag name to separate it from subsequent text, and a '$$' is used
|
1696
|
+
to to represent a '$' symbol. The behaviour for missing tags in expressions
|
1697
|
+
is defined by the L</MissingTagValue> option. The tag value may be modified
|
1698
|
+
via changes to the default input variable ($_) in a Perl expression placed
|
1699
|
+
inside the braces and after a semicolon following the tag name (see the last
|
1700
|
+
example above). A '@' may be added after the tag name (before the
|
1701
|
+
semicolon) to make the expression act on individual list items instead of
|
1702
|
+
the concatenated string for list-type tags. Braces within the expression
|
1703
|
+
must be balanced. Multiple options hash references may be passed to set
|
1704
|
+
different options for different tags. Options apply to subsequent tags in
|
1705
|
+
the argument list.
|
1694
1706
|
|
1695
1707
|
By default, this routine will commute information between same-named tags in
|
1696
1708
|
different groups, allowing information to be translated between images with
|
@@ -2067,6 +2079,14 @@ Family 6 is currently used only for EXIF/TIFF metadata, and gives the format
|
|
2067
2079
|
type of the extracted value. Generated only if the L</SaveFormat> option is
|
2068
2080
|
used when extracting.
|
2069
2081
|
|
2082
|
+
Family 7 is used for tag ID's. The group names are "ID-" followed by the
|
2083
|
+
tag ID with characters other than [-_A-Za-z0-9] converted to hex. Numerical
|
2084
|
+
tag ID's are given in hex if the L</HexTagIDs> option is set. When
|
2085
|
+
specifying a family 7 group name, numerical ID's may be in hex or decimal,
|
2086
|
+
and non-numercal ID's may or may not have characters other than
|
2087
|
+
[-_A-Za-z0-9] converted to hex. Note that unlike other group names, family
|
2088
|
+
7 group names are case sensitive (except for the leading "ID-").
|
2089
|
+
|
2070
2090
|
See L</GetAllGroups [static]> for complete lists of group names.
|
2071
2091
|
|
2072
2092
|
=back
|
@@ -2260,22 +2280,22 @@ ICC-meta, ICC-view, ICC_Profile, ICC_Profile#, ID3, ID3v1, ID3v1_Enh,
|
|
2260
2280
|
ID3v2_2, ID3v2_3, ID3v2_4, IFD0, IFD1, IPTC, IPTC#, ISO, ITC, Insta360,
|
2261
2281
|
InteropIFD, ItemList, JFIF, JFXX, JPEG, JPEG-HDR, JSON, JVC, Jpeg2000,
|
2262
2282
|
KDC_IFD, Keys, Kodak, KodakBordersIFD, KodakEffectsIFD, KodakIFD,
|
2263
|
-
KyoceraRaw, LNK, Leaf, LeafSubIFD, Leica, Lytro, M2TS, MAC,
|
2264
|
-
MIE-Camera, MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS,
|
2265
|
-
MIE-Image, MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta,
|
2266
|
-
MIE-Preview, MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video,
|
2267
|
-
MOBI, MOI, MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS,
|
2268
|
-
MakerUnknown, Matroska, MediaJukebox, Meta, MetaIFD, Microsoft,
|
2269
|
-
MinoltaRaw, Motorola, NITF, Nikon, NikonCapture, NikonCustom,
|
2270
|
-
Nintendo, Ocad, Ogg, Olympus, OpenEXR, Opus, PDF, PICT, PNG,
|
2271
|
-
Palm, Panasonic, PanasonicRaw, Pentax, PhaseOne, PhotoCD,
|
2272
|
-
Photoshop, PictureInfo, PostScript, PreviewIFD, PrintIM,
|
2273
|
-
Qualcomm, QuickTime, RAF, RAF2, RIFF, RMETA, RSRC, RTF,
|
2274
|
-
Real, Real-CONT, Real-MDPR, Real-PROP, Real-RA3, Real-RA4,
|
2275
|
-
Real-RJMD, Reconyx, Red, Ricoh, SPIFF, SR2, SR2DataIFD, SR2SubIFD,
|
2276
|
-
SVG, Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim,
|
2277
|
-
System, Theora, Torrent, Track#, UserData, UserParam, VCalendar,
|
2278
|
-
Version0, Vorbis, WTV, XML, XMP, XMP-DICOM, XMP-Device, XMP-GAudio,
|
2283
|
+
KyoceraRaw, LNK, Leaf, LeafSubIFD, Leica, Lyrics3, Lytro, M2TS, MAC,
|
2284
|
+
MIE-Audio, MIE-Camera, MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS,
|
2285
|
+
MIE-Geo, MIE-Image, MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta,
|
2286
|
+
MIE-Orient, MIE-Preview, MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video,
|
2287
|
+
MIFF, MNG, MOBI, MOI, MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS,
|
2288
|
+
MakerNotes, MakerUnknown, Matroska, MediaJukebox, Meta, MetaIFD, Microsoft,
|
2289
|
+
Minolta, MinoltaRaw, Motorola, NITF, Nikon, NikonCapture, NikonCustom,
|
2290
|
+
NikonScan, Nintendo, Ocad, Ogg, Olympus, OpenEXR, Opus, PDF, PICT, PNG,
|
2291
|
+
PNG-pHYs, PSP, Palm, Panasonic, PanasonicRaw, Pentax, PhaseOne, PhotoCD,
|
2292
|
+
PhotoMechanic, Photoshop, PictureInfo, PostScript, PreviewIFD, PrintIM,
|
2293
|
+
ProfileIFD, Qualcomm, QuickTime, RAF, RAF2, RIFF, RMETA, RSRC, RTF,
|
2294
|
+
Radiance, Rawzor, Real, Real-CONT, Real-MDPR, Real-PROP, Real-RA3, Real-RA4,
|
2295
|
+
Real-RA5, Real-RJMD, Reconyx, Red, Ricoh, SPIFF, SR2, SR2DataIFD, SR2SubIFD,
|
2296
|
+
SRF#, SVG, Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim,
|
2297
|
+
SubIFD, System, Theora, Torrent, Track#, UserData, UserParam, VCalendar,
|
2298
|
+
VCard, Version0, Vorbis, WTV, XML, XMP, XMP-DICOM, XMP-Device, XMP-GAudio,
|
2279
2299
|
XMP-GDepth, XMP-GFocus, XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage,
|
2280
2300
|
XMP-MP, XMP-MP1, XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album,
|
2281
2301
|
XMP-apple-fi, XMP-aux, XMP-cc, XMP-cell, XMP-creatorAtom, XMP-crs, XMP-dc,
|
@@ -2309,6 +2329,12 @@ eg. JPEG-APP1-IFD0-ExifIFD
|
|
2309
2329
|
int8u, string, int16u, int32u, rational64u, int8s, undef, int16s, int32s,
|
2310
2330
|
rational64s, float, double, ifd, unicode, complex, int64u, int64s, ifd64
|
2311
2331
|
|
2332
|
+
=item Family 7 (Tag ID):
|
2333
|
+
|
2334
|
+
ID-xxx (where xxx is the tag ID. Numerical ID's are given in hex with a
|
2335
|
+
leading "0x" if the HexTagIDs option is set, as are characters in
|
2336
|
+
non-numerical ID's which are not valid in a group name)
|
2337
|
+
|
2312
2338
|
=back
|
2313
2339
|
|
2314
2340
|
=head2 GetDeleteGroups [static]
|
@@ -2588,7 +2614,7 @@ IPTC Core and Extension specifications actually use the XMP format.)
|
|
2588
2614
|
|
2589
2615
|
=head2 XMP
|
2590
2616
|
|
2591
|
-
|
2617
|
+
ExifTool reads XMP encoded as UTF-8, UTF-16 or UTF-32, and converts them all
|
2592
2618
|
to UTF-8 internally. Also, all XML character entity references and numeric
|
2593
2619
|
character references are converted. When writing, ExifTool always encodes
|
2594
2620
|
XMP as UTF-8, converting the following 5 characters to XML character
|