exiftool_vendored 12.15.0 → 12.22.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.
- checksums.yaml +4 -4
- data/bin/Changes +96 -2
- data/bin/MANIFEST +1 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/config_files/example.config +1 -8
- data/bin/exiftool +104 -59
- data/bin/fmt_files/gpx.fmt +1 -1
- data/bin/fmt_files/gpx_wpt.fmt +1 -1
- data/bin/fmt_files/kml.fmt +1 -1
- data/bin/fmt_files/kml_track.fmt +1 -1
- data/bin/lib/Image/ExifTool.pm +74 -24
- data/bin/lib/Image/ExifTool.pod +34 -24
- data/bin/lib/Image/ExifTool/Apple.pm +3 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +24 -13
- data/bin/lib/Image/ExifTool/Canon.pm +26 -2
- data/bin/lib/Image/ExifTool/CanonCustom.pm +19 -1
- data/bin/lib/Image/ExifTool/DJI.pm +6 -6
- data/bin/lib/Image/ExifTool/DPX.pm +3 -3
- data/bin/lib/Image/ExifTool/Exif.pm +35 -16
- data/bin/lib/Image/ExifTool/FITS.pm +13 -2
- data/bin/lib/Image/ExifTool/FujiFilm.pm +2 -1
- data/bin/lib/Image/ExifTool/GPS.pm +24 -13
- data/bin/lib/Image/ExifTool/H264.pm +20 -5
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
- data/bin/lib/Image/ExifTool/M2TS.pm +40 -4
- data/bin/lib/Image/ExifTool/MIE.pm +2 -2
- data/bin/lib/Image/ExifTool/Microsoft.pm +296 -82
- data/bin/lib/Image/ExifTool/Nikon.pm +5 -5
- data/bin/lib/Image/ExifTool/NikonSettings.pm +16 -16
- data/bin/lib/Image/ExifTool/Olympus.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +58 -30
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +27 -8
- data/bin/lib/Image/ExifTool/README +5 -4
- data/bin/lib/Image/ExifTool/RIFF.pm +2 -2
- data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
- data/bin/lib/Image/ExifTool/Sony.pm +63 -29
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
- data/bin/lib/Image/ExifTool/TagLookup.pm +4032 -3981
- data/bin/lib/Image/ExifTool/TagNames.pod +261 -104
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +7 -5
- data/bin/lib/Image/ExifTool/WriteXMP.pl +9 -6
- data/bin/lib/Image/ExifTool/Writer.pl +49 -14
- data/bin/lib/Image/ExifTool/XMP.pm +31 -5
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +48 -6
data/bin/fmt_files/gpx.fmt
CHANGED
data/bin/fmt_files/gpx_wpt.fmt
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# Description: Example ExifTool print format file to generate GPX waypoints
|
|
5
5
|
# with pictures
|
|
6
6
|
#
|
|
7
|
-
# Usage: exiftool -p gpx_wpt.fmt -
|
|
7
|
+
# Usage: exiftool -p gpx_wpt.fmt -ee3 FILE [...] > out.gpx
|
|
8
8
|
#
|
|
9
9
|
# Requires: ExifTool version 10.49 or later
|
|
10
10
|
#
|
data/bin/fmt_files/kml.fmt
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
# 2020/01/11 - F. Kotov Limited image preview size to 500px
|
|
16
16
|
#
|
|
17
17
|
# Notes: 1) Input files must contain GPSLatitude and GPSLongitude.
|
|
18
|
-
# 2) Add the -
|
|
18
|
+
# 2) Add the -ee3 option to extract the full track from video files.
|
|
19
19
|
# 3) For Google Earth to be able to find the images, the input
|
|
20
20
|
# images must be specified using relative paths, and "out.kml"
|
|
21
21
|
# must stay in the same directory as where the command was run.
|
data/bin/fmt_files/kml_track.fmt
CHANGED
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 = '12.
|
|
31
|
+
$VERSION = '12.22';
|
|
32
32
|
$RELEASE = '';
|
|
33
33
|
@ISA = qw(Exporter);
|
|
34
34
|
%EXPORT_TAGS = (
|
|
@@ -42,7 +42,7 @@ $RELEASE = '';
|
|
|
42
42
|
DataAccess => [qw(
|
|
43
43
|
ReadValue GetByteOrder SetByteOrder ToggleByteOrder Get8u Get8s Get16u
|
|
44
44
|
Get16s Get32u Get32s Get64u GetFloat GetDouble GetFixed32s Write
|
|
45
|
-
WriteValue Tell Set8u Set8s Set16u Set32u Set64u
|
|
45
|
+
WriteValue Tell Set8u Set8s Set16u Set32u Set64u Set64s
|
|
46
46
|
)],
|
|
47
47
|
Utils => [qw(GetTagTable TagTableKeys GetTagInfoList AddTagToTable HexDump)],
|
|
48
48
|
Vars => [qw(%allTables @tableOrder @fileTypes)],
|
|
@@ -70,7 +70,7 @@ sub SetFileName($$;$$$);
|
|
|
70
70
|
sub SetSystemTags($$);
|
|
71
71
|
sub GetAllTags(;$);
|
|
72
72
|
sub GetWritableTags(;$);
|
|
73
|
-
sub GetAllGroups(
|
|
73
|
+
sub GetAllGroups($;$);
|
|
74
74
|
sub GetNewGroups($);
|
|
75
75
|
sub GetDeleteGroups();
|
|
76
76
|
sub AddUserDefinedTags($%);
|
|
@@ -89,6 +89,7 @@ sub Get64u($$);
|
|
|
89
89
|
sub GetFixed64s($$);
|
|
90
90
|
sub GetExtended($$);
|
|
91
91
|
sub Set64u(@);
|
|
92
|
+
sub Set64s(@);
|
|
92
93
|
sub DecodeBits($$;$);
|
|
93
94
|
sub EncodeBits($$;$$);
|
|
94
95
|
sub Filter($$$);
|
|
@@ -266,6 +267,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
|
266
267
|
DIB => ['BMP', 'Device Independent Bitmap'],
|
|
267
268
|
DIC => 'DICM',
|
|
268
269
|
DICM => ['DICOM','Digital Imaging and Communications in Medicine'],
|
|
270
|
+
DIR => ['DIR', 'Directory'],
|
|
269
271
|
DIVX => ['ASF', 'DivX media format'],
|
|
270
272
|
DJV => 'DJVU',
|
|
271
273
|
DJVU => ['AIFF', 'DjVu image'],
|
|
@@ -1129,6 +1131,13 @@ my %systemTagsNotes = (
|
|
|
1129
1131
|
RawConv => '$self->ConvertFileName($val)',
|
|
1130
1132
|
ValueConvInv => '$self->InverseFileName($val)',
|
|
1131
1133
|
},
|
|
1134
|
+
BaseName => {
|
|
1135
|
+
Groups => { 1 => 'System', 2 => 'Other' },
|
|
1136
|
+
Notes => q{
|
|
1137
|
+
file name without extension. Not generated unless specifically requested or
|
|
1138
|
+
the L<RequestAll|../ExifTool.html#RequestAll> API option is set
|
|
1139
|
+
},
|
|
1140
|
+
},
|
|
1132
1141
|
FilePath => {
|
|
1133
1142
|
Groups => { 1 => 'System', 2 => 'Other' },
|
|
1134
1143
|
Notes => q{
|
|
@@ -1270,10 +1279,19 @@ my %systemTagsNotes = (
|
|
|
1270
1279
|
WritePseudo => 1,
|
|
1271
1280
|
DelCheck => q{"Can't delete"},
|
|
1272
1281
|
Protected => 1, # all writable pseudo-tags must be protected!
|
|
1273
|
-
ValueConv => 'sprintf("%.3o", $val
|
|
1274
|
-
ValueConvInv => 'oct($val)',
|
|
1282
|
+
ValueConv => 'sprintf("%.3o", $val)',
|
|
1283
|
+
ValueConvInv => 'oct($val & 07777)',
|
|
1275
1284
|
PrintConv => sub {
|
|
1276
|
-
my ($mask, $
|
|
1285
|
+
my ($mask, $val) = (0400, oct(shift));
|
|
1286
|
+
my %types = (
|
|
1287
|
+
0010000 => 'p',
|
|
1288
|
+
0020000 => 'c',
|
|
1289
|
+
0040000 => 'd',
|
|
1290
|
+
0060000 => 'b',
|
|
1291
|
+
0120000 => 'l',
|
|
1292
|
+
0140000 => 's',
|
|
1293
|
+
);
|
|
1294
|
+
my $str = $types{$val & 0170000} || '-';
|
|
1277
1295
|
while ($mask) {
|
|
1278
1296
|
foreach (qw(r w x)) {
|
|
1279
1297
|
$str .= $val & $mask ? $_ : '-';
|
|
@@ -1284,6 +1302,7 @@ my %systemTagsNotes = (
|
|
|
1284
1302
|
},
|
|
1285
1303
|
PrintConvInv => sub {
|
|
1286
1304
|
my ($bit, $val, $str) = (8, 0, shift);
|
|
1305
|
+
$str = substr($str, 1) if length($str) == 10;
|
|
1287
1306
|
return undef if length($str) != 9;
|
|
1288
1307
|
while ($bit >= 0) {
|
|
1289
1308
|
foreach (qw(r w x)) {
|
|
@@ -2271,7 +2290,7 @@ sub ClearOptions($)
|
|
|
2271
2290
|
NoPDFList => undef, # flag to avoid splitting PDF List-type tag values
|
|
2272
2291
|
Password => undef, # password for password-protected PDF documents
|
|
2273
2292
|
PrintConv => 1, # flag to enable print conversion
|
|
2274
|
-
QuickTimeHandler =>
|
|
2293
|
+
QuickTimeHandler => 1, # flag to add mdir Handler to newly created Meta box
|
|
2275
2294
|
QuickTimeUTC=> undef, # assume that QuickTime date/time tags are stored as UTC
|
|
2276
2295
|
RequestAll => undef, # extract all tags that must be specifically requested
|
|
2277
2296
|
RequestTags => undef, # extra tags to request (on top of those in the tag list)
|
|
@@ -2321,7 +2340,7 @@ sub ExtractInfo($;@)
|
|
|
2321
2340
|
my $fast = $$options{FastScan} || 0;
|
|
2322
2341
|
my $req = $$self{REQ_TAG_LOOKUP};
|
|
2323
2342
|
my $reqAll = $$options{RequestAll} || 0;
|
|
2324
|
-
my (%saveOptions, $reEntry, $rsize, $type, @startTime, $saveOrder);
|
|
2343
|
+
my (%saveOptions, $reEntry, $rsize, $type, @startTime, $saveOrder, $isDir);
|
|
2325
2344
|
|
|
2326
2345
|
# check for internal ReEntry option to allow recursive calls to ExtractInfo
|
|
2327
2346
|
if (ref $_[1] eq 'HASH' and $_[1]{ReEntry} and
|
|
@@ -2394,6 +2413,11 @@ sub ExtractInfo($;@)
|
|
|
2394
2413
|
$realname =~ /\|$/ and $realname =~ s/^.*?"(.*?)".*/$1/s;
|
|
2395
2414
|
my ($dir, $name) = SplitFileName($realname);
|
|
2396
2415
|
$self->FoundTag('FileName', $name);
|
|
2416
|
+
if ($$req{basename} or
|
|
2417
|
+
($reqAll and not $$self{EXCL_TAG_LOOKUP}{basename}))
|
|
2418
|
+
{
|
|
2419
|
+
$self->FoundTag('BaseName', $name =~ /(.*)\./ ? $1 : $name);
|
|
2420
|
+
}
|
|
2397
2421
|
$self->FoundTag('Directory', $dir) if defined $dir and length $dir;
|
|
2398
2422
|
if ($$req{filepath} or
|
|
2399
2423
|
($reqAll and not $$self{EXCL_TAG_LOOKUP}{filepath}))
|
|
@@ -2417,6 +2441,8 @@ sub ExtractInfo($;@)
|
|
|
2417
2441
|
# in Windows cmd shell pipe even though it really failed
|
|
2418
2442
|
$$raf{TESTED} = -1 if $filename eq '-' or $filename =~ /\|$/;
|
|
2419
2443
|
$$self{RAF} = $raf;
|
|
2444
|
+
} elsif ($self->IsDirectory($filename)) {
|
|
2445
|
+
$isDir = 1;
|
|
2420
2446
|
} else {
|
|
2421
2447
|
$self->Error('Error opening file');
|
|
2422
2448
|
}
|
|
@@ -2425,28 +2451,34 @@ sub ExtractInfo($;@)
|
|
|
2425
2451
|
}
|
|
2426
2452
|
}
|
|
2427
2453
|
|
|
2428
|
-
while ($raf) {
|
|
2429
|
-
my (@stat, $
|
|
2454
|
+
while ($raf or $isDir) {
|
|
2455
|
+
my (@stat, $plainFile);
|
|
2430
2456
|
if ($reEntry) {
|
|
2431
2457
|
# we already set these tags
|
|
2458
|
+
} elsif (not $raf) {
|
|
2459
|
+
@stat = stat $filename;
|
|
2432
2460
|
} elsif (not $$raf{FILE_PT}) {
|
|
2433
2461
|
# get file size from image in memory
|
|
2434
2462
|
$self->FoundTag('FileSize', length ${$$raf{BUFF_PT}});
|
|
2435
2463
|
} elsif (-f $$raf{FILE_PT}) {
|
|
2436
2464
|
# get file tags if this is a plain file
|
|
2437
|
-
$fileSize = -s _;
|
|
2438
2465
|
@stat = stat _;
|
|
2439
|
-
|
|
2440
|
-
|
|
2441
|
-
$self->
|
|
2442
|
-
$self->FoundTag('FileModifyDate', $mTime) if defined $mTime;
|
|
2443
|
-
$self->FoundTag('FileAccessDate', $aTime) if defined $aTime;
|
|
2444
|
-
my $cTag = $^O eq 'MSWin32' ? 'FileCreateDate' : 'FileInodeChangeDate';
|
|
2445
|
-
$self->FoundTag($cTag, $cTime) if defined $cTime;
|
|
2446
|
-
$self->FoundTag('FilePermissions', $stat[2]) if defined $stat[2];
|
|
2466
|
+
$plainFile = 1;
|
|
2467
|
+
# hack to patch Windows daylight savings time bug
|
|
2468
|
+
@stat[8,9,10] = $self->GetFileTime($$raf{FILE_PT}) if $^O eq 'MSWin32';
|
|
2447
2469
|
} else {
|
|
2470
|
+
# (note that Windows directories will still show the
|
|
2471
|
+
# daylight savings time bug -- should fix this sometime)
|
|
2448
2472
|
@stat = stat $$raf{FILE_PT};
|
|
2449
2473
|
}
|
|
2474
|
+
my $fileSize = $stat[7];
|
|
2475
|
+
$self->FoundTag('FileSize', $stat[7]) if defined $stat[7];
|
|
2476
|
+
$self->FoundTag('ResourceForkSize', $rsize) if $rsize;
|
|
2477
|
+
$self->FoundTag('FileModifyDate', $stat[9]) if defined $stat[9];
|
|
2478
|
+
$self->FoundTag('FileAccessDate', $stat[8]) if defined $stat[8];
|
|
2479
|
+
my $cTag = $^O eq 'MSWin32' ? 'FileCreateDate' : 'FileInodeChangeDate';
|
|
2480
|
+
$self->FoundTag($cTag, $stat[10]) if defined $stat[10];
|
|
2481
|
+
$self->FoundTag('FilePermissions', $stat[2]) if defined $stat[2];
|
|
2450
2482
|
# extract more system info if SystemTags option is set
|
|
2451
2483
|
if (@stat) {
|
|
2452
2484
|
my $sys = $$options{SystemTags} || ($reqAll and not defined $$options{SystemTags});
|
|
@@ -2486,11 +2518,18 @@ sub ExtractInfo($;@)
|
|
|
2486
2518
|
if ($crDate or $mdItem or $xattr) {
|
|
2487
2519
|
require Image::ExifTool::MacOS;
|
|
2488
2520
|
Image::ExifTool::MacOS::GetFileCreateDate($self, $filename) if $crDate;
|
|
2489
|
-
Image::ExifTool::MacOS::ExtractMDItemTags($self, $filename) if $mdItem;
|
|
2521
|
+
Image::ExifTool::MacOS::ExtractMDItemTags($self, $filename) if $mdItem and $plainFile;
|
|
2490
2522
|
Image::ExifTool::MacOS::ExtractXAttrTags($self, $filename) if $xattr;
|
|
2491
2523
|
}
|
|
2492
2524
|
}
|
|
2493
|
-
|
|
2525
|
+
# do whatever else we can with directories, then return
|
|
2526
|
+
if ($isDir or (defined $stat[2] and ($stat[2] & 0170000) == 0040000)) {
|
|
2527
|
+
$self->FoundTag('FileType', 'DIR');
|
|
2528
|
+
$self->FoundTag('FileTypeExtension', '');
|
|
2529
|
+
$self->BuildCompositeTags() if $$options{Composite};
|
|
2530
|
+
$raf->Close() if $raf;
|
|
2531
|
+
return 1;
|
|
2532
|
+
}
|
|
2494
2533
|
# get list of file types to check
|
|
2495
2534
|
my ($tiffType, %noMagic, $recognizedExt);
|
|
2496
2535
|
my $ext = $$self{FILE_EXT} = GetFileExtension($realname);
|
|
@@ -4079,7 +4118,14 @@ sub GetFileTime($$)
|
|
|
4079
4118
|
# open file by name if necessary
|
|
4080
4119
|
unless (ref $file) {
|
|
4081
4120
|
local *FH;
|
|
4082
|
-
$self->Open(\*FH, $file)
|
|
4121
|
+
unless ($self->Open(\*FH, $file)) {
|
|
4122
|
+
if ($self->IsDirectory($file)) {
|
|
4123
|
+
my @rtn = (stat $file)[8, 9, 10];
|
|
4124
|
+
return @rtn if defined $rtn[0];
|
|
4125
|
+
}
|
|
4126
|
+
$self->Warn("GetFileTime error for '${file}'");
|
|
4127
|
+
return ();
|
|
4128
|
+
}
|
|
4083
4129
|
$file = *FH; # (not \*FH, so *FH will be kept open until $file goes out of scope)
|
|
4084
4130
|
}
|
|
4085
4131
|
# on Windows, try to work around incorrect file times when daylight saving time is in effect
|
|
@@ -5710,7 +5756,11 @@ sub GetUnixTime($;$)
|
|
|
5710
5756
|
my ($timeStr, $isLocal) = @_;
|
|
5711
5757
|
return 0 if $timeStr eq '0000:00:00 00:00:00';
|
|
5712
5758
|
my @tm = ($timeStr =~ /^(\d+):(\d+):(\d+)\s+(\d+):(\d+):(\d+)(.*)/);
|
|
5713
|
-
return undef unless @tm == 7
|
|
5759
|
+
return undef unless @tm == 7;
|
|
5760
|
+
unless (eval { require Time::Local }) {
|
|
5761
|
+
warn "Time::Local is not installed\n";
|
|
5762
|
+
return undef;
|
|
5763
|
+
}
|
|
5714
5764
|
my ($tzStr, $tzSec) = (pop(@tm), 0);
|
|
5715
5765
|
# use specified timezone offset (if given) instead of local system time
|
|
5716
5766
|
# if we are converting a local time value
|
|
@@ -5908,7 +5958,7 @@ sub ProcessTrailers($$)
|
|
|
5908
5958
|
for (;;) { # loop through all trailers
|
|
5909
5959
|
my ($proc, $outBuff);
|
|
5910
5960
|
if ($dirName eq 'Insta360') {
|
|
5911
|
-
require
|
|
5961
|
+
require 'Image/ExifTool/QuickTimeStream.pl';
|
|
5912
5962
|
$proc = 'Image::ExifTool::QuickTime::ProcessInsta360';
|
|
5913
5963
|
} else {
|
|
5914
5964
|
require "Image/ExifTool/$dirName.pm";
|
data/bin/lib/Image/ExifTool.pod
CHANGED
|
@@ -626,7 +626,10 @@ XMP to be extracted.
|
|
|
626
626
|
Flag to extract information from embedded documents in EPS files, embedded
|
|
627
627
|
EPS information and JPEG and Jpeg2000 images in PDF files, embedded MPF
|
|
628
628
|
images in JPEG and MPO files, timed metadata in videos, and the resource
|
|
629
|
-
fork of Mac OS files.
|
|
629
|
+
fork of Mac OS files. A setting of 2 also causes the H264 video stream in
|
|
630
|
+
MP4 files to be parsed until the first SEI message is decoded, or 3 to parse
|
|
631
|
+
the entire H264 stream in MP4 videos and the entire M2TS file to look for
|
|
632
|
+
any unlisted program containing GPS metadata. Default is undef.
|
|
630
633
|
|
|
631
634
|
=item FastScan
|
|
632
635
|
|
|
@@ -735,8 +738,8 @@ group names.
|
|
|
735
738
|
|
|
736
739
|
=item HexTagIDs
|
|
737
740
|
|
|
738
|
-
|
|
739
|
-
numerical ID's.
|
|
741
|
+
Return hexadecimal instead of decimal for the family 7 group names of tags
|
|
742
|
+
with numerical ID's.
|
|
740
743
|
|
|
741
744
|
=item HtmlDump
|
|
742
745
|
|
|
@@ -841,8 +844,9 @@ print conversion for writing. Default is 1.
|
|
|
841
844
|
|
|
842
845
|
Flag set to add an 'mdir' Handler to a newly created Meta box when adding
|
|
843
846
|
QuickTime ItemList tags. Adobe Bridge does not add this Handler, but it is
|
|
844
|
-
commonly found in samples from other software,
|
|
845
|
-
|
|
847
|
+
commonly found in samples from other software, and it has been reported that
|
|
848
|
+
Apple QuickTime Player and Photos.apps will ignore ItemList tags if this is
|
|
849
|
+
missing. Default is 1.
|
|
846
850
|
|
|
847
851
|
=item QuickTimeUTC
|
|
848
852
|
|
|
@@ -2047,6 +2051,7 @@ The group family numbers are currently available:
|
|
|
2047
2051
|
4) Instance Number (eg. Copy1, Copy2, Copy3...)
|
|
2048
2052
|
5) Metadata Path (eg. JPEG-APP1-IFD0-ExifIFD)
|
|
2049
2053
|
6) EXIF/TIFF Format (eg. int8u, int32u, undef, string)
|
|
2054
|
+
7) Tag ID (eg. ID-271, ID-rights, ID-a9aut)
|
|
2050
2055
|
|
|
2051
2056
|
Families 0 and 1 are based on the file structure, and are similar except
|
|
2052
2057
|
that family 1 is more specific and sub-divides some groups to give more
|
|
@@ -2090,13 +2095,14 @@ Family 6 is currently used only for EXIF/TIFF metadata, and gives the format
|
|
|
2090
2095
|
type of the extracted value. Generated only if the L</SaveFormat> option is
|
|
2091
2096
|
used when extracting.
|
|
2092
2097
|
|
|
2093
|
-
Family 7 is used for tag ID's. The group names are
|
|
2094
|
-
|
|
2095
|
-
tag ID's are
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
[-_A-Za-z0-9]
|
|
2099
|
-
|
|
2098
|
+
Family 7 is used for tag ID's. The group names are the actual tag ID's,
|
|
2099
|
+
with a leading "ID-" string. Non-numerical ID's have characters other than
|
|
2100
|
+
[-_A-Za-z0-9] converted to hex. Numerical tag ID's are returned in hex if
|
|
2101
|
+
the L</HexTagIDs> option is set, otherwise decimal is used. When specifying
|
|
2102
|
+
a family 7 group name, numerical ID's may be in hex or decimal, and
|
|
2103
|
+
non-numerical ID's may or may not have characters other than [-_A-Za-z0-9]
|
|
2104
|
+
converted to hex. Note that unlike other group names, the tag ID's of
|
|
2105
|
+
family 7 group names are case sensitive (but the leading "ID-" is not).
|
|
2100
2106
|
|
|
2101
2107
|
See L</GetAllGroups [static]> for complete lists of group names.
|
|
2102
2108
|
|
|
@@ -2253,7 +2259,7 @@ Get list of all group names in specified family.
|
|
|
2253
2259
|
|
|
2254
2260
|
=item Inputs:
|
|
2255
2261
|
|
|
2256
|
-
0) Group family number (0-
|
|
2262
|
+
0) Group family number (0-7)
|
|
2257
2263
|
|
|
2258
2264
|
=item Return Values:
|
|
2259
2265
|
|
|
@@ -2342,12 +2348,16 @@ rational64s, float, double, ifd, unicode, complex, int64u, int64s, ifd64
|
|
|
2342
2348
|
|
|
2343
2349
|
=item Family 7 (Tag ID):
|
|
2344
2350
|
|
|
2345
|
-
ID-xxx (
|
|
2346
|
-
leading "0x" if the HexTagIDs option is set,
|
|
2347
|
-
non-numerical ID's which are not valid in a group name
|
|
2351
|
+
ID-xxx (Where xxx is the tag ID. Numerical ID's are returned in hex with a
|
|
2352
|
+
leading "0x" if the HexTagIDs option is set, or decimal otherwise.
|
|
2353
|
+
Characters in non-numerical ID's which are not valid in a group name are
|
|
2354
|
+
returned as 2 hex digits.)
|
|
2348
2355
|
|
|
2349
2356
|
=back
|
|
2350
2357
|
|
|
2358
|
+
Note: This function may also be called as an ExifTool member function to
|
|
2359
|
+
allow the HexTagIDs option to be set when retrieving family 7 group names.
|
|
2360
|
+
|
|
2351
2361
|
=head2 GetDeleteGroups [static]
|
|
2352
2362
|
|
|
2353
2363
|
Get list of all deletable group names.
|
|
@@ -2365,14 +2375,14 @@ None.
|
|
|
2365
2375
|
A list of deletable group names in alphabetical order. The current list of
|
|
2366
2376
|
deletable group names is:
|
|
2367
2377
|
|
|
2368
|
-
AFCP, APP0, APP1, APP10, APP11, APP12, APP13, APP14, APP15, APP2,
|
|
2369
|
-
APP4, APP5, APP6, APP7, APP8, APP9,
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
NikonCapture, Other, PDF, PDF-update,
|
|
2374
|
-
Photoshop,
|
|
2375
|
-
Video, XML, XML-*, XMP, XMP-*
|
|
2378
|
+
Adobe, AFCP, APP0, APP1, APP10, APP11, APP12, APP13, APP14, APP15, APP2,
|
|
2379
|
+
APP3, APP4, APP5, APP6, APP7, APP8, APP9, Audio, Author, Camera, CanonVRD,
|
|
2380
|
+
CIFF, Document, Ducky, EXIF, ExifIFD, ExifTool, File, FlashPix, FotoStation,
|
|
2381
|
+
GlobParamIFD, GPS, ICC_Profile, IFD0, IFD1, Image, Insta360, InteropIFD,
|
|
2382
|
+
IPTC, ItemList, JFIF, Jpeg2000, Keys, Location, MakerNotes, Meta, MetaIFD,
|
|
2383
|
+
Microsoft, MIE, MPF, NikonCapture, Other, PDF, PDF-update, PhotoMechanic,
|
|
2384
|
+
Photoshop, PNG, PNG-pHYs, Preview, PrintIM, Printing, QuickTime, RMETA,
|
|
2385
|
+
RSRC, SubIFD, Time, Trailer, UserData, Video, XML, XML-*, XMP, XMP-*
|
|
2376
2386
|
|
|
2377
2387
|
To schedule a group for deletion, call L</SetNewValue> with a tag name like
|
|
2378
2388
|
'EXIF:*' and an undefined tag value.
|
|
@@ -15,7 +15,7 @@ use vars qw($VERSION);
|
|
|
15
15
|
use Image::ExifTool::Exif;
|
|
16
16
|
use Image::ExifTool::PLIST;
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.05';
|
|
19
19
|
|
|
20
20
|
# Apple iPhone metadata (ref PH)
|
|
21
21
|
%Image::ExifTool::Apple::Main = (
|
|
@@ -72,7 +72,8 @@ $VERSION = '1.04';
|
|
|
72
72
|
# 0x000f - int32s: 2,3
|
|
73
73
|
# 0x0010 - int32s: 1
|
|
74
74
|
0x0011 => {
|
|
75
|
-
Name => '
|
|
75
|
+
Name => 'MediaGroupUUID', #NealKrawetz private communication
|
|
76
|
+
# (changed in 12.19 from Name => 'ContentIdentifier', #forum8750)
|
|
76
77
|
Writable => 'string',
|
|
77
78
|
},
|
|
78
79
|
# 0x0014 - int32s: 1,2,3,4,5 (iPhone 6s, iOS 6.1)
|
|
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
|
|
|
35
35
|
use Image::ExifTool::Validate;
|
|
36
36
|
use Image::ExifTool::MacOS;
|
|
37
37
|
|
|
38
|
-
$VERSION = '3.
|
|
38
|
+
$VERSION = '3.44';
|
|
39
39
|
@ISA = qw(Exporter);
|
|
40
40
|
|
|
41
41
|
sub NumbersFirst($$);
|
|
@@ -141,6 +141,9 @@ my %formatOK = (
|
|
|
141
141
|
signed => 1,
|
|
142
142
|
unsigned => 1,
|
|
143
143
|
utf8 => 1,
|
|
144
|
+
Unicode => 1, # (Microsoft Xtra)
|
|
145
|
+
GUID => 1, # (Microsoft Xtra)
|
|
146
|
+
vt_filetime => 1, # (Microsoft Xtra)
|
|
144
147
|
);
|
|
145
148
|
|
|
146
149
|
# Descriptions for the TagNames documentation
|
|
@@ -310,9 +313,10 @@ C<integer> is a string of digits (possibly beginning with a '+' or '-'),
|
|
|
310
313
|
C<real> is a floating point number, C<rational> is entered as a floating
|
|
311
314
|
point number but stored as two C<integer> strings separated by a '/'
|
|
312
315
|
character, C<date> is a date/time string entered in the format "YYYY:mm:dd
|
|
313
|
-
HH:MM:SS[.ss][+/-HH:MM]", C<boolean> is either "True" or "False"
|
|
314
|
-
|
|
315
|
-
|
|
316
|
+
HH:MM:SS[.ss][+/-HH:MM]", C<boolean> is either "True" or "False" (but "true"
|
|
317
|
+
and "false" may be written as a ValueConv value for compatibility with
|
|
318
|
+
non-conforming applications), C<struct> indicates a structured tag, and
|
|
319
|
+
C<lang-alt> is a tag that supports alternate languages.
|
|
316
320
|
|
|
317
321
|
When reading, C<struct> tags are extracted only if the L<Struct|../ExifTool.html#Struct> (-struct)
|
|
318
322
|
option is used. Otherwise the corresponding I<Flattened> tags, indicated by
|
|
@@ -430,11 +434,13 @@ L<UserData|Image::ExifTool::TagNames/QuickTime UserData Tags>, and
|
|
|
430
434
|
finally in L<Keys|Image::ExifTool::TagNames/QuickTime Keys Tags>,
|
|
431
435
|
but this order may be changed by setting the PREFERRED level of the
|
|
432
436
|
appropriate table in the config file (see
|
|
433
|
-
L<example.config|../config.html#PREF> in the full distribution for
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
437
|
+
L<example.config|../config.html#PREF> in the full distribution for an
|
|
438
|
+
example). Note that some tags with the same name but different ID's may
|
|
439
|
+
exist in the same location, but the family 7 group names may be used to
|
|
440
|
+
differentiate these. ExifTool currently writes only top-level metadata in
|
|
441
|
+
QuickTime-based files; it extracts other track-specific and timed metadata,
|
|
442
|
+
but can not yet edit tags in these locations (with the exception of
|
|
443
|
+
track-level date/time tags).
|
|
438
444
|
|
|
439
445
|
Alternate language tags may be accessed for
|
|
440
446
|
L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
|
|
@@ -459,8 +465,8 @@ local time when extracting.
|
|
|
459
465
|
|
|
460
466
|
When writing string-based date/time tags, the system time zone is added if
|
|
461
467
|
the PrintConv option is enabled and no time zone is specified. This is
|
|
462
|
-
because Apple software may display
|
|
463
|
-
|
|
468
|
+
because Apple software may display crazy values if the time zone is missing
|
|
469
|
+
for some tags.
|
|
464
470
|
|
|
465
471
|
See
|
|
466
472
|
L<https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/>
|
|
@@ -698,10 +704,14 @@ my %shortcutNotes = (
|
|
|
698
704
|
large binary data tags which may be excluded to reduce memory usage if
|
|
699
705
|
memory limitations are a problem
|
|
700
706
|
},
|
|
707
|
+
'ls-l' => q{
|
|
708
|
+
mimics columns shown by Unix "ls -l" command. Includes some tags which are
|
|
709
|
+
extracted only if the API L<SystemTags|../ExifTool.html#SystemTags> option
|
|
710
|
+
is enabled
|
|
711
|
+
},
|
|
701
712
|
);
|
|
702
713
|
|
|
703
|
-
|
|
704
|
-
# same thing for RIFF INFO tags found in the EXIF spec
|
|
714
|
+
# lookup for RIFF INFO tags which are found in the EXIF spec
|
|
705
715
|
my %riffSpec = (
|
|
706
716
|
IARL => 1, ICRD => 1, IGNR => 1, IPLT => 1, ISRC => 1,
|
|
707
717
|
IART => 1, ICRP => 1, IKEY => 1, IPRD => 1, ISRF => 1,
|
|
@@ -1319,6 +1329,7 @@ TagID: foreach $tagID (@keys) {
|
|
|
1319
1329
|
my $count = $$tagInfo{Count} || 1;
|
|
1320
1330
|
# adjust count to Writable size if different than Format
|
|
1321
1331
|
if ($writable and $format and $writable ne $format and
|
|
1332
|
+
$writable ne 'string' and $format ne 'string' and
|
|
1322
1333
|
$Image::ExifTool::Exif::formatNumber{$writable} and
|
|
1323
1334
|
$Image::ExifTool::Exif::formatNumber{$format})
|
|
1324
1335
|
{
|