exiftool_vendored 12.15.0 → 12.22.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 +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
|
{
|