exiftool-vendored.exe 12.31.0 → 12.39.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/LICENSE +254 -247
- package/bin/exiftool_files/Changes +130 -4
- package/bin/exiftool_files/README +45 -45
- package/bin/exiftool_files/arg_files/xmp2exif.args +2 -1
- package/bin/exiftool_files/exiftool.pl +143 -101
- package/bin/exiftool_files/lib/File/RandomAccess.pm +1 -1
- package/bin/exiftool_files/lib/File/RandomAccess.pod +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/AES.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/AFCP.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/AIFF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/APE.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/APP12.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ASF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Audible.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BMP.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BPG.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BZZ.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BigTIFF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +17 -5
- package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +331 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +171 -13
- package/bin/exiftool_files/lib/Image/ExifTool/CanonCustom.pm +13 -3
- package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/CaptureOne.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Casio.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Charset.pm +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DICOM.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DJI.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DNG.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DPX.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DV.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DarwinCore.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/DjVu.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/EXE.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +118 -4
- package/bin/exiftool_files/lib/Image/ExifTool/FITS.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/FLAC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/FLIF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/FLIR.pm +48 -11
- package/bin/exiftool_files/lib/Image/ExifTool/Fixup.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Flash.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Font.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/FotoStation.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/GE.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/GIF.pm +6 -2
- package/bin/exiftool_files/lib/Image/ExifTool/GIMP.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +15 -11
- package/bin/exiftool_files/lib/Image/ExifTool/GeoTiff.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +14 -3
- package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/H264.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/HP.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/HTML.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/HtmlDump.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +97 -5
- package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/IPTC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ISO.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ITC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Import.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/InDesign.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/JPEG.pm +6 -2
- package/bin/exiftool_files/lib/Image/ExifTool/JPEGDigest.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +8 -4
- package/bin/exiftool_files/lib/Image/ExifTool/JVC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +155 -25
- package/bin/exiftool_files/lib/Image/ExifTool/Kodak.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/LIF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/LNK.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/cs.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/de.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/es.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/fi.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/fr.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/it.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/ja.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/ko.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/nl.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/pl.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/ru.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/sv.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/tr.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Leaf.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lytro.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MIE.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MIEUnits.pod +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MIFF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MNG.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MOI.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MPC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MPEG.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MPF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MRC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MWG.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MXF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/MakerNotes.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Matroska.pm +9 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Microsoft.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Minolta.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Motorola.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +1895 -74
- package/bin/exiftool_files/lib/Image/ExifTool/NikonCapture.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +523 -6
- package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +150 -87
- package/bin/exiftool_files/lib/Image/ExifTool/Nintendo.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/OOXML.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Ogg.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +6 -2
- package/bin/exiftool_files/lib/Image/ExifTool/OpenEXR.pm +5 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Opus.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Other.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PCX.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +6 -4
- package/bin/exiftool_files/lib/Image/ExifTool/PGF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PICT.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PLIST.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PLUS.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +29 -8
- package/bin/exiftool_files/lib/Image/ExifTool/PPM.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PSP.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Palm.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Parrot.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +4 -2
- package/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PhotoCD.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Photoshop.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PostScript.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PrintIM.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Qualcomm.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +25 -4
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +125 -81
- package/bin/exiftool_files/lib/Image/ExifTool/README +9 -2
- package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/RSRC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/RTF.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Radiance.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Rawzor.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Real.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Reconyx.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Red.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Ricoh.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Sanyo.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Scalado.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Shift.pl +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Shortcuts.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Sigma.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/SigmaRaw.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +34 -14
- package/bin/exiftool_files/lib/Image/ExifTool/SonyIDC.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Stim.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/TagInfoXML.pm +11 -6
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +6589 -5877
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +1681 -65
- package/bin/exiftool_files/lib/Image/ExifTool/Text.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Theora.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Torrent.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Unknown.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/VCard.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Vorbis.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WTV.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WritePNG.pl +30 -10
- package/bin/exiftool_files/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WritePostScript.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +12 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +11 -12
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +56 -10
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +164 -52
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +6 -3
- package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +4 -2
- package/bin/exiftool_files/lib/Image/ExifTool/ZIP.pm +10 -2
- package/bin/exiftool_files/lib/Image/ExifTool/ZISRAW.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/iWork.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool.pm +8939 -8864
- package/bin/exiftool_files/lib/Image/ExifTool.pod +76 -67
- package/package.json +3 -3
|
@@ -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)
|
|
@@ -1533,6 +1613,9 @@ my %sPantryItem = (
|
|
|
1533
1613
|
CameraProfile => { },
|
|
1534
1614
|
LookTable => { },
|
|
1535
1615
|
ToneCurvePV2012 => { List => 'Seq' },
|
|
1616
|
+
ToneCurvePV2012Red => { List => 'Seq' },
|
|
1617
|
+
ToneCurvePV2012Green => { List => 'Seq' },
|
|
1618
|
+
ToneCurvePV2012Blue => { List => 'Seq' },
|
|
1536
1619
|
},
|
|
1537
1620
|
},
|
|
1538
1621
|
}
|
|
@@ -1578,6 +1661,14 @@ my %sPantryItem = (
|
|
|
1578
1661
|
AutoToneDigestNoSat => { },
|
|
1579
1662
|
ToggleStyleDigest => { },
|
|
1580
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' },
|
|
1581
1672
|
);
|
|
1582
1673
|
|
|
1583
1674
|
# Tiff namespace properties (tiff)
|
|
@@ -1669,7 +1760,7 @@ my %sPantryItem = (
|
|
|
1669
1760
|
Software => { },
|
|
1670
1761
|
Artist => { Groups => { 2 => 'Author' } },
|
|
1671
1762
|
Copyright => { Groups => { 2 => 'Author' }, Writable => 'lang-alt' },
|
|
1672
|
-
NativeDigest => { }, #PH
|
|
1763
|
+
NativeDigest => { Avoid => 1 }, #PH
|
|
1673
1764
|
);
|
|
1674
1765
|
|
|
1675
1766
|
# Exif namespace properties (exif)
|
|
@@ -2058,8 +2149,8 @@ my %sPantryItem = (
|
|
|
2058
2149
|
Groups => { 2 => 'Location' },
|
|
2059
2150
|
Writable => 'integer',
|
|
2060
2151
|
PrintConv => {
|
|
2061
|
-
2 => '2-Dimensional',
|
|
2062
|
-
3 => '3-Dimensional',
|
|
2152
|
+
2 => '2-Dimensional Measurement',
|
|
2153
|
+
3 => '3-Dimensional Measurement',
|
|
2063
2154
|
},
|
|
2064
2155
|
},
|
|
2065
2156
|
GPSDOP => { Groups => { 2 => 'Location' }, Writable => 'rational' },
|
|
@@ -2139,8 +2230,8 @@ my %sPantryItem = (
|
|
|
2139
2230
|
NAMESPACE => 'exifEX',
|
|
2140
2231
|
PRIORITY => 0, # not as reliable as actual EXIF tags
|
|
2141
2232
|
NOTES => q{
|
|
2142
|
-
EXIF tags added by the EXIF 2.
|
|
2143
|
-
L<
|
|
2233
|
+
EXIF tags added by the EXIF 2.32 for XMP specification (see
|
|
2234
|
+
L<https://cipa.jp/std/documents/download_e.html?DC-010-2020_E>).
|
|
2144
2235
|
},
|
|
2145
2236
|
Gamma => { Writable => 'rational' },
|
|
2146
2237
|
PhotographicSensitivity => { Writable => 'integer' },
|
|
@@ -2304,6 +2395,7 @@ my %sPantryItem = (
|
|
|
2304
2395
|
VignetteCorrectionAlreadyApplied => { Writable => 'boolean' },
|
|
2305
2396
|
LateralChromaticAberrationCorrectionAlreadyApplied => { Writable => 'boolean' },
|
|
2306
2397
|
LensDistortInfo => { }, # (LR 7.5.1, 4 signed rational values)
|
|
2398
|
+
NeutralDensityFactor => { }, # (LR 11.0 - rational value, but denominator seems significant)
|
|
2307
2399
|
);
|
|
2308
2400
|
|
|
2309
2401
|
# IPTC Core namespace properties (Iptc4xmpCore) (ref 4)
|
|
@@ -2346,6 +2438,9 @@ my %sPantryItem = (
|
|
|
2346
2438
|
Scene => { Groups => { 2 => 'Other' }, List => 'Bag' },
|
|
2347
2439
|
SubjectCode => { Groups => { 2 => 'Other' }, List => 'Bag' },
|
|
2348
2440
|
# Copyright - have seen this in a sample (Jan 2021), but I think it is non-standard
|
|
2441
|
+
# new IPTC Core 1.3 properties
|
|
2442
|
+
AltTextAccessibility => { Groups => { 2 => 'Other' }, Writable => 'lang-alt' },
|
|
2443
|
+
ExtDescrAccessibility => { Groups => { 2 => 'Other' }, Writable => 'lang-alt' },
|
|
2349
2444
|
);
|
|
2350
2445
|
|
|
2351
2446
|
# Adobe Lightroom namespace properties (lr) (ref PH)
|
|
@@ -2357,6 +2452,7 @@ my %sPantryItem = (
|
|
|
2357
2452
|
NOTES => 'Adobe Lightroom "lr" namespace tags.',
|
|
2358
2453
|
privateRTKInfo => { },
|
|
2359
2454
|
hierarchicalSubject => { List => 'Bag' },
|
|
2455
|
+
weightedFlatSubject => { List => 'Bag' },
|
|
2360
2456
|
);
|
|
2361
2457
|
|
|
2362
2458
|
# Adobe Album namespace properties (album) (ref PH)
|
|
@@ -3357,26 +3453,6 @@ NoLoop:
|
|
|
3357
3453
|
my $key = $et->FoundTag($tagInfo, $val) or return 0;
|
|
3358
3454
|
# save original components of rational numbers (used when copying)
|
|
3359
3455
|
$$et{RATIONAL}{$key} = $rational if defined $rational;
|
|
3360
|
-
# allow read-only subdirectories (eg. embedded base64 XMP/IPTC in NKSC files)
|
|
3361
|
-
if ($$tagInfo{SubDirectory} and not $$et{IsWriting}) {
|
|
3362
|
-
my $subdir = $$tagInfo{SubDirectory};
|
|
3363
|
-
my $dataPt = ref $$et{VALUE}{$key} ? $$et{VALUE}{$key} : \$$et{VALUE}{$key};
|
|
3364
|
-
# process subdirectory information
|
|
3365
|
-
my %dirInfo = (
|
|
3366
|
-
DirName => $$subdir{DirName} || $$tagInfo{Name},
|
|
3367
|
-
DataPt => $dataPt,
|
|
3368
|
-
DirLen => length $$dataPt,
|
|
3369
|
-
IsExtended => 1, # (hack to avoid Duplicate warning for embedded XMP)
|
|
3370
|
-
);
|
|
3371
|
-
my $oldOrder = GetByteOrder();
|
|
3372
|
-
SetByteOrder($$subdir{ByteOrder}) if $$subdir{ByteOrder};
|
|
3373
|
-
my $oldNS = $$et{definedNS};
|
|
3374
|
-
delete $$et{definedNS};
|
|
3375
|
-
my $subTablePtr = GetTagTable($$subdir{TagTable}) || $tagTablePtr;
|
|
3376
|
-
$et->ProcessDirectory(\%dirInfo, $subTablePtr, $$subdir{ProcessProc});
|
|
3377
|
-
SetByteOrder($oldOrder);
|
|
3378
|
-
$$et{definedNS} = $oldNS;
|
|
3379
|
-
}
|
|
3380
3456
|
# save structure/list information if necessary
|
|
3381
3457
|
if (@structProps and (@structProps > 1 or defined $structProps[0][1]) and
|
|
3382
3458
|
not $$et{NO_STRUCT})
|
|
@@ -3407,6 +3483,29 @@ NoLoop:
|
|
|
3407
3483
|
my $tagID = join('/',@$props);
|
|
3408
3484
|
$et->VerboseInfo($tagID, $tagInfo, Value => $rawVal || $val);
|
|
3409
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
|
+
}
|
|
3410
3509
|
return 1;
|
|
3411
3510
|
}
|
|
3412
3511
|
|
|
@@ -3499,6 +3598,17 @@ sub ParseXMPElement($$$;$$$$)
|
|
|
3499
3598
|
}
|
|
3500
3599
|
$start = pos($$dataPt); # start from here the next time around
|
|
3501
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
|
+
|
|
3502
3612
|
# extract property attributes
|
|
3503
3613
|
my ($parseResource, %attrs, @attrs);
|
|
3504
3614
|
while ($attrs =~ m/(\S+?)\s*=\s*(['"])(.*?)\2/sg) {
|
|
@@ -3596,9 +3706,9 @@ sub ParseXMPElement($$$;$$$$)
|
|
|
3596
3706
|
if ($nItems == 1000) {
|
|
3597
3707
|
my ($tg,$ns) = GetXMPTagID($propList);
|
|
3598
3708
|
if ($isWriting) {
|
|
3599
|
-
$et->
|
|
3709
|
+
$et->WarnOnce("Excessive number of items for $ns:$tg. Processing may be slow", 1);
|
|
3600
3710
|
} elsif (not $$et{OPTIONS}{IgnoreMinorErrors}) {
|
|
3601
|
-
$et->
|
|
3711
|
+
$et->WarnOnce("Extracted only 1000 $ns:$tg items. Ignore minor errors to extract all", 2);
|
|
3602
3712
|
last;
|
|
3603
3713
|
}
|
|
3604
3714
|
}
|
|
@@ -3960,7 +4070,7 @@ sub ProcessXMP($$;$)
|
|
|
3960
4070
|
} elsif ($1 eq 'REDXIF') {
|
|
3961
4071
|
$type = 'RMD';
|
|
3962
4072
|
$mime = 'application/xml';
|
|
3963
|
-
}
|
|
4073
|
+
} elsif ($1 ne 'fcpxml') { # Final Cut Pro XML
|
|
3964
4074
|
return 0;
|
|
3965
4075
|
}
|
|
3966
4076
|
} elsif ($buf2 =~ /<svg[\s>]/) {
|
|
@@ -3970,14 +4080,16 @@ sub ProcessXMP($$;$)
|
|
|
3970
4080
|
} elsif ($buf2 =~ /<plist[\s>]/) {
|
|
3971
4081
|
$type = 'PLIST';
|
|
3972
4082
|
}
|
|
3973
|
-
if ($isSVG and $$et{XMP_CAPTURE}) {
|
|
3974
|
-
$et->Error("ExifTool does not yet support writing of SVG images");
|
|
3975
|
-
return 0;
|
|
3976
|
-
}
|
|
3977
4083
|
}
|
|
3978
4084
|
$isXML = 1;
|
|
3979
4085
|
} elsif ($2 eq '<rdf:RDF') {
|
|
3980
4086
|
$isRDF = 1; # recognize XMP without x:xmpmeta element
|
|
4087
|
+
} elsif ($2 eq '<svg') {
|
|
4088
|
+
$isSVG = $isXML = 1;
|
|
4089
|
+
}
|
|
4090
|
+
if ($isSVG and $$et{XMP_CAPTURE}) {
|
|
4091
|
+
$et->Error("ExifTool does not yet support writing of SVG images");
|
|
4092
|
+
return 0;
|
|
3981
4093
|
}
|
|
3982
4094
|
if ($buff =~ /^\0\0/) {
|
|
3983
4095
|
$fmt = 'N'; # UTF-32 MM with or without BOM
|
|
@@ -4253,7 +4365,7 @@ information.
|
|
|
4253
4365
|
|
|
4254
4366
|
=head1 AUTHOR
|
|
4255
4367
|
|
|
4256
|
-
Copyright 2003-
|
|
4368
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
4257
4369
|
|
|
4258
4370
|
This library is free software; you can redistribute it and/or modify it
|
|
4259
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,14 +531,14 @@ 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' },
|
|
537
538
|
NAMESPACE => 'Iptc4xmpExt',
|
|
538
539
|
TABLE_DESC => 'XMP IPTC Extension',
|
|
539
540
|
NOTES => q{
|
|
540
|
-
This table contains tags defined by the IPTC Extension schema version 1.
|
|
541
|
+
This table contains tags defined by the IPTC Extension schema version 1.6.
|
|
541
542
|
The actual namespace prefix is "Iptc4xmpExt", but ExifTool shortens this for
|
|
542
543
|
the family 1 group name. (see
|
|
543
544
|
L<http://www.iptc.org/standards/photo-metadata/iptc-standard/>)
|
|
@@ -797,6 +798,8 @@ my %sImageRegion = ( # new in 1.5
|
|
|
797
798
|
audioBitsPerSample => { Groups => { 2 => 'Audio' }, Writable => 'integer' },
|
|
798
799
|
# new IPTC Extension schema 1.5 property
|
|
799
800
|
ImageRegion => { Groups => { 2 => 'Image' }, List => 'Bag', Struct => \%sImageRegion },
|
|
801
|
+
# new Extension 1.6 property
|
|
802
|
+
EventId => { Name => 'EventID', List => 'Bag' },
|
|
800
803
|
);
|
|
801
804
|
|
|
802
805
|
#------------------------------------------------------------------------------
|
|
@@ -2123,7 +2126,7 @@ This file contains definitions for less common XMP namespaces.
|
|
|
2123
2126
|
|
|
2124
2127
|
=head1 AUTHOR
|
|
2125
2128
|
|
|
2126
|
-
Copyright 2003-
|
|
2129
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
2127
2130
|
|
|
2128
2131
|
This library is free software; you can redistribute it and/or modify it
|
|
2129
2132
|
under the same terms as Perl itself.
|
|
@@ -32,7 +32,9 @@ sub SerializeStruct($;$)
|
|
|
32
32
|
my ($key, $val, @vals, $rtnVal);
|
|
33
33
|
|
|
34
34
|
if (ref $obj eq 'HASH') {
|
|
35
|
-
|
|
35
|
+
# support hashes with ordered keys
|
|
36
|
+
my @keys = $$obj{_ordered_keys_} ? @{$$obj{_ordered_keys_}} : sort keys %$obj;
|
|
37
|
+
foreach $key (@keys) {
|
|
36
38
|
push @vals, $key . '=' . SerializeStruct($$obj{$key}, '}');
|
|
37
39
|
}
|
|
38
40
|
$rtnVal = '{' . join(',', @vals) . '}';
|
|
@@ -853,7 +855,7 @@ information.
|
|
|
853
855
|
|
|
854
856
|
=head1 AUTHOR
|
|
855
857
|
|
|
856
|
-
Copyright 2003-
|
|
858
|
+
Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
|
|
857
859
|
|
|
858
860
|
This library is free software; you can redistribute it and/or modify it
|
|
859
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.
|