exiftool_vendored 12.35.0 → 12.39.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 +59 -4
- data/bin/MANIFEST +1 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +45 -45
- data/bin/exiftool +79 -59
- data/bin/lib/File/RandomAccess.pm +1 -1
- data/bin/lib/File/RandomAccess.pod +2 -2
- data/bin/lib/Image/ExifTool/AES.pm +1 -1
- data/bin/lib/Image/ExifTool/AFCP.pm +1 -1
- data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/APE.pm +1 -1
- data/bin/lib/Image/ExifTool/APP12.pm +1 -1
- data/bin/lib/Image/ExifTool/ASF.pm +1 -1
- data/bin/lib/Image/ExifTool/Apple.pm +1 -1
- data/bin/lib/Image/ExifTool/Audible.pm +1 -1
- data/bin/lib/Image/ExifTool/BMP.pm +1 -1
- data/bin/lib/Image/ExifTool/BPG.pm +1 -1
- data/bin/lib/Image/ExifTool/BZZ.pm +1 -1
- data/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +10 -4
- data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
- data/bin/lib/Image/ExifTool/Canon.pm +143 -10
- data/bin/lib/Image/ExifTool/CanonCustom.pm +13 -3
- data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
- data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
- data/bin/lib/Image/ExifTool/Casio.pm +1 -1
- data/bin/lib/Image/ExifTool/Charset.pm +1 -1
- data/bin/lib/Image/ExifTool/DICOM.pm +1 -1
- data/bin/lib/Image/ExifTool/DJI.pm +1 -1
- data/bin/lib/Image/ExifTool/DNG.pm +1 -1
- data/bin/lib/Image/ExifTool/DPX.pm +1 -1
- data/bin/lib/Image/ExifTool/DV.pm +1 -1
- data/bin/lib/Image/ExifTool/DarwinCore.pm +3 -3
- data/bin/lib/Image/ExifTool/DjVu.pm +1 -1
- data/bin/lib/Image/ExifTool/EXE.pm +1 -1
- data/bin/lib/Image/ExifTool/Exif.pm +22 -2
- data/bin/lib/Image/ExifTool/FITS.pm +1 -1
- data/bin/lib/Image/ExifTool/FLAC.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIR.pm +16 -4
- data/bin/lib/Image/ExifTool/Fixup.pm +1 -1
- data/bin/lib/Image/ExifTool/Flash.pm +1 -1
- data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
- data/bin/lib/Image/ExifTool/Font.pm +1 -1
- data/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
- data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -1
- data/bin/lib/Image/ExifTool/GE.pm +1 -1
- data/bin/lib/Image/ExifTool/GIF.pm +6 -2
- data/bin/lib/Image/ExifTool/GIMP.pm +1 -1
- data/bin/lib/Image/ExifTool/GPS.pm +15 -11
- data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
- data/bin/lib/Image/ExifTool/GoPro.pm +1 -1
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/HP.pm +1 -1
- data/bin/lib/Image/ExifTool/HTML.pm +1 -1
- data/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
- data/bin/lib/Image/ExifTool/ID3.pm +1 -1
- data/bin/lib/Image/ExifTool/IPTC.pm +1 -1
- data/bin/lib/Image/ExifTool/ISO.pm +1 -1
- data/bin/lib/Image/ExifTool/ITC.pm +1 -1
- data/bin/lib/Image/ExifTool/Import.pm +1 -1
- data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- data/bin/lib/Image/ExifTool/JPEG.pm +6 -2
- data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
- data/bin/lib/Image/ExifTool/JSON.pm +1 -1
- data/bin/lib/Image/ExifTool/JVC.pm +1 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +4 -1
- data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
- data/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/LIF.pm +1 -1
- data/bin/lib/Image/ExifTool/LNK.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
- data/bin/lib/Image/ExifTool/Leaf.pm +1 -1
- data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +1 -1
- data/bin/lib/Image/ExifTool/MIE.pm +1 -1
- data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
- data/bin/lib/Image/ExifTool/MIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/MNG.pm +1 -1
- data/bin/lib/Image/ExifTool/MOI.pm +1 -1
- data/bin/lib/Image/ExifTool/MPC.pm +1 -1
- data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/MPF.pm +1 -1
- data/bin/lib/Image/ExifTool/MRC.pm +1 -1
- data/bin/lib/Image/ExifTool/MWG.pm +1 -1
- data/bin/lib/Image/ExifTool/MXF.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
- data/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
- data/bin/lib/Image/ExifTool/Matroska.pm +9 -5
- data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Motorola.pm +1 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +1870 -83
- data/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
- data/bin/lib/Image/ExifTool/NikonCustom.pm +523 -6
- data/bin/lib/Image/ExifTool/NikonSettings.pm +150 -87
- data/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
- data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
- data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +1 -1
- data/bin/lib/Image/ExifTool/OpenEXR.pm +5 -3
- data/bin/lib/Image/ExifTool/Opus.pm +1 -1
- data/bin/lib/Image/ExifTool/Other.pm +1 -1
- data/bin/lib/Image/ExifTool/PCX.pm +1 -1
- data/bin/lib/Image/ExifTool/PDF.pm +1 -1
- data/bin/lib/Image/ExifTool/PGF.pm +1 -1
- data/bin/lib/Image/ExifTool/PICT.pm +1 -1
- data/bin/lib/Image/ExifTool/PLIST.pm +1 -1
- data/bin/lib/Image/ExifTool/PLUS.pm +1 -1
- data/bin/lib/Image/ExifTool/PNG.pm +29 -8
- data/bin/lib/Image/ExifTool/PPM.pm +1 -1
- data/bin/lib/Image/ExifTool/PSP.pm +1 -1
- data/bin/lib/Image/ExifTool/Palm.pm +1 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +3 -2
- data/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
- data/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
- data/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
- data/bin/lib/Image/ExifTool/PostScript.pm +1 -1
- data/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
- data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +4 -3
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +40 -4
- data/bin/lib/Image/ExifTool/RIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
- data/bin/lib/Image/ExifTool/RTF.pm +1 -1
- data/bin/lib/Image/ExifTool/Radiance.pm +1 -1
- data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
- data/bin/lib/Image/ExifTool/Real.pm +1 -1
- data/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
- data/bin/lib/Image/ExifTool/Red.pm +1 -1
- data/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
- data/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
- data/bin/lib/Image/ExifTool/Scalado.pm +1 -1
- data/bin/lib/Image/ExifTool/Shift.pl +3 -1
- data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
- data/bin/lib/Image/ExifTool/Sigma.pm +1 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Sony.pm +1 -1
- data/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
- data/bin/lib/Image/ExifTool/Stim.pm +1 -1
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +11 -6
- data/bin/lib/Image/ExifTool/TagLookup.pm +6496 -5895
- data/bin/lib/Image/ExifTool/TagNames.pod +1507 -43
- data/bin/lib/Image/ExifTool/Text.pm +1 -1
- data/bin/lib/Image/ExifTool/Theora.pm +1 -1
- data/bin/lib/Image/ExifTool/Torrent.pm +1 -1
- data/bin/lib/Image/ExifTool/Unknown.pm +1 -1
- data/bin/lib/Image/ExifTool/VCard.pm +1 -1
- data/bin/lib/Image/ExifTool/Validate.pm +1 -1
- data/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
- data/bin/lib/Image/ExifTool/WTV.pm +1 -1
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePNG.pl +30 -10
- data/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +2 -1
- data/bin/lib/Image/ExifTool/WriteXMP.pl +11 -12
- data/bin/lib/Image/ExifTool/Writer.pl +12 -8
- data/bin/lib/Image/ExifTool/XMP.pm +149 -45
- data/bin/lib/Image/ExifTool/XMP2.pl +3 -2
- data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
- data/bin/lib/Image/ExifTool/ZIP.pm +10 -2
- data/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
- data/bin/lib/Image/ExifTool/iWork.pm +1 -1
- data/bin/lib/Image/ExifTool.pm +24 -10
- data/bin/lib/Image/ExifTool.pod +64 -63
- data/bin/perl-Image-ExifTool.spec +43 -43
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
@@ -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.51';
|
54
54
|
@ISA = qw(Exporter);
|
55
55
|
@EXPORT_OK = qw(EscapeXML UnescapeXML);
|
56
56
|
|
@@ -192,6 +192,9 @@ my %xmpNS = (
|
|
192
192
|
GettyImagesGIFT => 'http://xmp.gettyimages.com/gift/1.0/',
|
193
193
|
LImage => 'http://ns.leiainc.com/photos/1.0/image/',
|
194
194
|
Profile => 'http://ns.google.com/photos/dd/1.0/profile/',
|
195
|
+
sdc => 'http://ns.nikon.com/sdc/1.0/',
|
196
|
+
ast => 'http://ns.nikon.com/asteroid/1.0/',
|
197
|
+
nine => 'http://ns.nikon.com/nine/1.0/',
|
195
198
|
);
|
196
199
|
|
197
200
|
# build reverse namespace lookup
|
@@ -436,9 +439,38 @@ my %sOECF = (
|
|
436
439
|
Names => { List => 'Seq' },
|
437
440
|
Values => { List => 'Seq', Writable => 'rational' },
|
438
441
|
);
|
439
|
-
|
442
|
+
my %sAreaModels = (
|
443
|
+
STRUCT_NAME => 'AreaModels',
|
444
|
+
NAMESPACE => 'crs',
|
445
|
+
ColorRangeMaskAreaSampleInfo => { FlatName => 'ColorSampleInfo' },
|
446
|
+
AreaComponents => { FlatName => 'Components', List => 'Seq' },
|
447
|
+
);
|
448
|
+
my %sCorrRangeMask = (
|
449
|
+
STRUCT_NAME => 'CorrRangeMask',
|
450
|
+
NAMESPACE => 'crs',
|
451
|
+
NOTES => 'Called CorrectionRangeMask by the spec.',
|
452
|
+
Version => { },
|
453
|
+
Type => { },
|
454
|
+
ColorAmount => { Writable => 'real' },
|
455
|
+
LumMin => { Writable => 'real' },
|
456
|
+
LumMax => { Writable => 'real' },
|
457
|
+
LumFeather => { Writable => 'real' },
|
458
|
+
DepthMin => { Writable => 'real' },
|
459
|
+
DepthMax => { Writable => 'real' },
|
460
|
+
DepthFeather=> { Writable => 'real' },
|
461
|
+
# new in LR 11.0
|
462
|
+
Invert => { Writable => 'boolean' },
|
463
|
+
SampleType => { Writable => 'integer' },
|
464
|
+
AreaModels => {
|
465
|
+
List => 'Seq',
|
466
|
+
Struct => \%sAreaModels,
|
467
|
+
},
|
468
|
+
LumRange => { },
|
469
|
+
LuminanceDepthSampleInfo => { },
|
470
|
+
);
|
440
471
|
# new LR2 crs structures (PH)
|
441
|
-
my %sCorrectionMask
|
472
|
+
my %sCorrectionMask;
|
473
|
+
%sCorrectionMask = (
|
442
474
|
STRUCT_NAME => 'CorrectionMask',
|
443
475
|
NAMESPACE => 'crs',
|
444
476
|
# disable List behaviour of flattened Gradient/PaintBasedCorrections
|
@@ -473,19 +505,26 @@ my %sCorrectionMask = (
|
|
473
505
|
Alpha => { Writable => 'real', List => 0 },
|
474
506
|
CenterValue => { Writable => 'real', List => 0 },
|
475
507
|
PerimeterValue=>{ Writable => 'real', List => 0 },
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
508
|
+
# new in LR 11.0 MaskGroupBasedCorrections
|
509
|
+
MaskActive => { Writable => 'boolean', List => 0 },
|
510
|
+
MaskName => { List => 0 },
|
511
|
+
MaskBlendMode=> { Writable => 'integer', List => 0 },
|
512
|
+
MaskInverted => { Writable => 'boolean', List => 0 },
|
513
|
+
MaskSyncID => { List => 0 },
|
514
|
+
MaskVersion => { List => 0 },
|
515
|
+
MaskSubType => { List => 0 },
|
516
|
+
ReferencePoint => { List => 0 },
|
517
|
+
InputDigest => { List => 0 },
|
518
|
+
MaskDigest => { List => 0 },
|
519
|
+
WholeImageArea => { List => 0 },
|
520
|
+
Origin => { List => 0 },
|
521
|
+
Masks => { Struct => \%sCorrectionMask, NoSubStruct => 1 },
|
522
|
+
CorrectionRangeMask => {
|
523
|
+
Name => 'CorrRangeMask',
|
524
|
+
Notes => 'called CorrectionRangeMask by the spec',
|
525
|
+
FlatName => 'Range',
|
526
|
+
Struct => \%sCorrRangeMask,
|
527
|
+
},
|
489
528
|
);
|
490
529
|
my %sCorrection = (
|
491
530
|
STRUCT_NAME => 'Correction',
|
@@ -499,8 +538,8 @@ my %sCorrection = (
|
|
499
538
|
LocalClarity => { FlatName => 'Clarity', Writable => 'real', List => 0 },
|
500
539
|
LocalSharpness => { FlatName => 'Sharpness', Writable => 'real', List => 0 },
|
501
540
|
LocalBrightness => { FlatName => 'Brightness', Writable => 'real', List => 0 },
|
502
|
-
LocalToningHue => { FlatName => '
|
503
|
-
LocalToningSaturation => { FlatName => '
|
541
|
+
LocalToningHue => { FlatName => 'ToningHue', Writable => 'real', List => 0 },
|
542
|
+
LocalToningSaturation => { FlatName => 'ToningSaturation', Writable => 'real', List => 0 },
|
504
543
|
LocalExposure2012 => { FlatName => 'Exposure2012', Writable => 'real', List => 0 },
|
505
544
|
LocalContrast2012 => { FlatName => 'Contrast2012', Writable => 'real', List => 0 },
|
506
545
|
LocalHighlights2012 => { FlatName => 'Highlights2012', Writable => 'real', List => 0 },
|
@@ -516,15 +555,20 @@ my %sCorrection = (
|
|
516
555
|
LocalBlacks2012 => { FlatName => 'Blacks2012', Writable => 'real', List => 0 },
|
517
556
|
LocalDehaze => { FlatName => 'Dehaze', Writable => 'real', List => 0 },
|
518
557
|
LocalTexture => { FlatName => 'Texture', Writable => 'real', List => 0 },
|
558
|
+
# new in LR 11.0
|
519
559
|
CorrectionRangeMask => {
|
560
|
+
Name => 'CorrRangeMask',
|
561
|
+
Notes => 'called CorrectionRangeMask by the spec',
|
520
562
|
FlatName => 'RangeMask',
|
521
|
-
Struct => \%
|
563
|
+
Struct => \%sCorrRangeMask,
|
522
564
|
},
|
523
565
|
CorrectionMasks => {
|
524
566
|
FlatName => 'Mask',
|
525
567
|
Struct => \%sCorrectionMask,
|
526
568
|
List => 'Seq',
|
527
569
|
},
|
570
|
+
CorrectionName => { },
|
571
|
+
CorrectionSyncID => { },
|
528
572
|
);
|
529
573
|
my %sRetouchArea = (
|
530
574
|
STRUCT_NAME => 'RetouchArea',
|
@@ -543,6 +587,30 @@ my %sRetouchArea = (
|
|
543
587
|
List => 'Seq',
|
544
588
|
},
|
545
589
|
);
|
590
|
+
my %sMapInfo = (
|
591
|
+
STRUCT_NAME => 'MapInfo',
|
592
|
+
NAMESPACE => 'crs',
|
593
|
+
NOTES => q{
|
594
|
+
Called RangeMaskMapInfo by the specification, the same as the containing
|
595
|
+
structure.
|
596
|
+
},
|
597
|
+
RGBMin => { },
|
598
|
+
RGBMax => { },
|
599
|
+
LabMin => { },
|
600
|
+
LabMax => { },
|
601
|
+
LumEq => { List => 'Seq' },
|
602
|
+
);
|
603
|
+
my %sRangeMask = (
|
604
|
+
STRUCT_NAME => 'RangeMask',
|
605
|
+
NAMESPACE => 'crs',
|
606
|
+
NOTES => q{
|
607
|
+
This structure is actually called RangeMaskMapInfo, but it only contains one
|
608
|
+
element which is a RangeMaskMapInfo structure (Yes, really!). So these are
|
609
|
+
renamed to RangeMask and MapInfo respectively to avoid confusion and
|
610
|
+
redundancy in the tag names.
|
611
|
+
},
|
612
|
+
RangeMaskMapInfo => { FlatName => 'MapInfo', Struct => \%sMapInfo },
|
613
|
+
);
|
546
614
|
|
547
615
|
# main XMP tag table (tag ID's are used for the family 1 group names)
|
548
616
|
%Image::ExifTool::XMP::Main = (
|
@@ -813,6 +881,18 @@ my %sRetouchArea = (
|
|
813
881
|
Name => 'Device',
|
814
882
|
SubDirectory => { TagTable => 'Image::ExifTool::XMP::Device' },
|
815
883
|
},
|
884
|
+
sdc => {
|
885
|
+
Name => 'sdc',
|
886
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::sdc' },
|
887
|
+
},
|
888
|
+
ast => {
|
889
|
+
Name => 'ast',
|
890
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ast' },
|
891
|
+
},
|
892
|
+
nine => {
|
893
|
+
Name => 'nine',
|
894
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Nikon::nine' },
|
895
|
+
},
|
816
896
|
);
|
817
897
|
|
818
898
|
# hack to allow XML containing Dublin Core metadata to be handled like XMP (eg. EPUB - see ZIP.pm)
|
@@ -1581,6 +1661,14 @@ my %sPantryItem = (
|
|
1581
1661
|
AutoToneDigestNoSat => { },
|
1582
1662
|
ToggleStyleDigest => { },
|
1583
1663
|
ToggleStyleAmount => { Writable => 'integer' },
|
1664
|
+
# new for LightRoom 11.0
|
1665
|
+
CompatibleVersion => { },
|
1666
|
+
MaskGroupBasedCorrections => {
|
1667
|
+
FlatName => 'MaskGroupBasedCorr',
|
1668
|
+
Struct => \%sCorrection,
|
1669
|
+
List => 'Seq',
|
1670
|
+
},
|
1671
|
+
RangeMaskMapInfo => { Name => 'RangeMask', Struct => \%sRangeMask, FlatName => 'RangeMask' },
|
1584
1672
|
);
|
1585
1673
|
|
1586
1674
|
# Tiff namespace properties (tiff)
|
@@ -1672,7 +1760,7 @@ my %sPantryItem = (
|
|
1672
1760
|
Software => { },
|
1673
1761
|
Artist => { Groups => { 2 => 'Author' } },
|
1674
1762
|
Copyright => { Groups => { 2 => 'Author' }, Writable => 'lang-alt' },
|
1675
|
-
NativeDigest => { }, #PH
|
1763
|
+
NativeDigest => { Avoid => 1 }, #PH
|
1676
1764
|
);
|
1677
1765
|
|
1678
1766
|
# Exif namespace properties (exif)
|
@@ -2061,8 +2149,8 @@ my %sPantryItem = (
|
|
2061
2149
|
Groups => { 2 => 'Location' },
|
2062
2150
|
Writable => 'integer',
|
2063
2151
|
PrintConv => {
|
2064
|
-
2 => '2-Dimensional',
|
2065
|
-
3 => '3-Dimensional',
|
2152
|
+
2 => '2-Dimensional Measurement',
|
2153
|
+
3 => '3-Dimensional Measurement',
|
2066
2154
|
},
|
2067
2155
|
},
|
2068
2156
|
GPSDOP => { Groups => { 2 => 'Location' }, Writable => 'rational' },
|
@@ -2307,6 +2395,7 @@ my %sPantryItem = (
|
|
2307
2395
|
VignetteCorrectionAlreadyApplied => { Writable => 'boolean' },
|
2308
2396
|
LateralChromaticAberrationCorrectionAlreadyApplied => { Writable => 'boolean' },
|
2309
2397
|
LensDistortInfo => { }, # (LR 7.5.1, 4 signed rational values)
|
2398
|
+
NeutralDensityFactor => { }, # (LR 11.0 - rational value, but denominator seems significant)
|
2310
2399
|
);
|
2311
2400
|
|
2312
2401
|
# IPTC Core namespace properties (Iptc4xmpCore) (ref 4)
|
@@ -2363,6 +2452,7 @@ my %sPantryItem = (
|
|
2363
2452
|
NOTES => 'Adobe Lightroom "lr" namespace tags.',
|
2364
2453
|
privateRTKInfo => { },
|
2365
2454
|
hierarchicalSubject => { List => 'Bag' },
|
2455
|
+
weightedFlatSubject => { List => 'Bag' },
|
2366
2456
|
);
|
2367
2457
|
|
2368
2458
|
# Adobe Album namespace properties (album) (ref PH)
|
@@ -3363,26 +3453,6 @@ NoLoop:
|
|
3363
3453
|
my $key = $et->FoundTag($tagInfo, $val) or return 0;
|
3364
3454
|
# save original components of rational numbers (used when copying)
|
3365
3455
|
$$et{RATIONAL}{$key} = $rational if defined $rational;
|
3366
|
-
# allow read-only subdirectories (eg. embedded base64 XMP/IPTC in NKSC files)
|
3367
|
-
if ($$tagInfo{SubDirectory} and not $$et{IsWriting}) {
|
3368
|
-
my $subdir = $$tagInfo{SubDirectory};
|
3369
|
-
my $dataPt = ref $$et{VALUE}{$key} ? $$et{VALUE}{$key} : \$$et{VALUE}{$key};
|
3370
|
-
# process subdirectory information
|
3371
|
-
my %dirInfo = (
|
3372
|
-
DirName => $$subdir{DirName} || $$tagInfo{Name},
|
3373
|
-
DataPt => $dataPt,
|
3374
|
-
DirLen => length $$dataPt,
|
3375
|
-
IsExtended => 1, # (hack to avoid Duplicate warning for embedded XMP)
|
3376
|
-
);
|
3377
|
-
my $oldOrder = GetByteOrder();
|
3378
|
-
SetByteOrder($$subdir{ByteOrder}) if $$subdir{ByteOrder};
|
3379
|
-
my $oldNS = $$et{definedNS};
|
3380
|
-
delete $$et{definedNS};
|
3381
|
-
my $subTablePtr = GetTagTable($$subdir{TagTable}) || $tagTablePtr;
|
3382
|
-
$et->ProcessDirectory(\%dirInfo, $subTablePtr, $$subdir{ProcessProc});
|
3383
|
-
SetByteOrder($oldOrder);
|
3384
|
-
$$et{definedNS} = $oldNS;
|
3385
|
-
}
|
3386
3456
|
# save structure/list information if necessary
|
3387
3457
|
if (@structProps and (@structProps > 1 or defined $structProps[0][1]) and
|
3388
3458
|
not $$et{NO_STRUCT})
|
@@ -3413,6 +3483,29 @@ NoLoop:
|
|
3413
3483
|
my $tagID = join('/',@$props);
|
3414
3484
|
$et->VerboseInfo($tagID, $tagInfo, Value => $rawVal || $val);
|
3415
3485
|
}
|
3486
|
+
# allow read-only subdirectories (eg. embedded base64 XMP/IPTC in NKSC files)
|
3487
|
+
if ($$tagInfo{SubDirectory} and not $$et{IsWriting}) {
|
3488
|
+
my $subdir = $$tagInfo{SubDirectory};
|
3489
|
+
my $dataPt = ref $$et{VALUE}{$key} ? $$et{VALUE}{$key} : \$$et{VALUE}{$key};
|
3490
|
+
# decode if necessary (eg. Nikon XMP-ast:XMLPackets)
|
3491
|
+
$dataPt = DecodeBase64($$dataPt) if $$tagInfo{Encoding} and $$tagInfo{Encoding} eq 'Base64';
|
3492
|
+
# process subdirectory information
|
3493
|
+
my %dirInfo = (
|
3494
|
+
DirName => $$subdir{DirName} || $$tagInfo{Name},
|
3495
|
+
DataPt => $dataPt,
|
3496
|
+
DirLen => length $$dataPt,
|
3497
|
+
IgnoreProp => $$subdir{IgnoreProp}, # (allow XML to ignore specified properties)
|
3498
|
+
IsExtended => 1, # (hack to avoid Duplicate warning for embedded XMP)
|
3499
|
+
);
|
3500
|
+
my $oldOrder = GetByteOrder();
|
3501
|
+
SetByteOrder($$subdir{ByteOrder}) if $$subdir{ByteOrder};
|
3502
|
+
my $oldNS = $$et{definedNS};
|
3503
|
+
delete $$et{definedNS};
|
3504
|
+
my $subTablePtr = GetTagTable($$subdir{TagTable}) || $tagTablePtr;
|
3505
|
+
$et->ProcessDirectory(\%dirInfo, $subTablePtr, $$subdir{ProcessProc});
|
3506
|
+
SetByteOrder($oldOrder);
|
3507
|
+
$$et{definedNS} = $oldNS;
|
3508
|
+
}
|
3416
3509
|
return 1;
|
3417
3510
|
}
|
3418
3511
|
|
@@ -3505,6 +3598,17 @@ sub ParseXMPElement($$$;$$$$)
|
|
3505
3598
|
}
|
3506
3599
|
$start = pos($$dataPt); # start from here the next time around
|
3507
3600
|
|
3601
|
+
# ignore specified XMP namespaces/properties
|
3602
|
+
if ($$et{EXCL_XMP_LOOKUP} and not $isWriting and $prop =~ /^(.+):(.*)/) {
|
3603
|
+
my ($ns, $nm) = (lc($stdXlatNS{$1} || $1), lc($2));
|
3604
|
+
if ($$et{EXCL_XMP_LOOKUP}{"xmp-$ns:all"} or $$et{EXCL_XMP_LOOKUP}{"xmp-$ns:$nm"} or
|
3605
|
+
$$et{EXCL_XMP_LOOKUP}{"xmp-all:$nm"})
|
3606
|
+
{
|
3607
|
+
++$count; # (pretend we found something so we don't store as a tag value)
|
3608
|
+
next;
|
3609
|
+
}
|
3610
|
+
}
|
3611
|
+
|
3508
3612
|
# extract property attributes
|
3509
3613
|
my ($parseResource, %attrs, @attrs);
|
3510
3614
|
while ($attrs =~ m/(\S+?)\s*=\s*(['"])(.*?)\2/sg) {
|
@@ -3602,9 +3706,9 @@ sub ParseXMPElement($$$;$$$$)
|
|
3602
3706
|
if ($nItems == 1000) {
|
3603
3707
|
my ($tg,$ns) = GetXMPTagID($propList);
|
3604
3708
|
if ($isWriting) {
|
3605
|
-
$et->
|
3709
|
+
$et->WarnOnce("Excessive number of items for $ns:$tg. Processing may be slow", 1);
|
3606
3710
|
} elsif (not $$et{OPTIONS}{IgnoreMinorErrors}) {
|
3607
|
-
$et->
|
3711
|
+
$et->WarnOnce("Extracted only 1000 $ns:$tg items. Ignore minor errors to extract all", 2);
|
3608
3712
|
last;
|
3609
3713
|
}
|
3610
3714
|
}
|
@@ -4261,7 +4365,7 @@ information.
|
|
4261
4365
|
|
4262
4366
|
=head1 AUTHOR
|
4263
4367
|
|
4264
|
-
Copyright 2003-
|
4368
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
4265
4369
|
|
4266
4370
|
This library is free software; you can redistribute it and/or modify it
|
4267
4371
|
under the same terms as Perl itself.
|
@@ -16,6 +16,7 @@
|
|
16
16
|
# 11) http://www.extensis.com/en/support/kb_article.jsp?articleNumber=6102211
|
17
17
|
# 12) XMPSpecificationPart3_May2013, page 58
|
18
18
|
# 13) https://developer.android.com/training/camera2/Dynamic-depth-v1.0.pdf
|
19
|
+
# 14) http://www.iptc.org/standards/photo-metadata/iptc-standard/
|
19
20
|
#------------------------------------------------------------------------------
|
20
21
|
|
21
22
|
package Image::ExifTool::XMP;
|
@@ -530,7 +531,7 @@ my %sImageRegion = ( # new in 1.5
|
|
530
531
|
rRole => { Namespace => 'Iptc4xmpExt', FlatName => 'Role', List => 'Bag', Struct => \%sEntity },
|
531
532
|
);
|
532
533
|
|
533
|
-
# IPTC Extension namespace properties (Iptc4xmpExt) (ref 4)
|
534
|
+
# IPTC Extension namespace properties (Iptc4xmpExt) (ref 4, 14)
|
534
535
|
%Image::ExifTool::XMP::iptcExt = (
|
535
536
|
%xmpTableDefaults,
|
536
537
|
GROUPS => { 1 => 'XMP-iptcExt', 2 => 'Author' },
|
@@ -2125,7 +2126,7 @@ This file contains definitions for less common XMP namespaces.
|
|
2125
2126
|
|
2126
2127
|
=head1 AUTHOR
|
2127
2128
|
|
2128
|
-
Copyright 2003-
|
2129
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
2129
2130
|
|
2130
2131
|
This library is free software; you can redistribute it and/or modify it
|
2131
2132
|
under the same terms as Perl itself.
|
@@ -855,7 +855,7 @@ information.
|
|
855
855
|
|
856
856
|
=head1 AUTHOR
|
857
857
|
|
858
|
-
Copyright 2003-
|
858
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
859
859
|
|
860
860
|
This library is free software; you can redistribute it and/or modify it
|
861
861
|
under the same terms as Perl itself.
|
@@ -19,7 +19,7 @@ use strict;
|
|
19
19
|
use vars qw($VERSION $warnString);
|
20
20
|
use Image::ExifTool qw(:DataAccess :Utils);
|
21
21
|
|
22
|
-
$VERSION = '1.
|
22
|
+
$VERSION = '1.27';
|
23
23
|
|
24
24
|
sub WarnProc($) { $warnString = $_[0]; }
|
25
25
|
|
@@ -125,6 +125,7 @@ my %iWorkType = (
|
|
125
125
|
Name => 'ZipFileName',
|
126
126
|
Format => 'string[$$self{ZipFileNameLength}]',
|
127
127
|
},
|
128
|
+
_com => 'ZipFileComment',
|
128
129
|
);
|
129
130
|
|
130
131
|
# GNU ZIP tags (ref 3)
|
@@ -380,6 +381,8 @@ sub HandleMember($$;$)
|
|
380
381
|
$et->HandleTag($tagTablePtr, 9, $member->compressedSize());
|
381
382
|
$et->HandleTag($tagTablePtr, 11, $member->uncompressedSize());
|
382
383
|
$et->HandleTag($tagTablePtr, 15, $member->fileName());
|
384
|
+
my $com = $member->fileComment();
|
385
|
+
$et->HandleTag($tagTablePtr, '_com', $com) if defined $com and length $com;
|
383
386
|
}
|
384
387
|
|
385
388
|
#------------------------------------------------------------------------------
|
@@ -448,6 +451,10 @@ sub ProcessZIP($$)
|
|
448
451
|
$et->Warn("$err reading ZIP file");
|
449
452
|
last;
|
450
453
|
}
|
454
|
+
# extract zip file comment
|
455
|
+
my $comment = $zip->zipfileComment();
|
456
|
+
$et->FoundTag(Comment => $comment) if defined $comment and length $comment;
|
457
|
+
|
451
458
|
$$dirInfo{ZIP} = $zip;
|
452
459
|
|
453
460
|
# check for an Office Open file (DOCX, etc)
|
@@ -655,6 +662,7 @@ sub ProcessZIP($$)
|
|
655
662
|
DataLen => 30 + $len,
|
656
663
|
DirStart => 0,
|
657
664
|
DirLen => 30 + $len,
|
665
|
+
MixedTags => 1, # (to ignore FileComment tag)
|
658
666
|
);
|
659
667
|
$et->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
660
668
|
my $flags = Get16u(\$buff, 6);
|
@@ -700,7 +708,7 @@ Electronic Publication (EPUB), and Sketch design files (SKETCH).
|
|
700
708
|
|
701
709
|
=head1 AUTHOR
|
702
710
|
|
703
|
-
Copyright 2003-
|
711
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
704
712
|
|
705
713
|
This library is free software; you can redistribute it and/or modify it
|
706
714
|
under the same terms as Perl itself.
|
@@ -220,7 +220,7 @@ metadata from Zeiss Integrated Software RAW (ZISRAW) CZI files.
|
|
220
220
|
|
221
221
|
=head1 AUTHOR
|
222
222
|
|
223
|
-
Copyright 2003-
|
223
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
224
224
|
|
225
225
|
This library is free software; you can redistribute it and/or modify it
|
226
226
|
under the same terms as Perl itself.
|
@@ -215,7 +215,7 @@ information from Apple iWork '09 XML+ZIP files.
|
|
215
215
|
|
216
216
|
=head1 AUTHOR
|
217
217
|
|
218
|
-
Copyright 2003-
|
218
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
219
219
|
|
220
220
|
This library is free software; you can redistribute it and/or modify it
|
221
221
|
under the same terms as Perl itself.
|
data/bin/lib/Image/ExifTool.pm
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
# Revisions: Nov. 12/2003 - P. Harvey Created
|
9
9
|
# (See html/history.html for revision history)
|
10
10
|
#
|
11
|
-
# Legal: Copyright (c) 2003-
|
11
|
+
# Legal: Copyright (c) 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
12
12
|
# This library is free software; you can redistribute it and/or
|
13
13
|
# modify it under the same terms as Perl itself.
|
14
14
|
#------------------------------------------------------------------------------
|
@@ -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.39';
|
33
33
|
$RELEASE = '';
|
34
34
|
@ISA = qw(Exporter);
|
35
35
|
%EXPORT_TAGS = (
|
@@ -406,6 +406,8 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
406
406
|
# NDPI => ['TIFF', 'Hamamatsu NanoZoomer Digital Pathology Image'],
|
407
407
|
NEF => ['TIFF', 'Nikon (RAW) Electronic Format'],
|
408
408
|
NEWER => 'COS',
|
409
|
+
NKSC => ['XMP', 'Nikon Sidecar'],
|
410
|
+
|
409
411
|
NMBTEMPLATE => ['ZIP','Apple Numbers Template'],
|
410
412
|
NRW => ['TIFF', 'Nikon RAW (2)'],
|
411
413
|
NUMBERS => ['ZIP','Apple Numbers spreadsheet'],
|
@@ -691,6 +693,7 @@ my %fileDescription = (
|
|
691
693
|
MRW => 'image/x-minolta-mrw',
|
692
694
|
MXF => 'application/mxf',
|
693
695
|
NEF => 'image/x-nikon-nef',
|
696
|
+
NKSC => 'application/x-nikon-nxstudio',
|
694
697
|
NRW => 'image/x-nikon-nrw',
|
695
698
|
NUMBERS => 'application/x-iwork-numbers-sffnumbers',
|
696
699
|
ODB => 'application/vnd.oasis.opendocument.database',
|
@@ -1211,10 +1214,10 @@ my %systemTagsNotes = (
|
|
1211
1214
|
ZoneIdentifier => {
|
1212
1215
|
Groups => { 1 => 'System', 2 => 'Other' },
|
1213
1216
|
Notes => q{
|
1214
|
-
Windows only.
|
1215
|
-
data stream, which is used by some Windows browsers to mark
|
1216
|
-
as possibly unsafe to run. May be deleted to remove this
|
1217
|
-
Win32API::File
|
1217
|
+
Windows only. Existence indicates that the file has a Zone.Identifier
|
1218
|
+
alternate data stream, which is used by some Windows browsers to mark
|
1219
|
+
downloaded files as possibly unsafe to run. May be deleted to remove this
|
1220
|
+
stream. Requires Win32API::File
|
1218
1221
|
},
|
1219
1222
|
Writable => 1,
|
1220
1223
|
WritePseudo => 1,
|
@@ -4088,8 +4091,9 @@ sub Open($*$;$)
|
|
4088
4091
|
my ($self, $fh, $file, $mode) = @_;
|
4089
4092
|
|
4090
4093
|
$file =~ s/^([\s&])/.\/$1/; # protect leading whitespace or ampersand
|
4091
|
-
# default to read mode ('<') unless input is a pipe
|
4092
|
-
$mode = ($file =~ /\|$/ ? '' : '<') unless $mode;
|
4094
|
+
# default to read mode ('<') unless input is a trusted pipe
|
4095
|
+
$mode = (($file =~ /\|$/ and $$self{TRUST_PIPE}) ? '' : '<') unless $mode;
|
4096
|
+
delete $$self{TRUST_PIPE};
|
4093
4097
|
if ($mode) {
|
4094
4098
|
if ($self->EncodeFileName($file)) {
|
4095
4099
|
# handle Windows Unicode file name
|
@@ -4252,6 +4256,7 @@ sub ParseArguments($;@)
|
|
4252
4256
|
$$self{REQ_TAG_LOOKUP} = { };
|
4253
4257
|
$$self{EXCL_TAG_LOOKUP} = { };
|
4254
4258
|
$$self{IO_TAG_LIST} = undef;
|
4259
|
+
delete $$self{EXCL_XMP_LOOKUP};
|
4255
4260
|
|
4256
4261
|
# handle our input arguments
|
4257
4262
|
while (@_) {
|
@@ -4335,7 +4340,11 @@ sub ParseArguments($;@)
|
|
4335
4340
|
# generate lookup for excluded tags
|
4336
4341
|
if ($$options{Exclude}) {
|
4337
4342
|
foreach (@{$$options{Exclude}}) {
|
4338
|
-
/([-\w]+)#?$/ and $$self{EXCL_TAG_LOOKUP}{lc
|
4343
|
+
/([-\w]+)#?$/ and $$self{EXCL_TAG_LOOKUP}{lc $1} = 1;
|
4344
|
+
if (/(xmp-.*:[-\w]+)#?/i) {
|
4345
|
+
$$self{EXCL_XMP_LOOKUP} or $$self{EXCL_XMP_LOOKUP} = { };
|
4346
|
+
$$self{EXCL_XMP_LOOKUP}{lc $1} = 1;
|
4347
|
+
}
|
4339
4348
|
}
|
4340
4349
|
# exclude list is used only for EXCL_TAG_LOOKUP when TAGS_FROM_FILE is set
|
4341
4350
|
undef $$options{Exclude} if $$self{TAGS_FROM_FILE};
|
@@ -6023,6 +6032,8 @@ sub IdentifyTrailer($;$)
|
|
6023
6032
|
$type = 'Samsung';
|
6024
6033
|
} elsif ($buff =~ /8db42d694ccc418790edff439fe026bf$/s) {
|
6025
6034
|
$type = 'Insta360';
|
6035
|
+
} elsif ($buff =~ m(\0{6}/NIKON APP$)) {
|
6036
|
+
$type = 'NikonApp';
|
6026
6037
|
}
|
6027
6038
|
last;
|
6028
6039
|
}
|
@@ -6058,6 +6069,9 @@ sub ProcessTrailers($$)
|
|
6058
6069
|
if ($dirName eq 'Insta360') {
|
6059
6070
|
require 'Image/ExifTool/QuickTimeStream.pl';
|
6060
6071
|
$proc = 'Image::ExifTool::QuickTime::ProcessInsta360';
|
6072
|
+
} elsif ($dirName eq 'NikonApp') {
|
6073
|
+
require Image::ExifTool::Nikon;
|
6074
|
+
$proc = 'Image::ExifTool::Nikon::ProcessNikonApp';
|
6061
6075
|
} else {
|
6062
6076
|
require "Image/ExifTool/$dirName.pm";
|
6063
6077
|
$proc = "Image::ExifTool::${dirName}::Process$dirName";
|
@@ -6309,7 +6323,7 @@ sub ProcessJPEG($$)
|
|
6309
6323
|
my $markerName = JpegMarkerName($marker);
|
6310
6324
|
$$path[$pn] = $markerName;
|
6311
6325
|
# issue warning if we skipped some garbage
|
6312
|
-
if ($skipped and not $foundSOS) {
|
6326
|
+
if ($skipped and not $foundSOS and $markerName ne 'SOS') {
|
6313
6327
|
$self->Warn("Skipped unknown $skipped bytes after JPEG $markerName segment", 1);
|
6314
6328
|
if ($htmlDump) {
|
6315
6329
|
$self->HDump($nextSegPos-4-$skipped, $skipped, "[unknown $skipped bytes]", undef, 0x08);
|