exiftool_vendored 12.35.0 → 12.36.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +21 -4
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +11 -3
- data/bin/lib/Image/ExifTool/Exif.pm +13 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +3 -0
- data/bin/lib/Image/ExifTool/Nikon.pm +610 -22
- data/bin/lib/Image/ExifTool/NikonCustom.pm +5 -1
- data/bin/lib/Image/ExifTool/NikonSettings.pm +67 -11
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +9 -4
- data/bin/lib/Image/ExifTool/TagLookup.pm +508 -10
- data/bin/lib/Image/ExifTool/TagNames.pod +1036 -3
- data/bin/lib/Image/ExifTool/Writer.pl +1 -1
- data/bin/lib/Image/ExifTool/XMP.pm +96 -18
- data/bin/lib/Image/ExifTool.pm +8 -3
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
@@ -154,7 +154,7 @@ my %delMore = (
|
|
154
154
|
);
|
155
155
|
|
156
156
|
# family 0 groups where directories should never be deleted
|
157
|
-
my %permanentDir = ( QuickTime => 1 );
|
157
|
+
my %permanentDir = ( QuickTime => 1, Jpeg2000 => 1 );
|
158
158
|
|
159
159
|
# lookup for all valid family 2 groups (lower case)
|
160
160
|
my %family2groups = map { lc $_ => 1 } @delGroup2, 'Unknown';
|
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
|
|
50
50
|
use Image::ExifTool::GPS;
|
51
51
|
require Exporter;
|
52
52
|
|
53
|
-
$VERSION = '3.
|
53
|
+
$VERSION = '3.48';
|
54
54
|
@ISA = qw(Exporter);
|
55
55
|
@EXPORT_OK = qw(EscapeXML UnescapeXML);
|
56
56
|
|
@@ -436,9 +436,37 @@ my %sOECF = (
|
|
436
436
|
Names => { List => 'Seq' },
|
437
437
|
Values => { List => 'Seq', Writable => 'rational' },
|
438
438
|
);
|
439
|
-
|
439
|
+
my %sAreaModels = (
|
440
|
+
STRUCT_NAME => 'AreaModels',
|
441
|
+
NAMESPACE => 'crs',
|
442
|
+
ColorRangeMaskAreaSampleInfo => { },
|
443
|
+
AreaComponents => { List => 'Seq' },
|
444
|
+
);
|
445
|
+
my %sCorrectionRangeMask = (
|
446
|
+
STRUCT_NAME => 'CorrectionRangeMask',
|
447
|
+
NAMESPACE => 'crs',
|
448
|
+
Version => { },
|
449
|
+
Type => { },
|
450
|
+
ColorAmount => { Writable => 'real' },
|
451
|
+
LumMin => { Writable => 'real' },
|
452
|
+
LumMax => { Writable => 'real' },
|
453
|
+
LumFeather => { Writable => 'real' },
|
454
|
+
DepthMin => { Writable => 'real' },
|
455
|
+
DepthMax => { Writable => 'real' },
|
456
|
+
DepthFeather=> { Writable => 'real' },
|
457
|
+
# new in LR 11.0
|
458
|
+
Invert => { Writable => 'boolean' },
|
459
|
+
SampleType => { Writable => 'integer' },
|
460
|
+
AreaModels => {
|
461
|
+
List => 'Seq',
|
462
|
+
Struct => \%sAreaModels,
|
463
|
+
},
|
464
|
+
LumRange => { },
|
465
|
+
LuminanceDepthSampleInfo => { },
|
466
|
+
);
|
440
467
|
# new LR2 crs structures (PH)
|
441
|
-
my %sCorrectionMask
|
468
|
+
my %sCorrectionMask;
|
469
|
+
%sCorrectionMask = (
|
442
470
|
STRUCT_NAME => 'CorrectionMask',
|
443
471
|
NAMESPACE => 'crs',
|
444
472
|
# disable List behaviour of flattened Gradient/PaintBasedCorrections
|
@@ -473,19 +501,21 @@ my %sCorrectionMask = (
|
|
473
501
|
Alpha => { Writable => 'real', List => 0 },
|
474
502
|
CenterValue => { Writable => 'real', List => 0 },
|
475
503
|
PerimeterValue=>{ Writable => 'real', List => 0 },
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
504
|
+
# new in LR 11.0 MaskGroupBasedCorrections
|
505
|
+
MaskActive => { Writable => 'boolean', List => 0 },
|
506
|
+
MaskName => { List => 0 },
|
507
|
+
MaskBlendMode=> { Writable => 'integer', List => 0 },
|
508
|
+
MaskInverted => { Writable => 'boolean', List => 0 },
|
509
|
+
MaskSyncID => { List => 0 },
|
510
|
+
MaskVersion => { List => 0 },
|
511
|
+
MaskSubType => { List => 0 },
|
512
|
+
ReferencePoint => { List => 0 },
|
513
|
+
InputDigest => { List => 0 },
|
514
|
+
MaskDigest => { List => 0 },
|
515
|
+
WholeImageArea => { List => 0 },
|
516
|
+
Origin => { List => 0 },
|
517
|
+
Masks => { Struct => \%sCorrectionMask, NoSubStruct => 1 },
|
518
|
+
CorrectionRangeMask => { Struct => \%sCorrectionRangeMask },
|
489
519
|
);
|
490
520
|
my %sCorrection = (
|
491
521
|
STRUCT_NAME => 'Correction',
|
@@ -516,6 +546,7 @@ my %sCorrection = (
|
|
516
546
|
LocalBlacks2012 => { FlatName => 'Blacks2012', Writable => 'real', List => 0 },
|
517
547
|
LocalDehaze => { FlatName => 'Dehaze', Writable => 'real', List => 0 },
|
518
548
|
LocalTexture => { FlatName => 'Texture', Writable => 'real', List => 0 },
|
549
|
+
# new in LR 11.0
|
519
550
|
CorrectionRangeMask => {
|
520
551
|
FlatName => 'RangeMask',
|
521
552
|
Struct => \%sCorrectionRangeMask,
|
@@ -525,6 +556,8 @@ my %sCorrection = (
|
|
525
556
|
Struct => \%sCorrectionMask,
|
526
557
|
List => 'Seq',
|
527
558
|
},
|
559
|
+
CorrectionName => { },
|
560
|
+
CorrectionSyncID => { },
|
528
561
|
);
|
529
562
|
my %sRetouchArea = (
|
530
563
|
STRUCT_NAME => 'RetouchArea',
|
@@ -543,6 +576,30 @@ my %sRetouchArea = (
|
|
543
576
|
List => 'Seq',
|
544
577
|
},
|
545
578
|
);
|
579
|
+
my %sMapInfo = (
|
580
|
+
STRUCT_NAME => 'MapInfo',
|
581
|
+
NAMESPACE => 'crs',
|
582
|
+
NOTES => q{
|
583
|
+
Called RangeMaskMapInfo by the specification, the same as the containing
|
584
|
+
structure.
|
585
|
+
},
|
586
|
+
RGBMin => { },
|
587
|
+
RGBMax => { },
|
588
|
+
LabMin => { },
|
589
|
+
LabMax => { },
|
590
|
+
LumEq => { List => 'Seq' },
|
591
|
+
);
|
592
|
+
my %sRangeMask = (
|
593
|
+
STRUCT_NAME => 'RangeMask',
|
594
|
+
NAMESPACE => 'crs',
|
595
|
+
NOTES => q{
|
596
|
+
This structure is actually called RangeMaskMapInfo, but it only contains one
|
597
|
+
element which is a RangeMaskMapInfo structure (Yes, really!). So these are
|
598
|
+
renamed to RangeMask and MapInfo respectively to avoid confusion and
|
599
|
+
redundancy in the tag names.
|
600
|
+
},
|
601
|
+
RangeMaskMapInfo => { FlatName => 'MapInfo', Struct => \%sMapInfo },
|
602
|
+
);
|
546
603
|
|
547
604
|
# main XMP tag table (tag ID's are used for the family 1 group names)
|
548
605
|
%Image::ExifTool::XMP::Main = (
|
@@ -1581,6 +1638,14 @@ my %sPantryItem = (
|
|
1581
1638
|
AutoToneDigestNoSat => { },
|
1582
1639
|
ToggleStyleDigest => { },
|
1583
1640
|
ToggleStyleAmount => { Writable => 'integer' },
|
1641
|
+
# new for LightRoom 11.0
|
1642
|
+
CompatibleVersion => { },
|
1643
|
+
MaskGroupBasedCorrections => {
|
1644
|
+
FlatName => 'MaskGroupBasedCorr',
|
1645
|
+
Struct => \%sCorrection,
|
1646
|
+
List => 'Seq',
|
1647
|
+
},
|
1648
|
+
RangeMaskMapInfo => { Name => 'RangeMask', Struct => \%sRangeMask, FlatName => 'RangeMask' },
|
1584
1649
|
);
|
1585
1650
|
|
1586
1651
|
# Tiff namespace properties (tiff)
|
@@ -2307,6 +2372,7 @@ my %sPantryItem = (
|
|
2307
2372
|
VignetteCorrectionAlreadyApplied => { Writable => 'boolean' },
|
2308
2373
|
LateralChromaticAberrationCorrectionAlreadyApplied => { Writable => 'boolean' },
|
2309
2374
|
LensDistortInfo => { }, # (LR 7.5.1, 4 signed rational values)
|
2375
|
+
NeutralDensityFactor => { }, # (LR 11.0 - rational value, but denominator seems significant)
|
2310
2376
|
);
|
2311
2377
|
|
2312
2378
|
# IPTC Core namespace properties (Iptc4xmpCore) (ref 4)
|
@@ -2363,6 +2429,7 @@ my %sPantryItem = (
|
|
2363
2429
|
NOTES => 'Adobe Lightroom "lr" namespace tags.',
|
2364
2430
|
privateRTKInfo => { },
|
2365
2431
|
hierarchicalSubject => { List => 'Bag' },
|
2432
|
+
weightedFlatSubject => { List => 'Bag' },
|
2366
2433
|
);
|
2367
2434
|
|
2368
2435
|
# Adobe Album namespace properties (album) (ref PH)
|
@@ -3505,6 +3572,17 @@ sub ParseXMPElement($$$;$$$$)
|
|
3505
3572
|
}
|
3506
3573
|
$start = pos($$dataPt); # start from here the next time around
|
3507
3574
|
|
3575
|
+
# ignore specified XMP namespaces/properties
|
3576
|
+
if ($$et{EXCL_XMP_LOOKUP} and not $isWriting and $prop =~ /^(.+):(.*)/) {
|
3577
|
+
my ($ns, $nm) = (lc($stdXlatNS{$1} || $1), lc($2));
|
3578
|
+
if ($$et{EXCL_XMP_LOOKUP}{"xmp-$ns:all"} or $$et{EXCL_XMP_LOOKUP}{"xmp-$ns:$nm"} or
|
3579
|
+
$$et{EXCL_XMP_LOOKUP}{"xmp-all:$nm"})
|
3580
|
+
{
|
3581
|
+
++$count; # (pretend we found something so we don't store as a tag value)
|
3582
|
+
next;
|
3583
|
+
}
|
3584
|
+
}
|
3585
|
+
|
3508
3586
|
# extract property attributes
|
3509
3587
|
my ($parseResource, %attrs, @attrs);
|
3510
3588
|
while ($attrs =~ m/(\S+?)\s*=\s*(['"])(.*?)\2/sg) {
|
@@ -3602,9 +3680,9 @@ sub ParseXMPElement($$$;$$$$)
|
|
3602
3680
|
if ($nItems == 1000) {
|
3603
3681
|
my ($tg,$ns) = GetXMPTagID($propList);
|
3604
3682
|
if ($isWriting) {
|
3605
|
-
$et->
|
3683
|
+
$et->WarnOnce("Excessive number of items for $ns:$tg. Processing may be slow", 1);
|
3606
3684
|
} elsif (not $$et{OPTIONS}{IgnoreMinorErrors}) {
|
3607
|
-
$et->
|
3685
|
+
$et->WarnOnce("Extracted only 1000 $ns:$tg items. Ignore minor errors to extract all", 2);
|
3608
3686
|
last;
|
3609
3687
|
}
|
3610
3688
|
}
|
data/bin/lib/Image/ExifTool.pm
CHANGED
@@ -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);
|
31
31
|
|
32
|
-
$VERSION = '12.
|
32
|
+
$VERSION = '12.36';
|
33
33
|
$RELEASE = '';
|
34
34
|
@ISA = qw(Exporter);
|
35
35
|
%EXPORT_TAGS = (
|
@@ -4252,6 +4252,7 @@ sub ParseArguments($;@)
|
|
4252
4252
|
$$self{REQ_TAG_LOOKUP} = { };
|
4253
4253
|
$$self{EXCL_TAG_LOOKUP} = { };
|
4254
4254
|
$$self{IO_TAG_LIST} = undef;
|
4255
|
+
delete $$self{EXCL_XMP_LOOKUP};
|
4255
4256
|
|
4256
4257
|
# handle our input arguments
|
4257
4258
|
while (@_) {
|
@@ -4335,7 +4336,11 @@ sub ParseArguments($;@)
|
|
4335
4336
|
# generate lookup for excluded tags
|
4336
4337
|
if ($$options{Exclude}) {
|
4337
4338
|
foreach (@{$$options{Exclude}}) {
|
4338
|
-
/([-\w]+)#?$/ and $$self{EXCL_TAG_LOOKUP}{lc
|
4339
|
+
/([-\w]+)#?$/ and $$self{EXCL_TAG_LOOKUP}{lc $1} = 1;
|
4340
|
+
if (/(xmp-.*:[-\w]+)#?/i) {
|
4341
|
+
$$self{EXCL_XMP_LOOKUP} or $$self{EXCL_XMP_LOOKUP} = { };
|
4342
|
+
$$self{EXCL_XMP_LOOKUP}{lc $1} = 1;
|
4343
|
+
}
|
4339
4344
|
}
|
4340
4345
|
# exclude list is used only for EXCL_TAG_LOOKUP when TAGS_FROM_FILE is set
|
4341
4346
|
undef $$options{Exclude} if $$self{TAGS_FROM_FILE};
|
@@ -6309,7 +6314,7 @@ sub ProcessJPEG($$)
|
|
6309
6314
|
my $markerName = JpegMarkerName($marker);
|
6310
6315
|
$$path[$pn] = $markerName;
|
6311
6316
|
# issue warning if we skipped some garbage
|
6312
|
-
if ($skipped and not $foundSOS) {
|
6317
|
+
if ($skipped and not $foundSOS and $markerName ne 'SOS') {
|
6313
6318
|
$self->Warn("Skipped unknown $skipped bytes after JPEG $markerName segment", 1);
|
6314
6319
|
if ($htmlDump) {
|
6315
6320
|
$self->HDump($nextSegPos-4-$skipped, $skipped, "[unknown $skipped bytes]", undef, 0x08);
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exiftool_vendored
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 12.
|
4
|
+
version: 12.36.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew McEachen
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-11-
|
12
|
+
date: 2021-11-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: exiftool
|