exiftool_vendored 12.35.0 → 12.36.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 +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
|