exiftool_vendored 11.99.0 → 12.06.0
Sign up to get free protection for your applications and to get access to all the features.
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
|