exiftool-vendored.pl 13.0.1 → 13.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/Changes +254 -20
- package/bin/MANIFEST +10 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +3 -3
- package/bin/arg_files/exif2xmp.args +4 -0
- package/bin/arg_files/xmp2exif.args +2 -1
- package/bin/build_geolocation +1 -1
- package/bin/exiftool +356 -213
- package/bin/lib/File/RandomAccess.pm +1 -1
- package/bin/lib/File/RandomAccess.pod +2 -2
- package/bin/lib/Image/ExifTool/AAC.pm +1 -1
- package/bin/lib/Image/ExifTool/AES.pm +1 -1
- package/bin/lib/Image/ExifTool/AFCP.pm +6 -6
- package/bin/lib/Image/ExifTool/AIFF.pm +2 -2
- package/bin/lib/Image/ExifTool/APE.pm +2 -2
- package/bin/lib/Image/ExifTool/APP12.pm +1 -1
- package/bin/lib/Image/ExifTool/ASF.pm +2 -2
- package/bin/lib/Image/ExifTool/Apple.pm +11 -9
- package/bin/lib/Image/ExifTool/Audible.pm +1 -1
- package/bin/lib/Image/ExifTool/BMP.pm +1 -1
- package/bin/lib/Image/ExifTool/BPG.pm +1 -1
- package/bin/lib/Image/ExifTool/BZZ.pm +1 -1
- package/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +36 -22
- package/bin/lib/Image/ExifTool/CBOR.pm +5 -2
- package/bin/lib/Image/ExifTool/Canon.pm +66 -27
- package/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
- package/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
- package/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
- package/bin/lib/Image/ExifTool/Casio.pm +1 -1
- package/bin/lib/Image/ExifTool/Charset.pm +1 -1
- package/bin/lib/Image/ExifTool/DICOM.pm +1 -1
- package/bin/lib/Image/ExifTool/DJI.pm +196 -30
- package/bin/lib/Image/ExifTool/DNG.pm +1 -1
- package/bin/lib/Image/ExifTool/DPX.pm +1 -1
- package/bin/lib/Image/ExifTool/DV.pm +1 -1
- package/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
- package/bin/lib/Image/ExifTool/DjVu.pm +1 -1
- package/bin/lib/Image/ExifTool/EXE.pm +138 -33
- package/bin/lib/Image/ExifTool/Exif.pm +29 -16
- package/bin/lib/Image/ExifTool/FITS.pm +3 -3
- package/bin/lib/Image/ExifTool/FLAC.pm +1 -1
- package/bin/lib/Image/ExifTool/FLIF.pm +3 -3
- package/bin/lib/Image/ExifTool/FLIR.pm +1 -1
- package/bin/lib/Image/ExifTool/Fixup.pm +1 -1
- package/bin/lib/Image/ExifTool/Flash.pm +1 -1
- package/bin/lib/Image/ExifTool/FlashPix.pm +17 -21
- package/bin/lib/Image/ExifTool/Font.pm +2 -2
- package/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
- package/bin/lib/Image/ExifTool/FujiFilm.pm +1 -1
- package/bin/lib/Image/ExifTool/GE.pm +1 -1
- package/bin/lib/Image/ExifTool/GIF.pm +144 -93
- package/bin/lib/Image/ExifTool/GIMP.pm +1 -1
- package/bin/lib/Image/ExifTool/GM.pm +1 -1
- package/bin/lib/Image/ExifTool/GPS.pm +34 -30
- package/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
- package/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/lib/Image/ExifTool/Geolocation.pm +19 -9
- package/bin/lib/Image/ExifTool/Geotag.pm +46 -12
- package/bin/lib/Image/ExifTool/GoPro.pm +120 -8
- package/bin/lib/Image/ExifTool/H264.pm +1 -1
- package/bin/lib/Image/ExifTool/HP.pm +2 -2
- package/bin/lib/Image/ExifTool/HTML.pm +1 -1
- package/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
- package/bin/lib/Image/ExifTool/ICC_Profile.pm +81 -2
- package/bin/lib/Image/ExifTool/ICO.pm +1 -1
- package/bin/lib/Image/ExifTool/ID3.pm +8 -8
- package/bin/lib/Image/ExifTool/IPTC.pm +10 -7
- package/bin/lib/Image/ExifTool/ISO.pm +1 -1
- package/bin/lib/Image/ExifTool/ITC.pm +1 -1
- package/bin/lib/Image/ExifTool/Import.pm +5 -4
- package/bin/lib/Image/ExifTool/InDesign.pm +2 -2
- package/bin/lib/Image/ExifTool/InfiRay.pm +1 -1
- package/bin/lib/Image/ExifTool/JPEG.pm +32 -5
- package/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
- package/bin/lib/Image/ExifTool/JSON.pm +1 -1
- package/bin/lib/Image/ExifTool/JVC.pm +1 -1
- package/bin/lib/Image/ExifTool/Jpeg2000.pm +10 -9
- package/bin/lib/Image/ExifTool/Kodak.pm +1 -1
- package/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/LIF.pm +1 -1
- package/bin/lib/Image/ExifTool/LNK.pm +2 -2
- package/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/sk.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
- package/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
- package/bin/lib/Image/ExifTool/Leaf.pm +1 -1
- package/bin/lib/Image/ExifTool/LigoGPS.pm +409 -0
- package/bin/lib/Image/ExifTool/Lytro.pm +1 -1
- package/bin/lib/Image/ExifTool/M2TS.pm +57 -18
- package/bin/lib/Image/ExifTool/MIE.pm +15 -6
- package/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
- package/bin/lib/Image/ExifTool/MIFF.pm +1 -1
- package/bin/lib/Image/ExifTool/MISB.pm +1 -1
- package/bin/lib/Image/ExifTool/MNG.pm +1 -1
- package/bin/lib/Image/ExifTool/MOI.pm +1 -1
- package/bin/lib/Image/ExifTool/MPC.pm +1 -1
- package/bin/lib/Image/ExifTool/MPEG.pm +1 -1
- package/bin/lib/Image/ExifTool/MPF.pm +1 -1
- package/bin/lib/Image/ExifTool/MRC.pm +1 -1
- package/bin/lib/Image/ExifTool/MWG.pm +1 -1
- package/bin/lib/Image/ExifTool/MXF.pm +3 -3
- package/bin/lib/Image/ExifTool/MacOS.pm +3 -2
- package/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
- package/bin/lib/Image/ExifTool/Matroska.pm +22 -6
- package/bin/lib/Image/ExifTool/Microsoft.pm +2 -2
- package/bin/lib/Image/ExifTool/Minolta.pm +1 -1
- package/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/Motorola.pm +1 -1
- package/bin/lib/Image/ExifTool/Nikon.pm +495 -39
- package/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
- package/bin/lib/Image/ExifTool/NikonCustom.pm +2 -2
- package/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
- package/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
- package/bin/lib/Image/ExifTool/OOXML.pm +8 -8
- package/bin/lib/Image/ExifTool/Ogg.pm +1 -1
- package/bin/lib/Image/ExifTool/Olympus.pm +1 -1
- package/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
- package/bin/lib/Image/ExifTool/Opus.pm +1 -1
- package/bin/lib/Image/ExifTool/Other.pm +1 -1
- package/bin/lib/Image/ExifTool/PCX.pm +1 -1
- package/bin/lib/Image/ExifTool/PDF.pm +49 -18
- package/bin/lib/Image/ExifTool/PGF.pm +1 -1
- package/bin/lib/Image/ExifTool/PICT.pm +1 -1
- package/bin/lib/Image/ExifTool/PLIST.pm +4 -4
- package/bin/lib/Image/ExifTool/PLUS.pm +1 -1
- package/bin/lib/Image/ExifTool/PNG.pm +20 -8
- package/bin/lib/Image/ExifTool/PPM.pm +12 -3
- package/bin/lib/Image/ExifTool/PSP.pm +1 -1
- package/bin/lib/Image/ExifTool/Palm.pm +1 -1
- package/bin/lib/Image/ExifTool/Panasonic.pm +27 -3
- package/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/Parrot.pm +1 -1
- package/bin/lib/Image/ExifTool/Pentax.pm +1 -1
- package/bin/lib/Image/ExifTool/PhaseOne.pm +4 -4
- package/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
- package/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
- package/bin/lib/Image/ExifTool/Photoshop.pm +65 -4
- package/bin/lib/Image/ExifTool/PostScript.pm +1 -1
- package/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
- package/bin/lib/Image/ExifTool/Protobuf.pm +270 -0
- package/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
- package/bin/lib/Image/ExifTool/QuickTime.pm +326 -88
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +199 -195
- package/bin/lib/Image/ExifTool/README +12 -2
- package/bin/lib/Image/ExifTool/RIFF.pm +21 -6
- package/bin/lib/Image/ExifTool/RSRC.pm +1 -1
- package/bin/lib/Image/ExifTool/RTF.pm +2 -2
- package/bin/lib/Image/ExifTool/Radiance.pm +1 -1
- package/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
- package/bin/lib/Image/ExifTool/Real.pm +1 -1
- package/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
- package/bin/lib/Image/ExifTool/Red.pm +1 -1
- package/bin/lib/Image/ExifTool/Ricoh.pm +4 -4
- package/bin/lib/Image/ExifTool/Samsung.pm +2 -2
- package/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
- package/bin/lib/Image/ExifTool/Scalado.pm +1 -1
- package/bin/lib/Image/ExifTool/Shift.pl +1 -1
- package/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
- package/bin/lib/Image/ExifTool/Sigma.pm +1 -1
- package/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/Sony.pm +5 -4
- package/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
- package/bin/lib/Image/ExifTool/Stim.pm +1 -1
- package/bin/lib/Image/ExifTool/TagInfoXML.pm +6 -5
- package/bin/lib/Image/ExifTool/TagLookup.pm +7023 -6968
- package/bin/lib/Image/ExifTool/TagNames.pod +445 -29
- package/bin/lib/Image/ExifTool/Text.pm +4 -3
- package/bin/lib/Image/ExifTool/Theora.pm +1 -1
- package/bin/lib/Image/ExifTool/Torrent.pm +3 -3
- package/bin/lib/Image/ExifTool/Unknown.pm +1 -1
- package/bin/lib/Image/ExifTool/VCard.pm +3 -3
- package/bin/lib/Image/ExifTool/Validate.pm +6 -6
- package/bin/lib/Image/ExifTool/Vivo.pm +124 -0
- package/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
- package/bin/lib/Image/ExifTool/WPG.pm +1 -1
- package/bin/lib/Image/ExifTool/WTV.pm +1 -1
- package/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- package/bin/lib/Image/ExifTool/WriteExif.pl +3 -3
- package/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- package/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
- package/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
- package/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
- package/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +166 -79
- package/bin/lib/Image/ExifTool/WriteRIFF.pl +17 -6
- package/bin/lib/Image/ExifTool/WriteXMP.pl +3 -3
- package/bin/lib/Image/ExifTool/Writer.pl +89 -96
- package/bin/lib/Image/ExifTool/XISF.pm +1 -1
- package/bin/lib/Image/ExifTool/XMP.pm +28 -13
- package/bin/lib/Image/ExifTool/XMP2.pl +103 -1
- package/bin/lib/Image/ExifTool/XMPStruct.pl +2 -3
- package/bin/lib/Image/ExifTool/ZIP.pm +2 -2
- package/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
- package/bin/lib/Image/ExifTool/iWork.pm +1 -1
- package/bin/lib/Image/ExifTool.pm +335 -163
- package/bin/lib/Image/ExifTool.pod +119 -73
- package/bin/perl-Image-ExifTool.spec +1 -1
- package/bin/windows_exiftool.txt +96 -51
- package/package.json +6 -6
|
@@ -918,7 +918,7 @@ the maker notes of NEF images.
|
|
|
918
918
|
|
|
919
919
|
=head1 AUTHOR
|
|
920
920
|
|
|
921
|
-
Copyright 2003-
|
|
921
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
922
922
|
|
|
923
923
|
This library is free software; you can redistribute it and/or modify it
|
|
924
924
|
under the same terms as Perl itself.
|
|
@@ -112,7 +112,7 @@ $VERSION = '1.26';
|
|
|
112
112
|
113 => 'Power Zoom +',
|
|
113
113
|
114 => 'Power Zoom -',
|
|
114
114
|
115 => 'Delete',
|
|
115
|
-
116 => 'Pixel Shift Shooting',
|
|
115
|
+
116 => 'Pixel Shift Shooting', #Z8 (Z9 fw 5.1 maps as 'Save and Load Power Zoom Position')
|
|
116
116
|
117 => 'Cycle AF-area Mode',
|
|
117
117
|
118 => 'Raw Processing (Current)', #118-131 are Playback Retouch options
|
|
118
118
|
119 => 'Raw Processing (Multiple)',
|
|
@@ -11362,7 +11362,7 @@ this information.
|
|
|
11362
11362
|
|
|
11363
11363
|
=head1 AUTHOR
|
|
11364
11364
|
|
|
11365
|
-
Copyright 2003-
|
|
11365
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
11366
11366
|
|
|
11367
11367
|
This library is free software; you can redistribute it and/or modify it
|
|
11368
11368
|
under the same terms as Perl itself.
|
|
@@ -2132,7 +2132,7 @@ Nikon cameras such as the D6 and Z7mk2.
|
|
|
2132
2132
|
|
|
2133
2133
|
=head1 AUTHOR
|
|
2134
2134
|
|
|
2135
|
-
Copyright 2003-
|
|
2135
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
2136
2136
|
|
|
2137
2137
|
This library is free software; you can redistribute it and/or modify it
|
|
2138
2138
|
under the same terms as Perl itself.
|
|
@@ -107,7 +107,7 @@ interpret Nintendo maker notes EXIF meta information.
|
|
|
107
107
|
|
|
108
108
|
=head1 AUTHOR
|
|
109
109
|
|
|
110
|
-
Copyright 2003-
|
|
110
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
111
111
|
|
|
112
112
|
This library is free software; you can redistribute it and/or modify it
|
|
113
113
|
under the same terms as Perl itself.
|
|
@@ -14,7 +14,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
14
14
|
use Image::ExifTool::XMP;
|
|
15
15
|
use Image::ExifTool::ZIP;
|
|
16
16
|
|
|
17
|
-
$VERSION = '1.
|
|
17
|
+
$VERSION = '1.09';
|
|
18
18
|
|
|
19
19
|
# test for recognized OOXML document extensions
|
|
20
20
|
my %isOOXML = (
|
|
@@ -360,12 +360,12 @@ sub ProcessDOCX($$)
|
|
|
360
360
|
}
|
|
361
361
|
# process XML files (docProps/app.xml, docProps/core.xml, docProps/custom.xml)
|
|
362
362
|
my %dirInfo = (
|
|
363
|
-
DataPt
|
|
364
|
-
DirLen
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
},
|
|
363
|
+
DataPt => \$buff,
|
|
364
|
+
DirLen => length $buff,
|
|
365
|
+
# (skip over XML header if it exists)
|
|
366
|
+
DirStart => ($buff =~ /<\?xml\s+.*?\?>/g ? pos($buff) : 0),
|
|
367
|
+
DataLen => length $buff,
|
|
368
|
+
XMPParseOpts => { FoundProc => \&FoundTag },
|
|
369
369
|
);
|
|
370
370
|
$et->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
|
371
371
|
undef $buff; # (free memory now)
|
|
@@ -395,7 +395,7 @@ archives of XML files.
|
|
|
395
395
|
|
|
396
396
|
=head1 AUTHOR
|
|
397
397
|
|
|
398
|
-
Copyright 2003-
|
|
398
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
399
399
|
|
|
400
400
|
This library is free software; you can redistribute it and/or modify it
|
|
401
401
|
under the same terms as Perl itself.
|
|
@@ -215,7 +215,7 @@ information from Ogg bitstream container files.
|
|
|
215
215
|
|
|
216
216
|
=head1 AUTHOR
|
|
217
217
|
|
|
218
|
-
Copyright 2003-
|
|
218
|
+
Copyright 2003-2025, 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.
|
|
@@ -4194,7 +4194,7 @@ Olympus or Epson maker notes in EXIF information.
|
|
|
4194
4194
|
|
|
4195
4195
|
=head1 AUTHOR
|
|
4196
4196
|
|
|
4197
|
-
Copyright 2003-
|
|
4197
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
4198
4198
|
|
|
4199
4199
|
This library is free software; you can redistribute it and/or modify it
|
|
4200
4200
|
under the same terms as Perl itself.
|
|
@@ -341,7 +341,7 @@ information from OpenEXR images.
|
|
|
341
341
|
|
|
342
342
|
=head1 AUTHOR
|
|
343
343
|
|
|
344
|
-
Copyright 2003-
|
|
344
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
345
345
|
|
|
346
346
|
This library is free software; you can redistribute it and/or modify it
|
|
347
347
|
under the same terms as Perl itself.
|
|
@@ -69,7 +69,7 @@ information from Ogg Opus audio files.
|
|
|
69
69
|
|
|
70
70
|
=head1 AUTHOR
|
|
71
71
|
|
|
72
|
-
Copyright 2003-
|
|
72
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
73
73
|
|
|
74
74
|
This library is free software; you can redistribute it and/or modify it
|
|
75
75
|
under the same terms as Perl itself.
|
|
@@ -71,7 +71,7 @@ information from Portable FloatMap (PFM) images.
|
|
|
71
71
|
|
|
72
72
|
=head1 AUTHOR
|
|
73
73
|
|
|
74
|
-
Copyright 2003-
|
|
74
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
75
75
|
|
|
76
76
|
This library is free software; you can redistribute it and/or modify it
|
|
77
77
|
under the same terms as Perl itself.
|
|
@@ -114,7 +114,7 @@ information from PC Paintbrush (PCX) files.
|
|
|
114
114
|
|
|
115
115
|
=head1 AUTHOR
|
|
116
116
|
|
|
117
|
-
Copyright 2003-
|
|
117
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
118
118
|
|
|
119
119
|
This library is free software; you can redistribute it and/or modify it
|
|
120
120
|
under the same terms as Perl itself.
|
|
@@ -21,7 +21,7 @@ use vars qw($VERSION $AUTOLOAD $lastFetched);
|
|
|
21
21
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
22
22
|
require Exporter;
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.60';
|
|
25
25
|
|
|
26
26
|
sub FetchObject($$$$);
|
|
27
27
|
sub ExtractObject($$;$$);
|
|
@@ -349,6 +349,7 @@ my %supportedFilter = (
|
|
|
349
349
|
# tags in PDF ICCBased, Cs1 and CS0 dictionaries
|
|
350
350
|
%Image::ExifTool::PDF::ICCBased = (
|
|
351
351
|
_stream => {
|
|
352
|
+
Name => 'ICC_Profile',
|
|
352
353
|
SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' },
|
|
353
354
|
},
|
|
354
355
|
);
|
|
@@ -470,6 +471,7 @@ my %supportedFilter = (
|
|
|
470
471
|
# tags in PDF AIMetaData dictionary
|
|
471
472
|
%Image::ExifTool::PDF::AIMetaData = (
|
|
472
473
|
_stream => {
|
|
474
|
+
Name => 'AIStream',
|
|
473
475
|
SubDirectory => { TagTable => 'Image::ExifTool::PostScript::Main' },
|
|
474
476
|
},
|
|
475
477
|
);
|
|
@@ -477,6 +479,7 @@ my %supportedFilter = (
|
|
|
477
479
|
# tags in PDF ImageResources dictionary
|
|
478
480
|
%Image::ExifTool::PDF::ImageResources = (
|
|
479
481
|
_stream => {
|
|
482
|
+
Name => 'PhotoshopStream',
|
|
480
483
|
SubDirectory => { TagTable => 'Image::ExifTool::Photoshop::Main' },
|
|
481
484
|
},
|
|
482
485
|
);
|
|
@@ -1212,7 +1215,7 @@ sub DecodeStream($$)
|
|
|
1212
1215
|
# be sure we can process all the filters before we take the time to do the decryption
|
|
1213
1216
|
foreach $filter (@filters) {
|
|
1214
1217
|
next if $supportedFilter{$filter};
|
|
1215
|
-
$et->
|
|
1218
|
+
$et->Warn("Unsupported Filter $filter");
|
|
1216
1219
|
return 0;
|
|
1217
1220
|
}
|
|
1218
1221
|
# apply decryption first if required (and if the default encryption
|
|
@@ -1241,7 +1244,7 @@ sub DecodeStream($$)
|
|
|
1241
1244
|
if (ref $decodeParms eq 'HASH') {
|
|
1242
1245
|
$pre = $$decodeParms{Predictor};
|
|
1243
1246
|
if ($pre and $pre ne '1' and $pre ne '12') {
|
|
1244
|
-
$et->
|
|
1247
|
+
$et->Warn("FlateDecode Predictor $pre currently not supported");
|
|
1245
1248
|
return 0;
|
|
1246
1249
|
}
|
|
1247
1250
|
}
|
|
@@ -1256,7 +1259,7 @@ sub DecodeStream($$)
|
|
|
1256
1259
|
return 0;
|
|
1257
1260
|
}
|
|
1258
1261
|
} else {
|
|
1259
|
-
$et->
|
|
1262
|
+
$et->Warn('Install Compress::Zlib to process filtered streams');
|
|
1260
1263
|
return 0;
|
|
1261
1264
|
}
|
|
1262
1265
|
next unless $pre and $pre eq '12'; # 12 = 'up' prediction
|
|
@@ -1265,7 +1268,7 @@ sub DecodeStream($$)
|
|
|
1265
1268
|
my $cols = $$decodeParms{Columns};
|
|
1266
1269
|
unless ($cols) {
|
|
1267
1270
|
# currently only support 'up' prediction
|
|
1268
|
-
$et->
|
|
1271
|
+
$et->Warn('No Columns for decoding stream');
|
|
1269
1272
|
return 0;
|
|
1270
1273
|
}
|
|
1271
1274
|
my @bytes = unpack('C*', $$dict{_stream});
|
|
@@ -1273,7 +1276,7 @@ sub DecodeStream($$)
|
|
|
1273
1276
|
my $buff = '';
|
|
1274
1277
|
while (@bytes > $cols) {
|
|
1275
1278
|
unless (($_ = shift @bytes) == 2) {
|
|
1276
|
-
$et->
|
|
1279
|
+
$et->Warn("Unsupported PNG filter $_"); # (yes, PNG)
|
|
1277
1280
|
return 0;
|
|
1278
1281
|
}
|
|
1279
1282
|
foreach (@pre) {
|
|
@@ -1293,11 +1296,11 @@ sub DecodeStream($$)
|
|
|
1293
1296
|
my $name = $$decodeParms{Name};
|
|
1294
1297
|
next unless defined $name or $name eq 'Identity';
|
|
1295
1298
|
if ($name ne 'StdCF') {
|
|
1296
|
-
$et->
|
|
1299
|
+
$et->Warn("Unsupported Crypt Filter $name");
|
|
1297
1300
|
return 0;
|
|
1298
1301
|
}
|
|
1299
1302
|
unless ($cryptInfo) {
|
|
1300
|
-
$et->
|
|
1303
|
+
$et->Warn('Missing Encrypt StdCF entry');
|
|
1301
1304
|
return 0;
|
|
1302
1305
|
}
|
|
1303
1306
|
# decrypt the stream manually because we want to:
|
|
@@ -1315,15 +1318,15 @@ sub DecodeStream($$)
|
|
|
1315
1318
|
# make sure we don't have any unsupported decoding parameters
|
|
1316
1319
|
if (ref $decodeParms eq 'HASH') {
|
|
1317
1320
|
if ($$decodeParms{Predictor}) {
|
|
1318
|
-
$et->
|
|
1321
|
+
$et->Warn("LZWDecode Predictor $$decodeParms{Predictor} currently not supported");
|
|
1319
1322
|
return 0;
|
|
1320
1323
|
} elsif ($$decodeParms{EarlyChange}) {
|
|
1321
|
-
$et->
|
|
1324
|
+
$et->Warn("LZWDecode EarlyChange currently not supported");
|
|
1322
1325
|
return 0;
|
|
1323
1326
|
}
|
|
1324
1327
|
}
|
|
1325
1328
|
unless (DecodeLZW(\$$dict{_stream})) {
|
|
1326
|
-
$et->
|
|
1329
|
+
$et->Warn('LZW decompress error');
|
|
1327
1330
|
return 0;
|
|
1328
1331
|
}
|
|
1329
1332
|
|
|
@@ -1359,7 +1362,7 @@ sub DecodeStream($$)
|
|
|
1359
1362
|
last if $_ eq '~';
|
|
1360
1363
|
# (both $n and $val are zero again now)
|
|
1361
1364
|
}
|
|
1362
|
-
$err and $et->
|
|
1365
|
+
$err and $et->Warn("ASCII85Decode error $err");
|
|
1363
1366
|
$$dict{_stream} = pack('C*', @out);
|
|
1364
1367
|
}
|
|
1365
1368
|
}
|
|
@@ -1595,9 +1598,13 @@ sub DecryptInit($$$)
|
|
|
1595
1598
|
$password = $et->Options('Password');
|
|
1596
1599
|
return 'Document is password protected (use Password option)' unless defined $password;
|
|
1597
1600
|
# make sure there is no UTF-8 flag on the password
|
|
1598
|
-
if ($] >= 5.006 and (
|
|
1601
|
+
if ($] >= 5.006 and ($$et{OPTIONS}{EncodeHangs} or
|
|
1602
|
+
eval { require Encode; Encode::is_utf8($password) } or $@))
|
|
1603
|
+
{
|
|
1604
|
+
local $SIG{'__WARN__'} = sub { };
|
|
1599
1605
|
# repack by hand if Encode isn't available
|
|
1600
|
-
$password = $@ ? pack('C*',unpack($] < 5.010000 ?
|
|
1606
|
+
$password = ($$et{OPTIONS}{EncodeHangs} or $@) ? pack('C*', unpack($] < 5.010000 ?
|
|
1607
|
+
'U0C*' : 'C0C*', $password)) : Encode::encode('utf8', $password);
|
|
1601
1608
|
}
|
|
1602
1609
|
} else {
|
|
1603
1610
|
return 'Incorrect password';
|
|
@@ -1823,7 +1830,7 @@ sub ProcessDict($$$$;$$)
|
|
|
1823
1830
|
|
|
1824
1831
|
$nesting = ($nesting || 0) + 1;
|
|
1825
1832
|
if ($nesting > 50) {
|
|
1826
|
-
$et->
|
|
1833
|
+
$et->Warn('Nesting too deep (directory ignored)');
|
|
1827
1834
|
return;
|
|
1828
1835
|
}
|
|
1829
1836
|
# save entire dictionary for rewriting if specified
|
|
@@ -1983,7 +1990,7 @@ sub ProcessDict($$$$;$$)
|
|
|
1983
1990
|
if ($$tagInfo{IgnoreDuplicates}) {
|
|
1984
1991
|
my $flag = "ProcessedPDF_$tag";
|
|
1985
1992
|
if ($$et{$flag}) {
|
|
1986
|
-
next if $et->
|
|
1993
|
+
next if $et->Warn("Ignored duplicate $tag dictionary", 2);
|
|
1987
1994
|
} else {
|
|
1988
1995
|
$$et{$flag} = 1;
|
|
1989
1996
|
}
|
|
@@ -2157,6 +2164,20 @@ sub ProcessDict($$$$;$$)
|
|
|
2157
2164
|
last;
|
|
2158
2165
|
}
|
|
2159
2166
|
# decode stream if necessary
|
|
2167
|
+
if ($cryptInfo and ($$cryptInfo{_aesv2} or $$cryptInfo{_aesv3} and
|
|
2168
|
+
$$dict{Length} and $$dict{Length} > 10000) and not $$dict{_decrypted} and
|
|
2169
|
+
not $$et{PDF_CAPTURE}) # (capturing PDF for writing?)
|
|
2170
|
+
{
|
|
2171
|
+
my $type = $$dict{Type} || '';
|
|
2172
|
+
if ($type ne '/Metadata' or $$dict{Length} > 100000) {
|
|
2173
|
+
if ($$et{OPTIONS}{IgnoreMinorErrors}) {
|
|
2174
|
+
$et->Warn("Decrypting large $$tagInfo{Name} (will be slow)");
|
|
2175
|
+
} else {
|
|
2176
|
+
$et->Warn("Skipping large AES-encrypted $$tagInfo{Name}", 2);
|
|
2177
|
+
last;
|
|
2178
|
+
}
|
|
2179
|
+
}
|
|
2180
|
+
}
|
|
2160
2181
|
DecodeStream($et, $dict) or last;
|
|
2161
2182
|
if ($verbose > 2) {
|
|
2162
2183
|
$et->VPrint(2,"$$et{INDENT}$$et{DIR_NAME} stream data\n");
|
|
@@ -2233,7 +2254,17 @@ sub ReadPDF($$)
|
|
|
2233
2254
|
$raf->Read($buff, $len) == $len or return -3;
|
|
2234
2255
|
# find the LAST xref table in the file (may be multiple %%EOF marks,
|
|
2235
2256
|
# and comments between "startxref" and "%%EOF")
|
|
2236
|
-
$buff =~ /^.*startxref(\s+)(\d+)(\s+)(%[^\x0d\x0a]*\s+)
|
|
2257
|
+
$buff =~ /^.*startxref(\s+)(\d+)(\s+)((%[^\x0d\x0a]*\s+)*)%%EOF/s or return -4;
|
|
2258
|
+
# parse comments to read SEAL information
|
|
2259
|
+
if ($4) {
|
|
2260
|
+
my @com = split /[\x0d\x0d]+/, $4;
|
|
2261
|
+
foreach (@com) {
|
|
2262
|
+
/^(%+\s*)<seal seal=/ or next;
|
|
2263
|
+
my $dat = substr $_, length($1);
|
|
2264
|
+
my $tbl = GetTagTable('Image::ExifTool::XMP::SEAL');
|
|
2265
|
+
$et->ProcessDirectory({ DataPt => \$dat }, $tbl);
|
|
2266
|
+
}
|
|
2267
|
+
}
|
|
2237
2268
|
my $ws = $1 . $3;
|
|
2238
2269
|
my $xr = $2;
|
|
2239
2270
|
push @xrefOffsets, $xr, 'Main';
|
|
@@ -2466,7 +2497,7 @@ and AESV3 (AES-256).
|
|
|
2466
2497
|
|
|
2467
2498
|
=head1 AUTHOR
|
|
2468
2499
|
|
|
2469
|
-
Copyright 2003-
|
|
2500
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
2470
2501
|
|
|
2471
2502
|
This library is free software; you can redistribute it and/or modify it
|
|
2472
2503
|
under the same terms as Perl itself.
|
|
@@ -119,7 +119,7 @@ information from Progressive Graphics File (PGF) images.
|
|
|
119
119
|
|
|
120
120
|
=head1 AUTHOR
|
|
121
121
|
|
|
122
|
-
Copyright 2003-
|
|
122
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
123
123
|
|
|
124
124
|
This library is free software; you can redistribute it and/or modify it
|
|
125
125
|
under the same terms as Perl itself.
|
|
@@ -1236,7 +1236,7 @@ Verbose or the Unknown option.
|
|
|
1236
1236
|
|
|
1237
1237
|
=head1 AUTHOR
|
|
1238
1238
|
|
|
1239
|
-
Copyright 2003-
|
|
1239
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
1240
1240
|
|
|
1241
1241
|
This library is free software; you can redistribute it and/or modify it
|
|
1242
1242
|
under the same terms as Perl itself.
|
|
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
21
21
|
use Image::ExifTool::XMP;
|
|
22
22
|
use Image::ExifTool::GPS;
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.13';
|
|
25
25
|
|
|
26
26
|
sub ExtractObject($$;$);
|
|
27
27
|
sub Get24u($$);
|
|
@@ -269,7 +269,7 @@ sub ExtractObject($$;$)
|
|
|
269
269
|
if ($type == 13) { # dict
|
|
270
270
|
# prevent infinite recursion
|
|
271
271
|
if (defined $parent and length $parent > 1000) {
|
|
272
|
-
$et->
|
|
272
|
+
$et->Warn('Possible deep recursion while parsing PLIST');
|
|
273
273
|
return undef;
|
|
274
274
|
}
|
|
275
275
|
my $tagTablePtr = $$plistInfo{TagTablePtr};
|
|
@@ -344,7 +344,7 @@ sub ProcessBinaryPLIST($$;$)
|
|
|
344
344
|
my ($i, $buff, @table);
|
|
345
345
|
my $dataPt = $$dirInfo{DataPt};
|
|
346
346
|
|
|
347
|
-
$et->VerboseDir('Binary PLIST');
|
|
347
|
+
$et->VerboseDir('Binary PLIST') unless $$dirInfo{NoVerboseDir};
|
|
348
348
|
SetByteOrder('MM');
|
|
349
349
|
|
|
350
350
|
if ($dataPt) {
|
|
@@ -450,7 +450,7 @@ This module decodes both the binary and XML-based PLIST format.
|
|
|
450
450
|
|
|
451
451
|
=head1 AUTHOR
|
|
452
452
|
|
|
453
|
-
Copyright 2003-
|
|
453
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
454
454
|
|
|
455
455
|
This library is free software; you can redistribute it and/or modify it
|
|
456
456
|
under the same terms as Perl itself.
|
|
@@ -2601,7 +2601,7 @@ Definitions for PLUS (Picture Licensing Universal System) tags.
|
|
|
2601
2601
|
|
|
2602
2602
|
=head1 AUTHOR
|
|
2603
2603
|
|
|
2604
|
-
Copyright 2003-
|
|
2604
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
2605
2605
|
|
|
2606
2606
|
This library is free software; you can redistribute it and/or modify it
|
|
2607
2607
|
under the same terms as Perl itself.
|
|
@@ -36,7 +36,7 @@ use strict;
|
|
|
36
36
|
use vars qw($VERSION $AUTOLOAD %stdCase);
|
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
38
38
|
|
|
39
|
-
$VERSION = '1.
|
|
39
|
+
$VERSION = '1.70';
|
|
40
40
|
|
|
41
41
|
sub ProcessPNG_tEXt($$$);
|
|
42
42
|
sub ProcessPNG_iTXt($$$);
|
|
@@ -371,6 +371,10 @@ my %noLeapFrog = ( SAVE => 1, SEEK => 1, IHDR => 1, JHDR => 1, IEND => 1, MEND =
|
|
|
371
371
|
IgnoreProp => { meta => 1 }, # ignore 'meta' container
|
|
372
372
|
},
|
|
373
373
|
},
|
|
374
|
+
seAl => {
|
|
375
|
+
Name => 'SEAL',
|
|
376
|
+
SubDirectory => { TagTable => 'Image::ExifTool::XMP::SEAL' },
|
|
377
|
+
},
|
|
374
378
|
# mkBF,mkTS,mkBS,mkBT ? - written by Adobe FireWorks
|
|
375
379
|
);
|
|
376
380
|
|
|
@@ -431,6 +435,7 @@ my %noLeapFrog = ( SAVE => 1, SEEK => 1, IHDR => 1, JHDR => 1, IEND => 1, MEND =
|
|
|
431
435
|
%Image::ExifTool::PNG::PhysicalPixel = (
|
|
432
436
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
433
437
|
WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
|
|
438
|
+
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
434
439
|
WRITABLE => 1,
|
|
435
440
|
GROUPS => { 1 => 'PNG-pHYs', 2 => 'Image' },
|
|
436
441
|
WRITE_GROUP => 'PNG-pHYs',
|
|
@@ -961,7 +966,7 @@ sub FoundPNG($$$$;$$$$)
|
|
|
961
966
|
my $processed;
|
|
962
967
|
if ($$tagInfo{SubDirectory}) {
|
|
963
968
|
if ($$et{OPTIONS}{Validate} and $$tagInfo{NonStandard}) {
|
|
964
|
-
$et->
|
|
969
|
+
$et->Warn("Non-standard $$tagInfo{NonStandard} in PNG $tag chunk", 1);
|
|
965
970
|
}
|
|
966
971
|
my $subdir = $$tagInfo{SubDirectory};
|
|
967
972
|
my $dirName = $$subdir{DirName} || $tagName;
|
|
@@ -980,8 +985,15 @@ sub FoundPNG($$$$;$$$$)
|
|
|
980
985
|
my $processProc = $$subdir{ProcessProc};
|
|
981
986
|
# nothing more to do if writing and subdirectory is not writable
|
|
982
987
|
my $subTable = GetTagTable($$subdir{TagTable});
|
|
983
|
-
|
|
984
|
-
|
|
988
|
+
if ($outBuff and not $$subTable{WRITE_PROC}) {
|
|
989
|
+
if ($$et{DEL_GROUP}{$dirName}) {
|
|
990
|
+
# non-writable directories may be deleted as a group (eg. SEAL)
|
|
991
|
+
$et->VPrint(0, " Deleting $dirName\n");
|
|
992
|
+
$$outBuff = '';
|
|
993
|
+
++$$et{CHANGED};
|
|
994
|
+
}
|
|
995
|
+
return 1;
|
|
996
|
+
}
|
|
985
997
|
my %subdirInfo = (
|
|
986
998
|
DataPt => \$val,
|
|
987
999
|
DirStart => 0,
|
|
@@ -1460,7 +1472,7 @@ sub ProcessPNG($$)
|
|
|
1460
1472
|
|
|
1461
1473
|
if ($wasEnd) {
|
|
1462
1474
|
last unless $n; # stop now if normal end of PNG
|
|
1463
|
-
$et->
|
|
1475
|
+
$et->Warn("Trailer data after $fileType $endChunk chunk", 1);
|
|
1464
1476
|
$wasTrailer = 1;
|
|
1465
1477
|
last if $n < 8;
|
|
1466
1478
|
$$et{SET_GROUP1} = 'Trailer';
|
|
@@ -1489,7 +1501,7 @@ sub ProcessPNG($$)
|
|
|
1489
1501
|
} elsif ($hdrChunk eq 'IHDR' and $chunk eq 'CgBI') {
|
|
1490
1502
|
$et->Warn('Non-standard PNG image (Apple iPhone format)');
|
|
1491
1503
|
} else {
|
|
1492
|
-
$et->
|
|
1504
|
+
$et->Warn("$fileType image did not start with $hdrChunk");
|
|
1493
1505
|
}
|
|
1494
1506
|
}
|
|
1495
1507
|
if ($outfile and ($isDatChunk{$chunk} or $chunk eq $endChunk) and @txtOffset) {
|
|
@@ -1583,7 +1595,7 @@ sub ProcessPNG($$)
|
|
|
1583
1595
|
} else {
|
|
1584
1596
|
$msg = 'fixed';
|
|
1585
1597
|
}
|
|
1586
|
-
$et->
|
|
1598
|
+
$et->Warn("Text/EXIF chunk(s) found after $$et{FileType} $wasDat ($msg)", 1);
|
|
1587
1599
|
}
|
|
1588
1600
|
# read chunk data and CRC
|
|
1589
1601
|
unless ($raf->Read($dbuf,$len)==$len and $raf->Read($cbuf, 4)==4) {
|
|
@@ -1686,7 +1698,7 @@ and JNG (JPEG Network Graphics) images.
|
|
|
1686
1698
|
|
|
1687
1699
|
=head1 AUTHOR
|
|
1688
1700
|
|
|
1689
|
-
Copyright 2003-
|
|
1701
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
1690
1702
|
|
|
1691
1703
|
This library is free software; you can redistribute it and/or modify it
|
|
1692
1704
|
under the same terms as Perl itself.
|
|
@@ -16,7 +16,7 @@ use strict;
|
|
|
16
16
|
use vars qw($VERSION);
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.11';
|
|
20
20
|
|
|
21
21
|
#------------------------------------------------------------------------------
|
|
22
22
|
# Read or write information in a PPM/PGM/PBM image
|
|
@@ -29,7 +29,7 @@ sub ProcessPPM($$)
|
|
|
29
29
|
my $outfile = $$dirInfo{OutFile};
|
|
30
30
|
my $verbose = $et->Options('Verbose');
|
|
31
31
|
my $out = $et->Options('TextOut');
|
|
32
|
-
my ($buff, $num, $type, %info);
|
|
32
|
+
my ($buff, $num, $type, %info, $seal);
|
|
33
33
|
#
|
|
34
34
|
# read as much of the image as necessary to extract the header and comments
|
|
35
35
|
#
|
|
@@ -77,6 +77,7 @@ sub ProcessPPM($$)
|
|
|
77
77
|
if (defined $info{Comment}) {
|
|
78
78
|
$info{Comment} =~ s/^# ?//mg; # remove "# " at the start of each line
|
|
79
79
|
$info{Comment} =~ s/[\n\r]+$//; # remove trailing newline
|
|
80
|
+
$seal = 1 if $info{Comment} =~ /^<seal seal=/;
|
|
80
81
|
}
|
|
81
82
|
$et->SetFileType($type);
|
|
82
83
|
my $len = pos($buff);
|
|
@@ -91,6 +92,10 @@ sub ProcessPPM($$)
|
|
|
91
92
|
++$$et{CHANGED};
|
|
92
93
|
$et->VerboseValue('- Comment', $oldComment) if defined $oldComment;
|
|
93
94
|
$et->VerboseValue('+ Comment', $newComment) if defined $newComment;
|
|
95
|
+
} elsif ($seal and $$et{DEL_GROUP}{SEAL}) {
|
|
96
|
+
# delete SEAL comment
|
|
97
|
+
$et->VerboseValue('- Comment', $oldComment);
|
|
98
|
+
++$$et{CHANGED};
|
|
94
99
|
} else {
|
|
95
100
|
$newComment = $oldComment; # use existing comment
|
|
96
101
|
}
|
|
@@ -116,6 +121,10 @@ sub ProcessPPM($$)
|
|
|
116
121
|
print $out "$type header ($len bytes):\n";
|
|
117
122
|
$et->VerboseDump(\$buff, Len => $len);
|
|
118
123
|
}
|
|
124
|
+
if ($seal) {
|
|
125
|
+
$et->ProcessDirectory({ DataPt => \$info{Comment} }, GetTagTable('Image::ExifTool::XMP::SEAL'));
|
|
126
|
+
delete $info{Comment};
|
|
127
|
+
}
|
|
119
128
|
my $tag;
|
|
120
129
|
foreach $tag (qw{Comment ImageWidth ImageHeight MaxVal}) {
|
|
121
130
|
$et->FoundTag($tag, $info{$tag}) if defined $info{$tag};
|
|
@@ -143,7 +152,7 @@ BitMap) images.
|
|
|
143
152
|
|
|
144
153
|
=head1 AUTHOR
|
|
145
154
|
|
|
146
|
-
Copyright 2003-
|
|
155
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
147
156
|
|
|
148
157
|
This library is free software; you can redistribute it and/or modify it
|
|
149
158
|
under the same terms as Perl itself.
|
|
@@ -284,7 +284,7 @@ information from Paint Shop Pro images.
|
|
|
284
284
|
|
|
285
285
|
=head1 AUTHOR
|
|
286
286
|
|
|
287
|
-
Copyright 2003-
|
|
287
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
288
288
|
|
|
289
289
|
This library is free software; you can redistribute it and/or modify it
|
|
290
290
|
under the same terms as Perl itself.
|
|
@@ -379,7 +379,7 @@ KF7 and KF8 books (AZW and AZW3).
|
|
|
379
379
|
|
|
380
380
|
=head1 AUTHOR
|
|
381
381
|
|
|
382
|
-
Copyright 2003-
|
|
382
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
383
383
|
|
|
384
384
|
This library is free software; you can redistribute it and/or modify it
|
|
385
385
|
under the same terms as Perl itself.
|
|
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
|
|
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
38
38
|
use Image::ExifTool::Exif;
|
|
39
39
|
|
|
40
|
-
$VERSION = '2.
|
|
40
|
+
$VERSION = '2.24';
|
|
41
41
|
|
|
42
42
|
sub ProcessLeicaLEIC($$$);
|
|
43
43
|
sub WhiteBalanceConv($;$$);
|
|
@@ -360,12 +360,16 @@ my %shootingMode = (
|
|
|
360
360
|
'16' => 'Normal?', # (only mode for DMC-LC20)
|
|
361
361
|
'16 0' => '1-area', # (FZ8)
|
|
362
362
|
'16 16' => '1-area (high speed)', # (FZ8)
|
|
363
|
+
'16 32' => '1-area +', #forum16903 (G9M2)
|
|
364
|
+
'17 0' => 'Full Area', #forum16903 (G9M2)
|
|
363
365
|
# '32 0' is Face Detect for FS7, and Face Detect or Focus Tracking
|
|
364
366
|
# for the DMC-FZ200 (ref 17), and Auto is DMC-L1 guess,
|
|
365
367
|
'32 0' => 'Tracking',
|
|
366
368
|
'32 1' => '3-area (left)?', # (DMC-L1 guess)
|
|
367
369
|
'32 2' => '3-area (center)?', # (DMC-L1 guess)
|
|
368
370
|
'32 3' => '3-area (right)?', # (DMC-L1 guess)
|
|
371
|
+
'32 16' => 'Zone', #forum16903 (G9M2)
|
|
372
|
+
'32 18' => 'Zone (horizontal/vertical)', #forum16903 (G9M2)
|
|
369
373
|
# '32 16' ? (DC-GH6)
|
|
370
374
|
'64 0' => 'Face Detect',
|
|
371
375
|
'64 1' => 'Face Detect (animal detect on)', #forum11194
|
|
@@ -1448,6 +1452,26 @@ my %shootingMode = (
|
|
|
1448
1452
|
Name => 'MinimumISO',
|
|
1449
1453
|
Writable => 'int32u',
|
|
1450
1454
|
},
|
|
1455
|
+
0xe9 => { #forum16903 (DC-G9M2)
|
|
1456
|
+
Name => 'AFSubjectDetection',
|
|
1457
|
+
Writable => 'int16u',
|
|
1458
|
+
PrintConv => {
|
|
1459
|
+
0 => 'n/a',
|
|
1460
|
+
1 => 'Human Eye/Face/Body',
|
|
1461
|
+
2 => 'Animal', #PH (NC) (DC-S5 and DC-S5M2)
|
|
1462
|
+
3 => 'Human Eye/Face',
|
|
1463
|
+
4 => 'Animal Body',
|
|
1464
|
+
5 => 'Animal Eye/Body',
|
|
1465
|
+
6 => 'Car',
|
|
1466
|
+
7 => 'Motorcycle',
|
|
1467
|
+
8 => 'Car (main part priority)',
|
|
1468
|
+
9 => 'Motorcycle (helmet priority)',
|
|
1469
|
+
10 => 'Train',
|
|
1470
|
+
11 => 'Train (main part priority)',
|
|
1471
|
+
12 => 'Airplane',
|
|
1472
|
+
13 => 'Airplane (nose priority)',
|
|
1473
|
+
}
|
|
1474
|
+
},
|
|
1451
1475
|
0xee => { #PH (DC-GH6)
|
|
1452
1476
|
Name => 'DynamicRangeBoost',
|
|
1453
1477
|
Writable => 'int16u',
|
|
@@ -2802,7 +2826,7 @@ sub ProcessLeicaTrailer($;$)
|
|
|
2802
2826
|
}
|
|
2803
2827
|
} else { # M (Type 240)
|
|
2804
2828
|
# scan for the lens type (M writes 114 bytes of garbage first)
|
|
2805
|
-
if ($buff =~ /\G.{114}([\x20-\
|
|
2829
|
+
if ($buff =~ /\G.{114}([\x20-\x7e]*\0*)/sg and length($1) >= 50) {
|
|
2806
2830
|
$expect = 114;
|
|
2807
2831
|
}
|
|
2808
2832
|
}
|
|
@@ -2902,7 +2926,7 @@ Panasonic and Leica maker notes in EXIF information.
|
|
|
2902
2926
|
|
|
2903
2927
|
=head1 AUTHOR
|
|
2904
2928
|
|
|
2905
|
-
Copyright 2003-
|
|
2929
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
2906
2930
|
|
|
2907
2931
|
This library is free software; you can redistribute it and/or modify it
|
|
2908
2932
|
under the same terms as Perl itself.
|
|
@@ -935,7 +935,7 @@ write meta information in Panasonic/Leica RAW, RW2 and RWL images.
|
|
|
935
935
|
|
|
936
936
|
=head1 AUTHOR
|
|
937
937
|
|
|
938
|
-
Copyright 2003-
|
|
938
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
939
939
|
|
|
940
940
|
This library is free software; you can redistribute it and/or modify it
|
|
941
941
|
under the same terms as Perl itself.
|