exiftool-vendored.exe 13.40.0 → 13.41.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.
- package/bin/exiftool.exe +0 -0
- package/bin/exiftool_files/exiftool.pl +58 -29
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +15 -12
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +11 -6
- package/bin/exiftool_files/lib/Image/ExifTool/Font.pm +3 -4
- package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/LNK.pm +15 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +4 -3
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +20 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Red.pm +19 -9
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +4 -0
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +14 -4
- package/bin/exiftool_files/lib/Image/ExifTool.pm +17 -5
- package/bin/exiftool_files/windows_exiftool.txt +17 -11
- package/package.json +1 -1
package/bin/exiftool.exe
CHANGED
|
Binary file
|
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use warnings;
|
|
12
12
|
require 5.004;
|
|
13
13
|
|
|
14
|
-
my $version = '13.
|
|
14
|
+
my $version = '13.41';
|
|
15
15
|
|
|
16
16
|
$^W = 1; # enable global warnings
|
|
17
17
|
|
|
@@ -89,6 +89,7 @@ END {
|
|
|
89
89
|
# declare all static file-scope variables
|
|
90
90
|
my @commonArgs; # arguments common to all commands
|
|
91
91
|
my @condition; # conditional processing of files
|
|
92
|
+
my @csvExclude; # list of tags excluded from CSV import
|
|
92
93
|
my @csvFiles; # list of files when reading with CSV option (in ExifTool Charset)
|
|
93
94
|
my @csvTags; # order of tags for first file with CSV option (lower case)
|
|
94
95
|
my @delFiles; # list of files to delete
|
|
@@ -454,6 +455,7 @@ if ($stayOpen >= 2) {
|
|
|
454
455
|
# (not done: @commonArgs, @moreArgs, $critical, $binaryStdout, $helped,
|
|
455
456
|
# $interrupted, $mt, $pause, $rtnValApp, $rtnValPrev, $stayOpen, $stayOpenBuff, $stayOpenFile)
|
|
456
457
|
undef @condition;
|
|
458
|
+
undef @csvExclude;
|
|
457
459
|
undef @csvFiles;
|
|
458
460
|
undef @csvTags;
|
|
459
461
|
undef @delFiles;
|
|
@@ -591,6 +593,7 @@ my $escapeXML; # flag to escape printed values for xml
|
|
|
591
593
|
my $setTagsFile; # filename for last TagsFromFile option
|
|
592
594
|
my $sortOpt; # sort option is used
|
|
593
595
|
my $srcStdin; # one of the source files is STDIN
|
|
596
|
+
my $tagsFrom = ''; # tags on command line come from 'csv' or 'file'
|
|
594
597
|
my $useMWG; # flag set if we are using any MWG tag
|
|
595
598
|
|
|
596
599
|
my ($argsLeft, @nextPass, $badCmd);
|
|
@@ -825,6 +828,7 @@ for (;;) {
|
|
|
825
828
|
}
|
|
826
829
|
# create necessary lists, etc for this new -tagsFromFile file
|
|
827
830
|
AddSetTagsFile($setTagsFile, { Replace => ($1 and lc($1) eq 'add') ? 0 : 1 } );
|
|
831
|
+
$tagsFrom = 'file';
|
|
828
832
|
next;
|
|
829
833
|
}
|
|
830
834
|
if ($a eq '@') {
|
|
@@ -940,6 +944,7 @@ for (;;) {
|
|
|
940
944
|
if ($csvFile) {
|
|
941
945
|
push @newValues, { SaveCount => ++$saveCount }; # marker to save new values now
|
|
942
946
|
$csvSaveCount = $saveCount;
|
|
947
|
+
$tagsFrom = 'csv';
|
|
943
948
|
}
|
|
944
949
|
next;
|
|
945
950
|
}
|
|
@@ -1130,6 +1135,7 @@ for (;;) {
|
|
|
1130
1135
|
push @nextPass, "-$_";
|
|
1131
1136
|
push @newValues, { SaveCount => ++$saveCount }; # marker to save new values now
|
|
1132
1137
|
$csvSaveCount = $saveCount;
|
|
1138
|
+
$tagsFrom = 'csv';
|
|
1133
1139
|
next;
|
|
1134
1140
|
}
|
|
1135
1141
|
my $jsonFile = $2;
|
|
@@ -1378,10 +1384,12 @@ for (;;) {
|
|
|
1378
1384
|
my $tag = shift;
|
|
1379
1385
|
defined $tag or Error("Expecting tag name for -x option\n"), $badCmd=1, next;
|
|
1380
1386
|
$tag =~ s/\ball\b/\*/ig; # replace 'all' with '*' in tag names
|
|
1381
|
-
if ($
|
|
1382
|
-
push @{$setTags{$setTagsFile}}, "-$tag";
|
|
1383
|
-
} else {
|
|
1387
|
+
if (not $tagsFrom) {
|
|
1384
1388
|
push @exclude, $tag;
|
|
1389
|
+
} elsif ($tagsFrom eq 'csv') {
|
|
1390
|
+
push @csvExclude, $tag;
|
|
1391
|
+
} else {
|
|
1392
|
+
push @{$setTags{$setTagsFile}}, "-$tag";
|
|
1385
1393
|
}
|
|
1386
1394
|
next;
|
|
1387
1395
|
}
|
|
@@ -1424,9 +1432,15 @@ for (;;) {
|
|
|
1424
1432
|
}
|
|
1425
1433
|
} else {
|
|
1426
1434
|
# assume '-tagsFromFile @' if tags are being redirected
|
|
1427
|
-
# and -tagsFromFile hasn't already been specified
|
|
1428
|
-
|
|
1429
|
-
|
|
1435
|
+
# and not from CSV and -tagsFromFile hasn't already been specified
|
|
1436
|
+
if (not $setTagsFile and $tagsFrom ne 'csv' and /(<|>)/) {
|
|
1437
|
+
AddSetTagsFile($setTagsFile = '@');
|
|
1438
|
+
$tagsFrom = 'file';
|
|
1439
|
+
}
|
|
1440
|
+
if ($tagsFrom eq 'csv') {
|
|
1441
|
+
my $lst = s/^-// ? \@csvExclude : \@tags;
|
|
1442
|
+
push @$lst, $_;
|
|
1443
|
+
} elsif ($setTagsFile) {
|
|
1430
1444
|
push @{$setTags{$setTagsFile}}, $_;
|
|
1431
1445
|
if ($1 eq '>') {
|
|
1432
1446
|
$useMWG = 1 if /^(.*>\s*)?([-_0-9A-Z]+:)*1?mwg:/si;
|
|
@@ -1795,11 +1809,9 @@ if (@newValues) {
|
|
|
1795
1809
|
$wrn and Warning($mt, $wrn);
|
|
1796
1810
|
}
|
|
1797
1811
|
# exclude specified tags
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
$needSave = 1;
|
|
1802
|
-
}
|
|
1812
|
+
foreach (@exclude) {
|
|
1813
|
+
$mt->SetNewValue($_, undef, Replace => 2);
|
|
1814
|
+
$needSave = 1;
|
|
1803
1815
|
}
|
|
1804
1816
|
unless ($isWriting or $outOpt or @tags) {
|
|
1805
1817
|
Error "Nothing to do.\n";
|
|
@@ -3251,7 +3263,7 @@ sub SetImageInfo($$$)
|
|
|
3251
3263
|
next;
|
|
3252
3264
|
} elsif (ref $dyFile eq 'SCALAR') {
|
|
3253
3265
|
# set new values from CSV or JSON database
|
|
3254
|
-
my ($f, $found, $csvTag, $
|
|
3266
|
+
my ($f, $found, $csvTag, $tg, $csvExifTool);
|
|
3255
3267
|
undef $evalWarning;
|
|
3256
3268
|
local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] };
|
|
3257
3269
|
# force UTF-8 if the database was JSON
|
|
@@ -3279,39 +3291,51 @@ sub SetImageInfo($$$)
|
|
|
3279
3291
|
if ($verbose) {
|
|
3280
3292
|
print $vout "Setting new values from $csv database\n";
|
|
3281
3293
|
print $vout 'Including tags: ',join(' ',@tags),"\n" if @tags;
|
|
3282
|
-
print $vout 'Excluding tags: ',join(' ',@
|
|
3294
|
+
print $vout 'Excluding tags: ',join(' ',@csvExclude),"\n" if @csvExclude;
|
|
3283
3295
|
}
|
|
3284
|
-
|
|
3285
|
-
|
|
3296
|
+
if (@tags) {
|
|
3297
|
+
# prepare a dummy ExifTool object to hold appropriate tags from the database
|
|
3298
|
+
$csvExifTool = Image::ExifTool->new unless $csvExifTool;
|
|
3299
|
+
foreach $csvTag (OrderedKeys($csvInfo)) {
|
|
3300
|
+
next if $csvTag =~ /^([-_0-9A-Z]+:)*(SourceFile|Directory|FileName)$/i;
|
|
3301
|
+
my @grps = split /:/, $csvTag;
|
|
3302
|
+
my $name = pop @grps;
|
|
3303
|
+
unshift @grps, 'Unknown' while @grps < 2;
|
|
3304
|
+
$csvExifTool->FoundTag($name, $$csvInfo{$csvTag}, @grps);
|
|
3305
|
+
}
|
|
3306
|
+
next;
|
|
3307
|
+
}
|
|
3308
|
+
my @exclTags = @csvExclude;
|
|
3309
|
+
foreach (@exclTags) {
|
|
3286
3310
|
tr/-0-9a-zA-Z_:#?*//dc; # remove illegal characters
|
|
3287
3311
|
s/(^|:)(all:)+/$1/ig; # remove 'all' group names
|
|
3288
3312
|
s/(^|:)all(#?)$/$1*$2/i; # convert 'all' tag name to '*'
|
|
3289
3313
|
tr/?/./; s/\*/.*/g; # convert wildcards for regex
|
|
3290
3314
|
}
|
|
3315
|
+
# run through tags in database order
|
|
3291
3316
|
foreach $csvTag (OrderedKeys($csvInfo)) {
|
|
3292
3317
|
# don't write SourceFile, Directory or FileName
|
|
3293
3318
|
next if $csvTag =~ /^([-_0-9A-Z]+:)*(SourceFile|Directory|FileName)$/i;
|
|
3294
|
-
if (@
|
|
3295
|
-
my ($
|
|
3296
|
-
|
|
3297
|
-
$
|
|
3298
|
-
if ($tryTag =~ /:/) {
|
|
3319
|
+
if (@exclTags) {
|
|
3320
|
+
my ($exclTag, $exclGrp, $excluded);
|
|
3321
|
+
ExclMatch: foreach $exclTag (@exclTags) {
|
|
3322
|
+
if ($exclTag =~ /:/) {
|
|
3299
3323
|
next unless $csvTag =~ /:/; # db entry must also specify group
|
|
3300
3324
|
my @csvGrps = split /:/, $csvTag;
|
|
3301
|
-
my @
|
|
3302
|
-
my $
|
|
3303
|
-
next unless pop(@csvGrps) =~ /^$
|
|
3304
|
-
foreach $
|
|
3325
|
+
my @exclGrps = split /:/, $exclTag;
|
|
3326
|
+
my $exclName = pop @exclGrps;
|
|
3327
|
+
next unless pop(@csvGrps) =~ /^$exclName$/i; # tag name must match
|
|
3328
|
+
foreach $exclGrp (@exclGrps) {
|
|
3305
3329
|
# each specified group name must match db entry
|
|
3306
|
-
next
|
|
3330
|
+
next ExclMatch unless grep /^$exclGrp$/i, @csvGrps;
|
|
3307
3331
|
}
|
|
3308
|
-
$
|
|
3332
|
+
$excluded = 1;
|
|
3309
3333
|
last;
|
|
3310
3334
|
}
|
|
3311
3335
|
# no group specified, so match by tag name only
|
|
3312
|
-
$csvTag =~ /^([-_0-9A-Z]+:)*$
|
|
3336
|
+
$csvTag =~ /^([-_0-9A-Z]+:)*$exclTag$/i and $excluded = 1, last;
|
|
3313
3337
|
}
|
|
3314
|
-
next if $
|
|
3338
|
+
next if $excluded;
|
|
3315
3339
|
}
|
|
3316
3340
|
my ($rtn, $wrn) = $et->SetNewValue($csvTag, $$csvInfo{$csvTag},
|
|
3317
3341
|
Protected => 1, AddValue => $csvAdd,
|
|
@@ -3319,6 +3343,11 @@ TryMatch: for ($i=0; $i<@tryTags; ++$i) {
|
|
|
3319
3343
|
$wrn and Warn "$wrn\n" if $verbose;
|
|
3320
3344
|
}
|
|
3321
3345
|
}
|
|
3346
|
+
# set specified tags now
|
|
3347
|
+
if ($csvExifTool) {
|
|
3348
|
+
my @excl = map "-$_", @csvExclude; # add back leading dashes
|
|
3349
|
+
$et->SetNewValuesFromFile($csvExifTool, @tags, @excl);
|
|
3350
|
+
}
|
|
3322
3351
|
$et->Options(Charset => $old) if $csv eq 'JSON';
|
|
3323
3352
|
unless ($found) {
|
|
3324
3353
|
Warn("No SourceFile '${file}' in imported $csv database\n");
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.98';
|
|
92
92
|
|
|
93
93
|
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
|
|
94
94
|
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
|
|
@@ -562,6 +562,7 @@ $VERSION = '4.97';
|
|
|
562
562
|
4160 => 'Canon EF-S 35mm f/2.8 Macro IS STM', #42
|
|
563
563
|
4208 => 'Sigma 56mm f/1.4 DC DN | C or other Sigma Lens', #forum10603
|
|
564
564
|
4208.1 => 'Sigma 30mm F1.4 DC DN | C', #github#83 (016)
|
|
565
|
+
4976 => 'Sigma 16-300mm F3.5-6.7 DC OS | C (025)', #50
|
|
565
566
|
6512 => 'Sigma 12mm F1.4 DC | C', #github#352 (025)
|
|
566
567
|
# (Nano USM lenses - 0x90xx)
|
|
567
568
|
36910 => 'Canon EF 70-300mm f/4-5.6 IS II USM', #42
|
|
@@ -1995,12 +1996,12 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
1995
1996
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData10' },
|
|
1996
1997
|
},
|
|
1997
1998
|
{ # (int16u[3973]) - R3 ref IB
|
|
1998
|
-
Condition => '$count == 3973 or $count == 3778',
|
|
1999
|
+
Condition => '($count == 3973 or $count == 3778) and $$valPt !~ /^\x41\0/',
|
|
1999
2000
|
Name => 'ColorData11',
|
|
2000
2001
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData11' },
|
|
2001
2002
|
},
|
|
2002
|
-
{ # (int16u[4528]) - R1/R5mkII ref forum16406
|
|
2003
|
-
Condition => '$count == 4528',
|
|
2003
|
+
{ # (int16u[4528]) - R1/R5mkII (4528) ref forum16406, R50V (3778) ref PH
|
|
2004
|
+
Condition => '$count == 4528 or $count == 3778',
|
|
2004
2005
|
Name => 'ColorData12',
|
|
2005
2006
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData12' },
|
|
2006
2007
|
},
|
|
@@ -8321,8 +8322,8 @@ my %ciMaxFocal = (
|
|
|
8321
8322
|
RawConv => '$$self{ColorDataVersion} = $val',
|
|
8322
8323
|
PrintConv => {
|
|
8323
8324
|
16 => '16 (M50)',
|
|
8324
|
-
17 => '17 (
|
|
8325
|
-
18 => '18 (
|
|
8325
|
+
17 => '17 (R)', # (and PowerShot SX740HS)
|
|
8326
|
+
18 => '18 (RP/250D)', # (and PowerShot SX70HS)
|
|
8326
8327
|
19 => '19 (90D/850D/M6mkII/M200)',# (and PowerShot G7XmkIII)
|
|
8327
8328
|
},
|
|
8328
8329
|
},
|
|
@@ -8553,10 +8554,10 @@ my %ciMaxFocal = (
|
|
|
8553
8554
|
},
|
|
8554
8555
|
);
|
|
8555
8556
|
|
|
8556
|
-
# Color data (MakerNotes tag 0x4001, count=3973, ref IB)
|
|
8557
|
+
# Color data (MakerNotes tag 0x4001, count=3973/3778, ref IB)
|
|
8557
8558
|
%Image::ExifTool::Canon::ColorData11 = (
|
|
8558
8559
|
%binaryDataAttrs,
|
|
8559
|
-
NOTES => 'These tags are used by the EOS R3, R7 and R6mkII',
|
|
8560
|
+
NOTES => 'These tags are used by the EOS R3, R7, R50 and R6mkII',
|
|
8560
8561
|
FORMAT => 'int16s',
|
|
8561
8562
|
FIRST_ENTRY => 0,
|
|
8562
8563
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -8568,7 +8569,7 @@ my %ciMaxFocal = (
|
|
|
8568
8569
|
RawConv => '$$self{ColorDataVersion} = $val',
|
|
8569
8570
|
PrintConv => {
|
|
8570
8571
|
34 => '34 (R3)', #IB
|
|
8571
|
-
48 => '48 (R7
|
|
8572
|
+
48 => '48 (R7/R10/R50/R6mkII)', #IB
|
|
8572
8573
|
},
|
|
8573
8574
|
},
|
|
8574
8575
|
0x69 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
|
@@ -8673,10 +8674,10 @@ my %ciMaxFocal = (
|
|
|
8673
8674
|
},
|
|
8674
8675
|
);
|
|
8675
8676
|
|
|
8676
|
-
# Color data (MakerNotes tag 0x4001, count=4528, ref PH)
|
|
8677
|
+
# Color data (MakerNotes tag 0x4001, count=4528/3778, ref PH)
|
|
8677
8678
|
%Image::ExifTool::Canon::ColorData12 = (
|
|
8678
8679
|
%binaryDataAttrs,
|
|
8679
|
-
NOTES => 'These tags are used by the EOS R1 and
|
|
8680
|
+
NOTES => 'These tags are used by the EOS R1, R5mkII and R50V',
|
|
8680
8681
|
FORMAT => 'int16s',
|
|
8681
8682
|
FIRST_ENTRY => 0,
|
|
8682
8683
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -8687,7 +8688,8 @@ my %ciMaxFocal = (
|
|
|
8687
8688
|
DataMember => 'ColorDataVersion',
|
|
8688
8689
|
RawConv => '$$self{ColorDataVersion} = $val',
|
|
8689
8690
|
PrintConv => {
|
|
8690
|
-
64 => '64 (R1
|
|
8691
|
+
64 => '64 (R1/R5mkII)',
|
|
8692
|
+
65 => '65 (R50V)',
|
|
8691
8693
|
},
|
|
8692
8694
|
},
|
|
8693
8695
|
0x69 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' }, # (NC)
|
|
@@ -8778,6 +8780,7 @@ my %ciMaxFocal = (
|
|
|
8778
8780
|
Name => 'PerChannelBlackLevel',
|
|
8779
8781
|
Format => 'int16u[4]',
|
|
8780
8782
|
},
|
|
8783
|
+
# 0x290 - PerChannelBlackLevel again
|
|
8781
8784
|
0x294 => {
|
|
8782
8785
|
Name => 'NormalWhiteLevel',
|
|
8783
8786
|
Format => 'int16u',
|
|
@@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
|
57
57
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
58
58
|
use Image::ExifTool::MakerNotes;
|
|
59
59
|
|
|
60
|
-
$VERSION = '4.
|
|
60
|
+
$VERSION = '4.61';
|
|
61
61
|
|
|
62
62
|
sub ProcessExif($$$);
|
|
63
63
|
sub WriteExif($$$);
|
|
@@ -6191,10 +6191,15 @@ sub ProcessExif($$$)
|
|
|
6191
6191
|
my $isExif = ($tagTablePtr eq \%Image::ExifTool::Exif::Main);
|
|
6192
6192
|
|
|
6193
6193
|
# warn for incorrect maker notes in CR3 files
|
|
6194
|
-
if (
|
|
6195
|
-
$$dirInfo{Parent} and $$dirInfo{Parent} eq 'ExifIFD')
|
|
6196
|
-
|
|
6197
|
-
|
|
6194
|
+
if ($dirName eq 'MakerNotes') {
|
|
6195
|
+
if ($$et{FileType} eq 'CR3' and $$dirInfo{Parent} and $$dirInfo{Parent} eq 'ExifIFD') {
|
|
6196
|
+
$et->Warn("MakerNotes shouldn't exist ExifIFD of CR3 image", 1);
|
|
6197
|
+
}
|
|
6198
|
+
if ($$dirInfo{TagInfo} and $$dirInfo{TagInfo}{MakerNotes} and
|
|
6199
|
+
$$et{ExifByteOrder} and $$et{ExifByteOrder} ne GetByteOrder())
|
|
6200
|
+
{
|
|
6201
|
+
$et->FoundTag(MakerNoteByteOrder => GetByteOrder());
|
|
6202
|
+
}
|
|
6198
6203
|
}
|
|
6199
6204
|
# set flag to calculate image data hash if requested
|
|
6200
6205
|
$doHash = 1 if $$et{ImageDataHash} and (($$et{FILE_TYPE} eq 'TIFF' and not $base and not $inMakerNotes) or
|
|
@@ -6281,7 +6286,7 @@ sub ProcessExif($$$)
|
|
|
6281
6286
|
$dirSize = 2 + 12 * $numEntries;
|
|
6282
6287
|
$dirEnd = $dirStart + $dirSize;
|
|
6283
6288
|
}
|
|
6284
|
-
$verbose > 0 and $et->VerboseDir($dirName, $numEntries);
|
|
6289
|
+
$verbose > 0 and $et->VerboseDir($dirName, $numEntries, undef, GetByteOrder());
|
|
6285
6290
|
my $bytesFromEnd = $dataLen - $dirEnd;
|
|
6286
6291
|
if ($bytesFromEnd < 4) {
|
|
6287
6292
|
unless ($bytesFromEnd==2 or $bytesFromEnd==0) {
|
|
@@ -184,7 +184,7 @@ my %ttCharset = (
|
|
|
184
184
|
Custom => { },
|
|
185
185
|
);
|
|
186
186
|
|
|
187
|
-
#
|
|
187
|
+
# the 63 known WOFF2 tags
|
|
188
188
|
my @knownTags = (
|
|
189
189
|
'cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt',
|
|
190
190
|
'fpgm', 'glyf', 'loca', 'prep', 'CFF', 'VORG', 'EBDT', 'EBLC', 'gasp',
|
|
@@ -891,9 +891,8 @@ This module is used by Image::ExifTool
|
|
|
891
891
|
|
|
892
892
|
This module contains the routines required by Image::ExifTool to read meta
|
|
893
893
|
information from various format font files. Currently recognized font file
|
|
894
|
-
types are OTF, TTF, TTC, DFONT, PFA, PFB, PFM, AFM, ACFM
|
|
895
|
-
|
|
896
|
-
extracted from these formats.
|
|
894
|
+
types are OTF, TTF, TTC, DFONT, PFA, PFB, PFM, AFM, ACFM, AMFM, WOFF and
|
|
895
|
+
WOFF2.
|
|
897
896
|
|
|
898
897
|
=head1 AUTHOR
|
|
899
898
|
|
|
@@ -26,7 +26,7 @@ use strict;
|
|
|
26
26
|
use vars qw($VERSION);
|
|
27
27
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
28
28
|
|
|
29
|
-
$VERSION = '1.
|
|
29
|
+
$VERSION = '1.42';
|
|
30
30
|
|
|
31
31
|
sub ProcessICC($$);
|
|
32
32
|
sub ProcessICC_Profile($$$);
|
|
@@ -330,6 +330,7 @@ my %manuSig = ( #6
|
|
|
330
330
|
'WTG2' => 'Ware To Go',
|
|
331
331
|
'WYSE' => 'WYSE Technology',
|
|
332
332
|
'XERX' => 'Xerox Corporation',
|
|
333
|
+
'XM ' => 'Xiaomi',
|
|
333
334
|
'XRIT' => 'X-Rite',
|
|
334
335
|
'yxym' => 'YxyMaster GmbH',
|
|
335
336
|
'Z123' => "Lavanya's test Company",
|
|
@@ -18,7 +18,7 @@ use vars qw($VERSION);
|
|
|
18
18
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
19
19
|
use Image::ExifTool::Microsoft;
|
|
20
20
|
|
|
21
|
-
$VERSION = '1.
|
|
21
|
+
$VERSION = '1.13';
|
|
22
22
|
|
|
23
23
|
sub ProcessItemID($$$);
|
|
24
24
|
sub ProcessLinkInfo($$$);
|
|
@@ -191,7 +191,7 @@ sub ProcessLinkInfo($$$);
|
|
|
191
191
|
},
|
|
192
192
|
0xa0000001 => {
|
|
193
193
|
Name => 'EnvVarData',
|
|
194
|
-
SubDirectory => { TagTable => 'Image::ExifTool::LNK::
|
|
194
|
+
SubDirectory => { TagTable => 'Image::ExifTool::LNK::EnvVarData' },
|
|
195
195
|
},
|
|
196
196
|
0xa0000002 => {
|
|
197
197
|
Name => 'ConsoleData',
|
|
@@ -448,6 +448,19 @@ sub ProcessLinkInfo($$$);
|
|
|
448
448
|
},
|
|
449
449
|
);
|
|
450
450
|
|
|
451
|
+
%Image::ExifTool::LNK::EnvVarData = (
|
|
452
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
453
|
+
GROUPS => { 2 => 'Other' },
|
|
454
|
+
8 => {
|
|
455
|
+
Name => 'EnvironmentTarget',
|
|
456
|
+
Format => 'string[260]',
|
|
457
|
+
},
|
|
458
|
+
268 => {
|
|
459
|
+
Name => 'EnvironmentTargetUnicode',
|
|
460
|
+
Format => 'unicode[260]',
|
|
461
|
+
},
|
|
462
|
+
);
|
|
463
|
+
|
|
451
464
|
%Image::ExifTool::LNK::INI = (
|
|
452
465
|
GROUPS => { 2 => 'Document' },
|
|
453
466
|
VARS => { ID_FMT => 'none' },
|
|
@@ -42,7 +42,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
42
42
|
use Image::ExifTool::Exif;
|
|
43
43
|
use Image::ExifTool::APP12;
|
|
44
44
|
|
|
45
|
-
$VERSION = '2.
|
|
45
|
+
$VERSION = '2.93';
|
|
46
46
|
|
|
47
47
|
sub PrintLensInfo($$$);
|
|
48
48
|
|
|
@@ -201,8 +201,9 @@ my %olympusLensTypes = (
|
|
|
201
201
|
# '65535 07 40' - Seen for LUMIX S 16-35/F4 on Panasonic DC-S1H (ref PH)
|
|
202
202
|
# Other makes
|
|
203
203
|
'24 01 10' => 'Venus Optics Laowa 50mm F2.8 2x Macro', #DonKomarechka
|
|
204
|
-
'
|
|
205
|
-
'
|
|
204
|
+
'247 03 10' => 'LAOWA C&D-Dreamer MFT 7.5mm F2.0', #forum3833
|
|
205
|
+
'247 10 10' => 'LAOWA C&D-Dreamer MFT 6.0mm F2.0', #KG
|
|
206
|
+
'65522 02 10' => 'Xiaoyi 42.5mm F1.8', #github363
|
|
206
207
|
);
|
|
207
208
|
|
|
208
209
|
# lookup for Olympus camera types (ref PH)
|
|
@@ -49,7 +49,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
49
49
|
use Image::ExifTool::Exif;
|
|
50
50
|
use Image::ExifTool::GPS;
|
|
51
51
|
|
|
52
|
-
$VERSION = '3.
|
|
52
|
+
$VERSION = '3.23';
|
|
53
53
|
|
|
54
54
|
sub ProcessMOV($$;$);
|
|
55
55
|
sub ProcessKeys($$$);
|
|
@@ -578,11 +578,29 @@ my %userDefined = (
|
|
|
578
578
|
return substr($val, 8, $len-8);
|
|
579
579
|
},
|
|
580
580
|
Binary => 1,
|
|
581
|
+
},{
|
|
582
|
+
Name => 'HighlightMarkers',
|
|
583
|
+
# (DJI Action 4, forum17700)
|
|
584
|
+
Notes => 'written by some DJI models',
|
|
585
|
+
Condition => '$$valPt =~ /^data.{4}hglg.{5}/s',
|
|
586
|
+
RawConv => q{
|
|
587
|
+
my $len = unpack 'x4N', $val;
|
|
588
|
+
return undef if $len < 13 or $len + 4 > length($val);
|
|
589
|
+
my $n = int(($len - 13) / 5);
|
|
590
|
+
my @a = map $_/1000, unpack "x17(xV)$n", $val;
|
|
591
|
+
return \@a;
|
|
592
|
+
},
|
|
581
593
|
},{
|
|
582
594
|
Unknown => 1,
|
|
583
595
|
Binary => 1,
|
|
584
596
|
},
|
|
585
|
-
#
|
|
597
|
+
# DJI videos also have block of offset/size of various atoms, eg)
|
|
598
|
+
# Atom name ???? Offset Size
|
|
599
|
+
# 0000: 63 6f 76 72 00 00 00 00 00 ed 6f da 00 0a 46 e0 [covr......o...F.]
|
|
600
|
+
# 0010: 73 6e 61 6c 00 00 00 00 00 f7 b6 d2 00 0a 46 e0 [snal..........F.]
|
|
601
|
+
# 0020: 68 67 6c 67 00 00 00 00 01 02 0a a2 00 00 00 21 [hglg...........!]
|
|
602
|
+
# 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
|
603
|
+
# (also Samsung WB750 uncompressed thumbnail data starting with "SDIC\0")
|
|
586
604
|
],
|
|
587
605
|
# fre1 - 4 bytes: "june" (Kodak PixPro SP360)
|
|
588
606
|
frea => {
|
|
@@ -14,7 +14,7 @@ use strict;
|
|
|
14
14
|
use vars qw($VERSION);
|
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
16
|
|
|
17
|
-
$VERSION = '1.
|
|
17
|
+
$VERSION = '1.02';
|
|
18
18
|
|
|
19
19
|
sub ProcessR3D($$);
|
|
20
20
|
|
|
@@ -45,7 +45,8 @@ my $errTrunc = 'Truncated R3D file';
|
|
|
45
45
|
RED2 => { Name => 'Red2Header', SubDirectory => { TagTable => 'Image::ExifTool::Red::RED2' } },
|
|
46
46
|
|
|
47
47
|
# (upper 4 bits of tag ID are the format code)
|
|
48
|
-
# ---- format
|
|
48
|
+
# ---- format 0 (int8u) ----
|
|
49
|
+
# ---- format 1 (string) ----
|
|
49
50
|
0x1000 => 'StartEdgeCode', #1
|
|
50
51
|
0x1001 => { Name => 'StartTimecode', Groups => { 2 => 'Time' } }, #1
|
|
51
52
|
0x1002 => { #1
|
|
@@ -104,6 +105,7 @@ my $errTrunc = 'Truncated R3D file';
|
|
|
104
105
|
# 0x1041 - seen 'NA'
|
|
105
106
|
0x1042 => 'Revision', # ? (seen "TODO, rev EPIC-1.0" and "MYSTERIUM X, rev EPIC-1.0")
|
|
106
107
|
# 0x1051 - seen 'C', 'L'
|
|
108
|
+
# 0x1052 - seen 'E9'
|
|
107
109
|
0x1056 => 'OriginalFileName',
|
|
108
110
|
0x106e => 'LensMake',
|
|
109
111
|
0x106f => 'LensNumber', # (last 2 hex digits are LensType)
|
|
@@ -120,7 +122,8 @@ my $errTrunc = 'Truncated R3D file';
|
|
|
120
122
|
0x1096 => 'Filter', # optical low-pass filter
|
|
121
123
|
0x10a0 => 'Brain',
|
|
122
124
|
0x10a1 => 'Sensor',
|
|
123
|
-
|
|
125
|
+
0x10be => 'Quality',
|
|
126
|
+
# ---- format 2 (float) ----
|
|
124
127
|
0x200d => 'ColorTemperature',
|
|
125
128
|
# 0x200e - (sometimes this is frame rate)
|
|
126
129
|
# 0x2015 - seen '1 1 1' (RGBGain or RGBGamma?)
|
|
@@ -130,7 +133,8 @@ my $errTrunc = 'Truncated R3D file';
|
|
|
130
133
|
Groups => { 2 => 'Video' },
|
|
131
134
|
PrintConv => 'int($val * 1000 + 0.5) / 1000',
|
|
132
135
|
},
|
|
133
|
-
# ---- format
|
|
136
|
+
# ---- format 3 (int8u?) ----
|
|
137
|
+
# ---- format 4 (int16u) ----
|
|
134
138
|
0x4037 => { Name => 'CropArea' }, # (NC)
|
|
135
139
|
0x403b => 'ISO',
|
|
136
140
|
# 0x404e - related to CropArea (or "0 0 0 0")
|
|
@@ -138,8 +142,12 @@ my $errTrunc = 'Truncated R3D file';
|
|
|
138
142
|
0x406b => 'FocalLength',
|
|
139
143
|
# 0x4084 - related to ISO?
|
|
140
144
|
# 0x4087 - related to ISO?
|
|
141
|
-
# ---- format
|
|
145
|
+
# ---- format 5 (int8s?) ----
|
|
146
|
+
# ---- format 6 (int32s) ----
|
|
142
147
|
0x606c => { Name => 'FocusDistance', ValueConv => '$val/1000', PrintConv => '"$val m"' },
|
|
148
|
+
# ---- format 7 (undef? structure?) ----
|
|
149
|
+
# ---- format 8 (int32u?) ----
|
|
150
|
+
# ---- format 9 (undef?) ----
|
|
143
151
|
);
|
|
144
152
|
|
|
145
153
|
# RED1 file header (ref PH)
|
|
@@ -240,9 +248,11 @@ sub ProcessR3D($$)
|
|
|
240
248
|
$pos = 0x22; # directory starts at offset 0x22
|
|
241
249
|
} else {
|
|
242
250
|
# calculate position of Red directory start
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
$pos
|
|
251
|
+
$pos = 0x44;
|
|
252
|
+
length($buff) < $pos and return $et->Warn($errTrunc);
|
|
253
|
+
$pos += Get8u(\$buff, 0x40) * 0x18; # skip "rdi" records
|
|
254
|
+
$pos += Get8u(\$buff, 0x41) * 0x14; # skip "rda" records
|
|
255
|
+
$pos += Get8u(\$buff, 0x42) * 0x10; # skip "rdx" records
|
|
246
256
|
}
|
|
247
257
|
if ($pos + 8 > length $buff) {
|
|
248
258
|
$dirLen = 0; # find directory the hard way
|
|
@@ -253,7 +263,7 @@ sub ProcessR3D($$)
|
|
|
253
263
|
# do sanity check on the directory size (in case our assumptions were wrong)
|
|
254
264
|
if ($dirLen < 300 or $dirLen >= 2048 or $pos + $dirLen > length $buff) {
|
|
255
265
|
# tag 0x1000 with length 0x000f should be near the directory start
|
|
256
|
-
$buff =~ /\0\x0f\x10\0/g or return $et->Warn("Can't find Red directory");
|
|
266
|
+
$buff =~ /\0\x0f\x10[\0\x06]/g or return $et->Warn("Can't find Red directory. Please submit sample for testing");
|
|
257
267
|
$pos = pos($buff) - 4;
|
|
258
268
|
$dirEnd = length $buff;
|
|
259
269
|
undef $dirLen;
|
|
@@ -9475,6 +9475,8 @@ my %tagExists = (
|
|
|
9475
9475
|
'entrypoint' => 1,
|
|
9476
9476
|
'entrytype' => 1,
|
|
9477
9477
|
'environmentmap' => 1,
|
|
9478
|
+
'environmenttarget' => 1,
|
|
9479
|
+
'environmenttargetunicode' => 1,
|
|
9478
9480
|
'envvardata' => 1,
|
|
9479
9481
|
'eppim' => 1,
|
|
9480
9482
|
'eprint' => 1,
|
|
@@ -10143,6 +10145,7 @@ my %tagExists = (
|
|
|
10143
10145
|
'highisomode' => 1,
|
|
10144
10146
|
'highlightdata' => 1,
|
|
10145
10147
|
'highlightendpoints' => 1,
|
|
10148
|
+
'highlightmarkers' => 1,
|
|
10146
10149
|
'highnote' => 1,
|
|
10147
10150
|
'highvelocity' => 1,
|
|
10148
10151
|
'hindsightsettings' => 1,
|
|
@@ -10827,6 +10830,7 @@ my %tagExists = (
|
|
|
10827
10830
|
'maininfoifd' => 1,
|
|
10828
10831
|
'makeandmodel' => 1,
|
|
10829
10832
|
'makemodel' => 1,
|
|
10833
|
+
'makernotebyteorder' => 1,
|
|
10830
10834
|
'makernotepentax5a' => 1,
|
|
10831
10835
|
'makernotepentax5b' => 1,
|
|
10832
10836
|
'makernotepentax5c' => 1,
|
|
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
|
|
|
12
12
|
=head1 TAG TABLES
|
|
13
13
|
|
|
14
14
|
The tables listed below give the names of all tags recognized by ExifTool.
|
|
15
|
-
They contain a total of
|
|
15
|
+
They contain a total of 28858 tags, with 17929 unique tag names.
|
|
16
16
|
|
|
17
17
|
B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
|
|
18
18
|
table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
|
|
@@ -9541,7 +9541,7 @@ These tags are used by the R5, R5 and EOS 1DXmkIII.
|
|
|
9541
9541
|
|
|
9542
9542
|
=head3 Canon ColorData11 Tags
|
|
9543
9543
|
|
|
9544
|
-
These tags are used by the EOS R3, R7 and R6mkII
|
|
9544
|
+
These tags are used by the EOS R3, R7, R50 and R6mkII
|
|
9545
9545
|
|
|
9546
9546
|
Index2 Tag Name Writable
|
|
9547
9547
|
------ -------- --------
|
|
@@ -9630,7 +9630,7 @@ These tags are used by the EOS R3, R7 and R6mkII
|
|
|
9630
9630
|
|
|
9631
9631
|
=head3 Canon ColorData12 Tags
|
|
9632
9632
|
|
|
9633
|
-
These tags are used by the EOS R1 and
|
|
9633
|
+
These tags are used by the EOS R1, R5mkII and R50V
|
|
9634
9634
|
|
|
9635
9635
|
Index2 Tag Name Writable
|
|
9636
9636
|
------ -------- --------
|
|
@@ -30720,6 +30720,7 @@ for the official QuickTime specification.
|
|
|
30720
30720
|
'free' KodakFree Kodak Free
|
|
30721
30721
|
Pittasoft QuickTime Pittasoft
|
|
30722
30722
|
ThumbnailImage no
|
|
30723
|
+
HighlightMarkers no
|
|
30723
30724
|
Free? no
|
|
30724
30725
|
'ftyp' FileType QuickTime FileType
|
|
30725
30726
|
'gdat' GPSData QuickTime Stream
|
|
@@ -36442,6 +36443,7 @@ Tags extracted from Redcode R3D video files.
|
|
|
36442
36443
|
0x1096 Filter no
|
|
36443
36444
|
0x10a0 Brain no
|
|
36444
36445
|
0x10a1 Sensor no
|
|
36446
|
+
0x10be Quality no
|
|
36445
36447
|
0x200d ColorTemperature no
|
|
36446
36448
|
0x204b RGBCurves no
|
|
36447
36449
|
0x2066 OriginalFrameRate no
|
|
@@ -40696,7 +40698,7 @@ Information extracted from MS Shell Link (Windows shortcut) files.
|
|
|
40696
40698
|
0x30020 CommandLineArguments no
|
|
40697
40699
|
0x30040 IconFileName no
|
|
40698
40700
|
0xa0000000 UnknownData LNK UnknownData
|
|
40699
|
-
0xa0000001 EnvVarData LNK
|
|
40701
|
+
0xa0000001 EnvVarData LNK EnvVarData
|
|
40700
40702
|
0xa0000002 ConsoleData LNK ConsoleData
|
|
40701
40703
|
0xa0000003 TrackerData LNK TrackerData
|
|
40702
40704
|
0xa0000004 ConsoleFEData LNK ConsoleFEData
|
|
@@ -40741,6 +40743,13 @@ Information extracted from MS Shell Link (Windows shortcut) files.
|
|
|
40741
40743
|
------ -------- --------
|
|
40742
40744
|
[no tags known]
|
|
40743
40745
|
|
|
40746
|
+
=head3 LNK EnvVarData Tags
|
|
40747
|
+
|
|
40748
|
+
Index1 Tag Name Writable
|
|
40749
|
+
------ -------- --------
|
|
40750
|
+
8 EnvironmentTarget no
|
|
40751
|
+
268 EnvironmentTargetUnicode no
|
|
40752
|
+
|
|
40744
40753
|
=head3 LNK ConsoleData Tags
|
|
40745
40754
|
|
|
40746
40755
|
Index1 Tag Name Writable
|
|
@@ -41690,6 +41699,7 @@ FileName.
|
|
|
41690
41699
|
JPEGQualityEstimate File no
|
|
41691
41700
|
JUMBF JUMBF no
|
|
41692
41701
|
MIMEType File no
|
|
41702
|
+
MakerNoteByteOrder File no
|
|
41693
41703
|
MaxVal File no
|
|
41694
41704
|
NewGUID ExifTool no
|
|
41695
41705
|
Now ExifTool no
|
|
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
|
|
|
29
29
|
%jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
|
|
30
30
|
%static_vars $advFmtSelf $configFile @configFiles $noConfig);
|
|
31
31
|
|
|
32
|
-
$VERSION = '13.
|
|
32
|
+
$VERSION = '13.41';
|
|
33
33
|
$RELEASE = '';
|
|
34
34
|
@ISA = qw(Exporter);
|
|
35
35
|
%EXPORT_TAGS = (
|
|
@@ -392,6 +392,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
|
392
392
|
LFR => 'LFP', # (Light Field RAW)
|
|
393
393
|
LIF => ['LIF', 'Leica Image File'],
|
|
394
394
|
LNK => ['LNK', 'Windows shortcut'],
|
|
395
|
+
LRF => ['MOV', 'Low-Resolution video File'],
|
|
395
396
|
LRI => ['LRI', 'Light RAW'],
|
|
396
397
|
LRV => ['MOV', 'Low-Resolution Video'],
|
|
397
398
|
M2T => 'M2TS',
|
|
@@ -1818,6 +1819,13 @@ my %systemTagsNotes = (
|
|
|
1818
1819
|
MM => 'Big-endian (Motorola, MM)',
|
|
1819
1820
|
},
|
|
1820
1821
|
},
|
|
1822
|
+
MakerNoteByteOrder => {
|
|
1823
|
+
Notes => 'byte order of maker notes. Generated only if different from ExifByteOrder',
|
|
1824
|
+
PrintConv => {
|
|
1825
|
+
II => 'Little-endian (Intel, II)',
|
|
1826
|
+
MM => 'Big-endian (Motorola, MM)',
|
|
1827
|
+
},
|
|
1828
|
+
},
|
|
1821
1829
|
ExifUnicodeByteOrder => {
|
|
1822
1830
|
Writable => 1,
|
|
1823
1831
|
WriteOnly => 1,
|
|
@@ -8626,6 +8634,7 @@ sub DoProcessTIFF($$;$)
|
|
|
8626
8634
|
my $ifdName = ($$dirInfo{DirName} and $$dirInfo{DirName} =~ /^(ExifIFD|GPS)$/) ? $1 : 'IFD0';
|
|
8627
8635
|
if (not $tagTablePtr or $$tagTablePtr{GROUPS}{0} eq 'EXIF') {
|
|
8628
8636
|
$self->FoundTag('ExifByteOrder', $byteOrder) unless $outfile;
|
|
8637
|
+
$$self{ExifByteOrder} = $byteOrder;
|
|
8629
8638
|
} elsif ($$tagTablePtr{GROUPS}{0} eq 'MakerNotes') { # (for writing CR3 maker notes)
|
|
8630
8639
|
$ifdName = $$tagTablePtr{GROUPS}{0};
|
|
8631
8640
|
} else {
|
|
@@ -9685,10 +9694,10 @@ sub VPrint($$@)
|
|
|
9685
9694
|
# Print verbose directory information
|
|
9686
9695
|
# Inputs: 0) ExifTool object reference, 1) directory name or dirInfo ref
|
|
9687
9696
|
# 2) number of entries in directory (or 0 if unknown)
|
|
9688
|
-
# 3) optional size of directory in bytes
|
|
9689
|
-
sub VerboseDir(
|
|
9697
|
+
# 3) optional size of directory in bytes, 4) optional byte order for -v3 output
|
|
9698
|
+
sub VerboseDir($$;$$$)
|
|
9690
9699
|
{
|
|
9691
|
-
my ($self, $name, $entries, $size) = @_;
|
|
9700
|
+
my ($self, $name, $entries, $size, $byteOrder) = @_;
|
|
9692
9701
|
return unless $$self{OPTIONS}{Verbose};
|
|
9693
9702
|
if (ref $name eq 'HASH') {
|
|
9694
9703
|
$size = $$name{DirLen} unless $size;
|
|
@@ -9698,6 +9707,9 @@ sub VerboseDir($$;$$)
|
|
|
9698
9707
|
my $out = $$self{OPTIONS}{TextOut};
|
|
9699
9708
|
my $str = ($entries or defined $entries and not $size) ? " with $entries entries" : '';
|
|
9700
9709
|
$str .= ", $size bytes" if $size;
|
|
9710
|
+
if ($byteOrder and $$self{OPTIONS}{Verbose} > 2) {
|
|
9711
|
+
$str .= ', ' . (GetByteOrder() eq 'II' ? 'Little-endian' : 'Big-endian');
|
|
9712
|
+
}
|
|
9701
9713
|
print $out "$indent+ [$name directory$str]\n";
|
|
9702
9714
|
}
|
|
9703
9715
|
|
|
@@ -9820,7 +9832,7 @@ sub ProcessBinaryData($$$)
|
|
|
9820
9832
|
# extract known tags in numerical order
|
|
9821
9833
|
@tags = sort { ($a < 0 ? $a + 1e9 : $a) <=> ($b < 0 ? $b + 1e9 : $b) } TagTableKeys($tagTablePtr);
|
|
9822
9834
|
}
|
|
9823
|
-
$self->VerboseDir('BinaryData', undef, $size) if $verbose;
|
|
9835
|
+
$self->VerboseDir('BinaryData', undef, $size, GetByteOrder()) if $verbose;
|
|
9824
9836
|
# avoid creating unknown tags for tags that fail condition if Unknown is 1
|
|
9825
9837
|
$$self{NO_UNKNOWN} = 1 if $unknown < 2;
|
|
9826
9838
|
my ($index, %val);
|
|
@@ -742,11 +742,14 @@ OPTIONS
|
|
|
742
742
|
single command.
|
|
743
743
|
|
|
744
744
|
Specific tags may be imported from the CSV database by adding
|
|
745
|
-
-*TAG* options to the command
|
|
746
|
-
exclusions taking priority. Group names and
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
745
|
+
-*TAG* options to the command after -csv=*CSVFILE*, or excluded
|
|
746
|
+
with --*TAG*, with exclusions taking priority. Group names and
|
|
747
|
+
wildcards are allowed, and tags from the CSV may be redirected and
|
|
748
|
+
written to different tags in the target file with support for
|
|
749
|
+
advanced-formatting expressions using the same syntax as the
|
|
750
|
+
-tagsFromFile feature. If no tags are specified, then all tags
|
|
751
|
+
except FileName, Directory and excluded tags are imported (in the
|
|
752
|
+
same order as the database entries).
|
|
750
753
|
|
|
751
754
|
When exporting a CSV file, the -g or -G option adds group names to
|
|
752
755
|
the tag headings. If the -a option is used to allow duplicate tag
|
|
@@ -939,11 +942,14 @@ OPTIONS
|
|
|
939
942
|
JSON file may be suffixed with a "#" to disable print conversion.
|
|
940
943
|
|
|
941
944
|
Specific tags may be imported from the JSON database by adding
|
|
942
|
-
-*TAG* options to the command
|
|
943
|
-
exclusions taking priority. Group names and wildcards
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
945
|
+
-*TAG* options to the command after -j=*JSONFILE*, or excluded with
|
|
946
|
+
--*TAG*, with exclusions taking priority. Group names and wildcards
|
|
947
|
+
are allowed, and tags from JSON may be redirected and written to
|
|
948
|
+
different tags in the target file with support for
|
|
949
|
+
advanced-formatting expressions using the same syntax as the
|
|
950
|
+
-tagsFromFile feature. If no tags are specified, then all tags
|
|
951
|
+
except FileName, Directory and excluded tags are imported (in the
|
|
952
|
+
same order as the database entries).
|
|
947
953
|
|
|
948
954
|
Unlike CSV import, empty values are not ignored, and will cause an
|
|
949
955
|
empty value to be written if supported by the specific metadata
|
|
@@ -1088,7 +1094,7 @@ OPTIONS
|
|
|
1088
1094
|
|
|
1089
1095
|
produces output like this:
|
|
1090
1096
|
|
|
1091
|
-
-- Generated by ExifTool 13.
|
|
1097
|
+
-- Generated by ExifTool 13.41 --
|
|
1092
1098
|
File: a.jpg - 2003:10:31 15:44:19
|
|
1093
1099
|
(f/5.6, 1/60s, ISO 100)
|
|
1094
1100
|
File: b.jpg - 2006:05:23 11:57:38
|
package/package.json
CHANGED