exiftool-vendored.pl 12.67.0 → 12.70.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 +79 -10
- package/bin/MANIFEST +5 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +7 -7
- package/bin/exiftool +32 -27
- package/bin/lib/Image/ExifTool/CBOR.pm +18 -2
- package/bin/lib/Image/ExifTool/Canon.pm +87 -16
- package/bin/lib/Image/ExifTool/DJI.pm +3 -2
- package/bin/lib/Image/ExifTool/DNG.pm +25 -2
- package/bin/lib/Image/ExifTool/EXE.pm +54 -6
- package/bin/lib/Image/ExifTool/Exif.pm +175 -14
- package/bin/lib/Image/ExifTool/FujiFilm.pm +158 -20
- package/bin/lib/Image/ExifTool/GIF.pm +5 -1
- package/bin/lib/Image/ExifTool/Geotag.pm +16 -11
- package/bin/lib/Image/ExifTool/ID3.pm +70 -7
- package/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- package/bin/lib/Image/ExifTool/JPEG.pm +1 -1
- package/bin/lib/Image/ExifTool/Jpeg2000.pm +30 -15
- package/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
- package/bin/lib/Image/ExifTool/Nikon.pm +82 -22
- package/bin/lib/Image/ExifTool/Olympus.pm +7 -1
- package/bin/lib/Image/ExifTool/PNG.pm +3 -1
- package/bin/lib/Image/ExifTool/Panasonic.pm +22 -9
- package/bin/lib/Image/ExifTool/Pentax.pm +6 -1
- package/bin/lib/Image/ExifTool/PhotoMechanic.pm +2 -1
- package/bin/lib/Image/ExifTool/QuickTime.pm +92 -55
- package/bin/lib/Image/ExifTool/README +14 -5
- package/bin/lib/Image/ExifTool/RIFF.pm +60 -10
- package/bin/lib/Image/ExifTool/Sony.pm +152 -46
- package/bin/lib/Image/ExifTool/TagLookup.pm +6955 -6713
- package/bin/lib/Image/ExifTool/TagNames.pod +878 -334
- package/bin/lib/Image/ExifTool/Text.pm +4 -5
- package/bin/lib/Image/ExifTool/Validate.pm +23 -20
- package/bin/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
- package/bin/lib/Image/ExifTool/WriteExif.pl +14 -4
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +3 -0
- package/bin/lib/Image/ExifTool/WriteRIFF.pl +31 -6
- package/bin/lib/Image/ExifTool/Writer.pl +40 -14
- package/bin/lib/Image/ExifTool/XISF.pm +185 -0
- package/bin/lib/Image/ExifTool/XMP.pm +67 -2
- package/bin/lib/Image/ExifTool/XMP2.pl +35 -0
- package/bin/lib/Image/ExifTool.pm +92 -45
- package/bin/lib/Image/ExifTool.pod +14 -8
- package/bin/perl-Image-ExifTool.spec +6 -6
- package/bin/pp_build_exe.args +5 -4
- package/package.json +2 -2
package/bin/Changes
CHANGED
|
@@ -4,9 +4,80 @@ ExifTool Version History
|
|
|
4
4
|
|
|
5
5
|
RSS feed: https://exiftool.org/rss.xml
|
|
6
6
|
|
|
7
|
-
Note: The most recent production release is Version 12.
|
|
7
|
+
Note: The most recent production release is Version 12.70. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
Nov. 19, 2023 - Version 12.70 (production release)
|
|
11
|
+
|
|
12
|
+
- This marks the 20th anniversary of the initial ExifTool release!
|
|
13
|
+
- Added ability to read/delete C2PA CAI JUMBF metadata from TIFF-based images
|
|
14
|
+
(eg. DNG), QuickTime-based files (eg. MP4) and WebP images, and read JUMBF
|
|
15
|
+
from other RIFF-based files (eg. WAV, AVI), GIF images and ID3v2 metadata
|
|
16
|
+
- Added read/write support for JPH images
|
|
17
|
+
- Added ability to read Leica Q3 maker notes
|
|
18
|
+
- Added ability to recognize and write FujiFilm M-RAW RAF images (multiple raw
|
|
19
|
+
images in a single file) and the ability to read preview-less RAF images
|
|
20
|
+
- Added support for reading a number of obscure Microsoft EXIF tags
|
|
21
|
+
- Added a few new Sony lenses and support for the ILCE-9M3 (thanks Jos Roost)
|
|
22
|
+
- Added a couple of new Panasonic Leica lenses
|
|
23
|
+
- Added a couple of new Canon RF lenses (thanks Norbert Wasser)
|
|
24
|
+
- Added a number of new CPUType values for ELF executables
|
|
25
|
+
- Added some new Olympus CameraType values
|
|
26
|
+
- Decode a few more ID3v2.2 tags (github #142)
|
|
27
|
+
- Decode a few new Canon G5X Mark II tags (thanks Martin B.)
|
|
28
|
+
- Decode WB_RGGBLevels for a few more Nikon cameras
|
|
29
|
+
- Extract information from FujiFilm M-RAW header
|
|
30
|
+
- Improved decoding of a few Nikon Z tags (thanks Warren Hatch)
|
|
31
|
+
- Marked misspelt XMP-drone-dji:GPSLongtitude tag to Avoid when writing
|
|
32
|
+
- Changed RIFF MaxDataRate conversion to use SI prefixes by default
|
|
33
|
+
- Fixed decoding of unknown ColorBalance information for some Nikon models
|
|
34
|
+
- Fixed an incorrect Nikon Z LensID
|
|
35
|
+
- API Changes:
|
|
36
|
+
- Added ByteUnit option
|
|
37
|
+
|
|
38
|
+
Oct. 26, 2023 - Version 12.69
|
|
39
|
+
|
|
40
|
+
- Added support for DNG version 1.7.0.0
|
|
41
|
+
- Added a new XMP-GCamera tag
|
|
42
|
+
- Added a number of new Nikon Z lenses (thanks Warren Hatch and Stefan)
|
|
43
|
+
- Added a number of new XMP-crs tags
|
|
44
|
+
- Extract XML metadata from some Hasselblad images
|
|
45
|
+
- Tweaked -fast2 option to read metadata from inside mdat atom of HEIC images
|
|
46
|
+
- Patched FFF reader to be more tolerant of the mess made by incompetent
|
|
47
|
+
Hasselblad programmers (wrong IFD count for some values)
|
|
48
|
+
- Patched WebP reader to be more tolerant of the mess made by incompetent
|
|
49
|
+
Google programmers (EXIF with wrong header and XMP with wrong ID)
|
|
50
|
+
- Fixed writing of MakerNotes as a block to CR3 images (now properly stored in
|
|
51
|
+
the CMT3 chunk instead of the ExifIFD) and added ability to delete them from
|
|
52
|
+
the ExifIFD of CR3 images
|
|
53
|
+
- Fixed problem which could cause runtime error when copying MakerNotes from a
|
|
54
|
+
file that contains multiple maker note blocks
|
|
55
|
+
- Fixed problem which could cause "use of uninitialized variable" warnings
|
|
56
|
+
when reading images from some Nikon cameras
|
|
57
|
+
- Fixed List type for new XMP-photomech:CreatorIdentity tag
|
|
58
|
+
|
|
59
|
+
Oct. 16, 2023 - Version 12.68
|
|
60
|
+
|
|
61
|
+
- Added preliminary read support for XISF images
|
|
62
|
+
- Added the ability to delete CAI JUMBF metadata from PNG images
|
|
63
|
+
- Added support for writing Canon burst-roll CR3 images
|
|
64
|
+
- Added a new Nikon Z9 SubjectDetection value, and improved Zf support (thanks
|
|
65
|
+
Warren Hatch)
|
|
66
|
+
- Added a couple of new PentaxModelID values
|
|
67
|
+
- Added a few couple of new tag values for the Pentax K-3 Mark III Monochrome (github #226)
|
|
68
|
+
- Added a new XMP-photomech tag
|
|
69
|
+
- Added a new QuickTime ItemList tag
|
|
70
|
+
- Added a new Nikon LensID
|
|
71
|
+
- Added a new Canon LensType
|
|
72
|
+
- Support decimal values for FujiFilm ShadowTone and HighlightTone tags
|
|
73
|
+
- Decode some new Sony tags (thanks Jos Roost)
|
|
74
|
+
- Decode ShutterCount for Canon EOS R6 (thanks Martin B.)
|
|
75
|
+
- Decode QuickTime VideoFullRangeFlag
|
|
76
|
+
- Decode JPGCompression for the Nikon D3S
|
|
77
|
+
- Enhanced -geotag feature to allow writing QuickTime:GPSCoordinates
|
|
78
|
+
- Renamed Panasonic HDRShot tag to MergedImages (forum 15298)
|
|
79
|
+
- Fixed problem where some NEF files were misidentified as NRW
|
|
80
|
+
|
|
10
81
|
Sept. 19, 2023 - Version 12.67
|
|
11
82
|
|
|
12
83
|
- Added a new Pentax LensType (thanks dmont)
|
|
@@ -284,7 +355,7 @@ Dec. 6, 2022 - Version 12.52
|
|
|
284
355
|
Nov. 21, 2022 - Version 12.51
|
|
285
356
|
|
|
286
357
|
- Added a new Olympus LensType (thanks Herb)
|
|
287
|
-
- Extract C2PA JUMBF metadata from PNG images and extract C2PA Salt values
|
|
358
|
+
- Extract C2PA CAI JUMBF metadata from PNG images and extract C2PA Salt values
|
|
288
359
|
- Decode NikonSettings for Z9 firmware 3.0 (thanks Warren Hatch)
|
|
289
360
|
- Decode additional camm metadata from Insta360 Pro2 MP4 videos
|
|
290
361
|
- Improved Verbose output when writing Composite tags to add a "+" sign to
|
|
@@ -343,8 +414,6 @@ Nov. 8, 2022 - Version 12.50 (production release)
|
|
|
343
414
|
- Fixed inconsistent year and time zone for Kenwood dashcam timed GPS in MP4
|
|
344
415
|
videos
|
|
345
416
|
|
|
346
|
-
History of older versions (back to Nov. 19, 2003 - Version 1.00) -->
|
|
347
|
-
|
|
348
417
|
Oct. 19, 2022 - Version 12.49
|
|
349
418
|
|
|
350
419
|
- Added read support for Windows ICO and CUR files
|
|
@@ -669,8 +738,8 @@ Oct. 16, 2021 - Version 12.33
|
|
|
669
738
|
|
|
670
739
|
Sept. 30, 2021 - Version 12.32
|
|
671
740
|
|
|
672
|
-
- Added support for CBOR-format metadata in JUMBF (note that JUMBF support
|
|
673
|
-
still experimental)
|
|
741
|
+
- Added support for CBOR-format metadata in CAI JUMBF (note that JUMBF support
|
|
742
|
+
is still experimental)
|
|
674
743
|
- Added a new Nikon LensID
|
|
675
744
|
- Added a new Pentax LensType
|
|
676
745
|
- Decode timed GPS for two more dashcam formats
|
|
@@ -729,7 +798,7 @@ July 9, 2021 - Version 12.29
|
|
|
729
798
|
- Improved a QuickTime "File format error" message to be more meaningful, and
|
|
730
799
|
made it a minor error
|
|
731
800
|
- Changed PNG writer to add EXIF before IDAT
|
|
732
|
-
- Some changes the way JUMBF metadata is handled
|
|
801
|
+
- Some changes the way CAI JUMBF metadata is handled
|
|
733
802
|
- Patched to read timed GPS from a different type of INSV videos
|
|
734
803
|
- Patched a security issue
|
|
735
804
|
- Fixed problem where ExifTool could hang when processing mebx timed metadata
|
|
@@ -805,7 +874,7 @@ Apr. 13, 2021 - Version 12.24
|
|
|
805
874
|
- Decode a few new Panasonic and FujiFilm tags (thanks LibRaw and Greybeard)
|
|
806
875
|
- Updated acdsee.config in distribution (thanks StarGeek)
|
|
807
876
|
- Recognize AutoCAD DXF files
|
|
808
|
-
- More work on experimental JUMBF read support
|
|
877
|
+
- More work on experimental CAI JUMBF read support
|
|
809
878
|
- More work on experimental JPEG XL read/write support
|
|
810
879
|
- Patched security vulnerability in DjVu reader
|
|
811
880
|
|
|
@@ -813,8 +882,8 @@ Apr. 1, 2021 - Version 12.23
|
|
|
813
882
|
|
|
814
883
|
- Added support for Olympus ORI files
|
|
815
884
|
- Added experimental read/write support for JPEG XL images
|
|
816
|
-
- Added experimental read support for
|
|
817
|
-
images
|
|
885
|
+
- Added experimental read support for CAI (Content Authenticity Initiative)
|
|
886
|
+
JUMBF-format metadata in JPEG and Jpeg2000 images
|
|
818
887
|
- Added built-in support for parsing GPS track from Denver ACG-8050 videos
|
|
819
888
|
with the -ee option
|
|
820
889
|
- Added a some new Sony lenses (thanks Jos Roost and LibRaw)
|
package/bin/MANIFEST
CHANGED
|
@@ -179,6 +179,7 @@ html/TagNames/VCard.html
|
|
|
179
179
|
html/TagNames/Vorbis.html
|
|
180
180
|
html/TagNames/WPG.html
|
|
181
181
|
html/TagNames/WTV.html
|
|
182
|
+
html/TagNames/XISF.html
|
|
182
183
|
html/TagNames/XMP.html
|
|
183
184
|
html/TagNames/ZIP.html
|
|
184
185
|
html/TagNames/ZISRAW.html
|
|
@@ -432,6 +433,7 @@ lib/Image/ExifTool/WriteQuickTime.pl
|
|
|
432
433
|
lib/Image/ExifTool/WriteRIFF.pl
|
|
433
434
|
lib/Image/ExifTool/WriteXMP.pl
|
|
434
435
|
lib/Image/ExifTool/Writer.pl
|
|
436
|
+
lib/Image/ExifTool/XISF.pm
|
|
435
437
|
lib/Image/ExifTool/XMP.pm
|
|
436
438
|
lib/Image/ExifTool/XMP2.pl
|
|
437
439
|
lib/Image/ExifTool/XMPStruct.pl
|
|
@@ -916,6 +918,8 @@ t/Writer_6.out
|
|
|
916
918
|
t/Writer_60.out
|
|
917
919
|
t/Writer_7.out
|
|
918
920
|
t/Writer_9.out
|
|
921
|
+
t/XISF.t
|
|
922
|
+
t/XISF_2.out
|
|
919
923
|
t/XMP.t
|
|
920
924
|
t/XMP_10.out
|
|
921
925
|
t/XMP_11.out
|
|
@@ -1144,6 +1148,7 @@ t/images/Vorbis.ogg
|
|
|
1144
1148
|
t/images/WPG.wpg
|
|
1145
1149
|
t/images/WTV.wtv
|
|
1146
1150
|
t/images/Writer.jpg
|
|
1151
|
+
t/images/XISF.xisf
|
|
1147
1152
|
t/images/XMP.inx
|
|
1148
1153
|
t/images/XMP.jpg
|
|
1149
1154
|
t/images/XMP.svg
|
package/bin/META.json
CHANGED
package/bin/META.yml
CHANGED
package/bin/README
CHANGED
|
@@ -51,11 +51,11 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
51
51
|
DCP r/w | ICO r | MPG r | PSB r/w | WV r
|
|
52
52
|
DCR r | ICS r | MPO r/w | PSD r/w | X3F r/w
|
|
53
53
|
DFONT r | IDML r | MQV r/w | PSP r | XCF r
|
|
54
|
-
DIVX r | IIQ r/w | MRC r | QTIF r/w |
|
|
55
|
-
DJVU r | IND r/w | MRW r/w | R3D r |
|
|
56
|
-
DLL r | INSP r/w | MXF r | RA r |
|
|
57
|
-
DNG r/w | INSV r | NEF r/w | RAF r/w |
|
|
58
|
-
DOC r | INX r | NKSC r/w | RAM r |
|
|
54
|
+
DIVX r | IIQ r/w | MRC r | QTIF r/w | XISF r
|
|
55
|
+
DJVU r | IND r/w | MRW r/w | R3D r | XLS r
|
|
56
|
+
DLL r | INSP r/w | MXF r | RA r | XLSX r
|
|
57
|
+
DNG r/w | INSV r | NEF r/w | RAF r/w | XMP r/w/c
|
|
58
|
+
DOC r | INX r | NKSC r/w | RAM r | ZIP r
|
|
59
59
|
DOCX r | ISO r | NRW r/w | RAR r |
|
|
60
60
|
|
|
61
61
|
Meta Information
|
|
@@ -108,8 +108,8 @@ your home directory, then you would type the following commands in a
|
|
|
108
108
|
terminal window to extract and run ExifTool:
|
|
109
109
|
|
|
110
110
|
cd ~/Desktop
|
|
111
|
-
gzip -dc Image-ExifTool-12.
|
|
112
|
-
cd Image-ExifTool-12.
|
|
111
|
+
gzip -dc Image-ExifTool-12.70.tar.gz | tar -xf -
|
|
112
|
+
cd Image-ExifTool-12.70
|
|
113
113
|
./exiftool t/images/ExifTool.jpg
|
|
114
114
|
|
|
115
115
|
Note: These commands extract meta information from one of the test images.
|
package/bin/exiftool
CHANGED
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use warnings;
|
|
12
12
|
require 5.004;
|
|
13
13
|
|
|
14
|
-
my $version = '12.
|
|
14
|
+
my $version = '12.70';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
17
|
my $exePath;
|
|
@@ -4665,11 +4665,11 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
4665
4665
|
DCP r/w | ICO r | MPG r | PSB r/w | WV r
|
|
4666
4666
|
DCR r | ICS r | MPO r/w | PSD r/w | X3F r/w
|
|
4667
4667
|
DFONT r | IDML r | MQV r/w | PSP r | XCF r
|
|
4668
|
-
DIVX r | IIQ r/w | MRC r | QTIF r/w |
|
|
4669
|
-
DJVU r | IND r/w | MRW r/w | R3D r |
|
|
4670
|
-
DLL r | INSP r/w | MXF r | RA r |
|
|
4671
|
-
DNG r/w | INSV r | NEF r/w | RAF r/w |
|
|
4672
|
-
DOC r | INX r | NKSC r/w | RAM r |
|
|
4668
|
+
DIVX r | IIQ r/w | MRC r | QTIF r/w | XISF r
|
|
4669
|
+
DJVU r | IND r/w | MRW r/w | R3D r | XLS r
|
|
4670
|
+
DLL r | INSP r/w | MXF r | RA r | XLSX r
|
|
4671
|
+
DNG r/w | INSV r | NEF r/w | RAF r/w | XMP r/w/c
|
|
4672
|
+
DOC r | INX r | NKSC r/w | RAM r | ZIP r
|
|
4673
4673
|
DOCX r | ISO r | NRW r/w | RAR r |
|
|
4674
4674
|
|
|
4675
4675
|
Meta Information
|
|
@@ -4738,7 +4738,7 @@ L<Input-output text formatting|/Input-output text formatting>
|
|
|
4738
4738
|
-n (--printConv) No print conversion
|
|
4739
4739
|
-p FMTFILE (-printFormat) Print output in specified format
|
|
4740
4740
|
-php Export tags as a PHP Array
|
|
4741
|
-
-s[NUM] (-short) Short output format
|
|
4741
|
+
-s[NUM] (-short) Short output format (-s for tag names)
|
|
4742
4742
|
-S (-veryShort) Very short output format
|
|
4743
4743
|
-sep STR (-separator) Set separator string for list items
|
|
4744
4744
|
-sort Sort output alphabetically
|
|
@@ -4951,7 +4951,7 @@ while C<-all:all=> deletes entire blocks.
|
|
|
4951
4951
|
application segments which are not associated with another deletable group.
|
|
4952
4952
|
For example, specifying C<-APP14:All=> will NOT delete the APP14 "Adobe"
|
|
4953
4953
|
segment because this is accomplished with C<-Adobe:All>. But note that
|
|
4954
|
-
these unnamed APP segments may not be excluded with C<--APPxx:all>
|
|
4954
|
+
these unnamed APP segments may not be excluded with C<--APPxx:all> when
|
|
4955
4955
|
deleting all information.
|
|
4956
4956
|
|
|
4957
4957
|
6) When shifting a value, the shift is applied to the original value of the
|
|
@@ -5582,7 +5582,7 @@ with this command:
|
|
|
5582
5582
|
|
|
5583
5583
|
produces output like this:
|
|
5584
5584
|
|
|
5585
|
-
-- Generated by ExifTool 12.
|
|
5585
|
+
-- Generated by ExifTool 12.70 --
|
|
5586
5586
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5587
5587
|
(f/5.6, 1/60s, ISO 100)
|
|
5588
5588
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -6418,10 +6418,14 @@ from the track log, and they are supported by the destination metadata
|
|
|
6418
6418
|
format): GPSLatitude, GPSLatitudeRef, GPSLongitude, GPSLongitudeRef,
|
|
6419
6419
|
GPSAltitude, GPSAltitudeRef, GPSDateStamp, GPSTimeStamp, GPSDateTime,
|
|
6420
6420
|
GPSTrack, GPSTrackRef, GPSSpeed, GPSSpeedRef, GPSImgDirection,
|
|
6421
|
-
GPSImgDirectionRef, GPSPitch, GPSRoll, AmbientTemperature
|
|
6422
|
-
CameraElevationAngle. By default, tags are created in
|
|
6423
|
-
XMP only if they already exist.
|
|
6424
|
-
|
|
6421
|
+
GPSImgDirectionRef, GPSPitch, GPSRoll, GPSCoordinates, AmbientTemperature
|
|
6422
|
+
and CameraElevationAngle. By default, in image files tags are created in
|
|
6423
|
+
EXIF, and updated in XMP only if they already exist. In QuickTime-format
|
|
6424
|
+
files GPSCoordinates is created in the preferred location (ItemList by
|
|
6425
|
+
default) as well as in XMP. However, C<EXIF:Geotime>, C<XMP:Geotime> or
|
|
6426
|
+
C<QuickTime:Geotime> may be specified to write to write only to one group.
|
|
6427
|
+
Also, C<ItemList:Geotime>, C<Keys:Geotime> or C<UserData:Geotime> may be
|
|
6428
|
+
used to write to a specific location in QuickTime-format files. Note that
|
|
6425
6429
|
GPSPitch and GPSRoll are non-standard, and require user-defined tags in
|
|
6426
6430
|
order to be written.
|
|
6427
6431
|
|
|
@@ -6544,11 +6548,12 @@ options on the command line.
|
|
|
6544
6548
|
|
|
6545
6549
|
Load specified configuration file instead of the default ".ExifTool_config".
|
|
6546
6550
|
If used, this option must come before all other arguments on the command
|
|
6547
|
-
line and applies to all B<-execute>'d commands.
|
|
6548
|
-
|
|
6549
|
-
|
|
6550
|
-
|
|
6551
|
-
|
|
6551
|
+
line and applies to all B<-execute>'d commands. This file is used to create
|
|
6552
|
+
user-defined tags as well as set default ExifTool options. The I<CFGFILE>
|
|
6553
|
+
must exist relative to the current working directory or the exiftool
|
|
6554
|
+
application directory unless an absolute path is specified. Loading of the
|
|
6555
|
+
default config file may be disabled by setting I<CFGFILE> to an empty string
|
|
6556
|
+
(ie. ""). See L<https://exiftool.org/config.html> and
|
|
6552
6557
|
config_files/example.config in the full ExifTool distribution for details
|
|
6553
6558
|
about the configuration file syntax.
|
|
6554
6559
|
|
|
@@ -6588,15 +6593,15 @@ option no longer suppresses the output "{readyNUM}" message.
|
|
|
6588
6593
|
|
|
6589
6594
|
Read tags from an alternate source file. Among other things, this allows
|
|
6590
6595
|
tags from different files to be compared and combined using the B<-if> and
|
|
6591
|
-
B<-p> options.
|
|
6592
|
-
family 8 group name (eg. C<File1:TAG> for
|
|
6593
|
-
for B<-file2>, etc). I<ALTFILE> may
|
|
6594
|
-
the B<-w> option (%d, %f, etc),
|
|
6595
|
-
|
|
6596
|
-
|
|
6597
|
-
C<money$$.jpg>). For example, assuming that
|
|
6598
|
-
been set in the edited file, a command to copy
|
|
6599
|
-
could look like this:
|
|
6596
|
+
B<-p> options. I<NUM> is any string of digits. Tags from alternate files
|
|
6597
|
+
are accessed via the corresponding family 8 group name (eg. C<File1:TAG> for
|
|
6598
|
+
the B<-file1> option, C<File2:TAG> for B<-file2>, etc). I<ALTFILE> may
|
|
6599
|
+
contain filename formatting codes like the B<-w> option (%d, %f, etc),
|
|
6600
|
+
and/or tag names with a leading C<$> symbol to access tags from the source
|
|
6601
|
+
file in the same way as the B<-p> option (so any other dollar symbol in the
|
|
6602
|
+
file name must be doubled, eg. C<money$$.jpg>). For example, assuming that
|
|
6603
|
+
the OriginalFileName tag has been set in the edited file, a command to copy
|
|
6604
|
+
Rights from the original file could look like this:
|
|
6600
6605
|
|
|
6601
6606
|
exiftool -file1 '$originalfilename' '-rights<file1:rights' edited.jpg
|
|
6602
6607
|
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
#
|
|
8
8
|
# References: 1) https://c2pa.org/public-draft/
|
|
9
9
|
# 2) https://datatracker.ietf.org/doc/html/rfc7049
|
|
10
|
+
# 3) https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml
|
|
10
11
|
#------------------------------------------------------------------------------
|
|
11
12
|
|
|
12
13
|
package Image::ExifTool::CBOR;
|
|
@@ -15,7 +16,7 @@ use vars qw($VERSION);
|
|
|
15
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
17
|
use Image::ExifTool::JSON;
|
|
17
18
|
|
|
18
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.02';
|
|
19
20
|
|
|
20
21
|
sub ProcessCBOR($$$);
|
|
21
22
|
sub ReadCBORValue($$$$);
|
|
@@ -28,15 +29,27 @@ my %cborType6 = (
|
|
|
28
29
|
3 => 'negative bignum',
|
|
29
30
|
4 => 'decimal fraction',
|
|
30
31
|
5 => 'bigfloat',
|
|
32
|
+
16 => 'COSE Encrypt0', #3 (COSE Single Recipient Encrypted Data Object)
|
|
33
|
+
17 => 'COSE Mac0', #3 (COSE Mac w/o Recipients Object)
|
|
34
|
+
18 => 'COSE Sign1', #3 (COSE Single Signer Data Object)
|
|
35
|
+
19 => 'COSE Countersignature', #3 (COSE standalone V2 countersignature)
|
|
31
36
|
21 => 'expected base64url encoding',
|
|
32
37
|
22 => 'expected base64 encoding',
|
|
33
38
|
23 => 'expected base16 encoding',
|
|
34
39
|
24 => 'encoded CBOR data',
|
|
40
|
+
25 => 'string number', #3 (reference the nth previously seen string)
|
|
41
|
+
26 => 'serialized Perl', #3 (Serialised Perl object with classname and constructor arguments)
|
|
42
|
+
27 => 'serialized code', #3 (Serialised language-independent object with type name and constructor arguments)
|
|
43
|
+
28 => 'shared value', #3 (mark value as (potentially) shared)
|
|
44
|
+
29 => 'shared value number', #3 (reference nth marked value)
|
|
45
|
+
30 => 'rational', #3 (Rational number)
|
|
46
|
+
31 => 'missing array value', #3 (Absent value in a CBOR Array)
|
|
35
47
|
32 => 'URI',
|
|
36
48
|
33 => 'base64url',
|
|
37
49
|
34 => 'base64',
|
|
38
50
|
35 => 'regular expression',
|
|
39
51
|
36 => 'MIME message',
|
|
52
|
+
# (lots more after this in ref 3, but don't include them unless we see them)
|
|
40
53
|
55799 => 'CBOR magic number',
|
|
41
54
|
);
|
|
42
55
|
|
|
@@ -212,7 +225,7 @@ sub ReadCBORValue($$$$)
|
|
|
212
225
|
{
|
|
213
226
|
$val = $$val[1] * ($num == 4 ? 10 : 2) ** $$val[0];
|
|
214
227
|
}
|
|
215
|
-
} elsif ($fmt == 7) {
|
|
228
|
+
} elsif ($fmt == 7) {
|
|
216
229
|
if ($dat == 31) {
|
|
217
230
|
undef $val; # "break" = end of indefinite array/hash (not used in C2PA)
|
|
218
231
|
} elsif ($dat < 24) {
|
|
@@ -263,6 +276,7 @@ sub ProcessCBOR($$$)
|
|
|
263
276
|
my ($val, $err, $tag, $i);
|
|
264
277
|
|
|
265
278
|
$et->VerboseDir('CBOR', undef, $$dirInfo{DirLen});
|
|
279
|
+
SetByteOrder('MM');
|
|
266
280
|
|
|
267
281
|
$$et{cbor_datapos} = $$dirInfo{DataPos} + $$dirInfo{Base};
|
|
268
282
|
|
|
@@ -320,6 +334,8 @@ under the same terms as Perl itself.
|
|
|
320
334
|
|
|
321
335
|
=item L<https://datatracker.ietf.org/doc/html/rfc7049>
|
|
322
336
|
|
|
337
|
+
=item L<https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml>
|
|
338
|
+
|
|
323
339
|
=back
|
|
324
340
|
|
|
325
341
|
=head1 SEE ALSO
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.71';
|
|
92
92
|
|
|
93
93
|
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
|
|
94
94
|
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
|
|
@@ -490,6 +490,7 @@ $VERSION = '4.68';
|
|
|
490
490
|
'368.11' => 'Sigma 70mm f/2.8 DG Macro', #IB (A018)
|
|
491
491
|
'368.12' => 'Sigma 18-35mm f/1.8 DC HSM | A', #50
|
|
492
492
|
'368.13' => 'Sigma 24-105mm f/4 DG OS HSM | A', #forum3833
|
|
493
|
+
'368.14' => 'Sigma 18-300mm f/3.5-6.3 DC Macro OS HSM | C', #forum15280 (014)
|
|
493
494
|
# Note: LensType 488 (0x1e8) is reported as 232 (0xe8) in 7D CameraSettings
|
|
494
495
|
488 => 'Canon EF-S 15-85mm f/3.5-5.6 IS USM', #PH
|
|
495
496
|
489 => 'Canon EF 70-300mm f/4-5.6L IS USM', #Gerald Kapounek
|
|
@@ -610,22 +611,23 @@ $VERSION = '4.68';
|
|
|
610
611
|
'61182.35' => 'Canon RF 600mm F4L IS USM', #GiaZopatti
|
|
611
612
|
'61182.36' => 'Canon RF 600mm F4L IS USM + RF1.4x', #42
|
|
612
613
|
'61182.37' => 'Canon RF 600mm F4L IS USM + RF2x', #42
|
|
613
|
-
'61182.38' => 'Canon RF
|
|
614
|
-
'61182.39' => 'Canon RF 800mm F5.6L IS USM', #42
|
|
615
|
-
'61182.40' => 'Canon RF 800mm F5.6L IS USM +
|
|
616
|
-
'61182.41' => 'Canon RF
|
|
617
|
-
'61182.42' => 'Canon RF 1200mm F8L IS USM', #42
|
|
618
|
-
'61182.43' => 'Canon RF 1200mm F8L IS USM +
|
|
619
|
-
'61182.44' => 'Canon RF
|
|
620
|
-
'61182.45' => 'Canon RF
|
|
621
|
-
'61182.46' => 'Canon RF
|
|
622
|
-
'61182.47' => 'Canon RF
|
|
623
|
-
'61182.48' => 'Canon RF
|
|
624
|
-
'61182.49' => 'Canon RF 100-300mm F2.8L IS USM
|
|
625
|
-
'61182.50' => 'Canon RF 100-300mm F2.8L IS USM +
|
|
626
|
-
'61182.51' => 'Canon RF
|
|
614
|
+
'61182.38' => 'Canon RF 800mm F5.6L IS USM', #42
|
|
615
|
+
'61182.39' => 'Canon RF 800mm F5.6L IS USM + RF1.4x', #42
|
|
616
|
+
'61182.40' => 'Canon RF 800mm F5.6L IS USM + RF2x', #42
|
|
617
|
+
'61182.41' => 'Canon RF 1200mm F8L IS USM', #42
|
|
618
|
+
'61182.42' => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
|
|
619
|
+
'61182.43' => 'Canon RF 1200mm F8L IS USM + RF2x', #42
|
|
620
|
+
'61182.44' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH
|
|
621
|
+
'61182.45' => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
|
|
622
|
+
'61182.46' => 'Canon RF 135mm F1.8 L IS USM', #42
|
|
623
|
+
'61182.47' => 'Canon RF 24-50mm F4.5-6.3 IS STM', #42
|
|
624
|
+
'61182.48' => 'Canon RF-S 55-210mm F5-7.1 IS STM', #42
|
|
625
|
+
'61182.49' => 'Canon RF 100-300mm F2.8L IS USM', #42
|
|
626
|
+
'61182.50' => 'Canon RF 100-300mm F2.8L IS USM + RF1.4x', #42
|
|
627
|
+
'61182.51' => 'Canon RF 100-300mm F2.8L IS USM + RF2x', #42
|
|
628
|
+
'61182.52' => 'Canon RF 10-20mm F4 L IS STM', #42
|
|
629
|
+
'61182.53' => 'Canon RF 28mm F2.8 STM', #42
|
|
627
630
|
# we need the RFLensType values for the following...
|
|
628
|
-
'61182.52' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH (NC)
|
|
629
631
|
65535 => 'n/a',
|
|
630
632
|
);
|
|
631
633
|
|
|
@@ -1389,6 +1391,16 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
1389
1391
|
Condition => '$$self{Model} =~ /\b(1200D|REBEL T5|Kiss X70)\b/',
|
|
1390
1392
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo60D' },
|
|
1391
1393
|
},
|
|
1394
|
+
{
|
|
1395
|
+
Name => 'CanonCameraInfoR6',
|
|
1396
|
+
Condition => '$$self{Model} =~ /\bEOS R6$/',
|
|
1397
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoR6' },
|
|
1398
|
+
},
|
|
1399
|
+
{
|
|
1400
|
+
Name => 'CanonCameraInfoG5XII',
|
|
1401
|
+
Condition => '$$self{Model} =~ /\bG5 X Mark II$/',
|
|
1402
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoG5XII' },
|
|
1403
|
+
},
|
|
1392
1404
|
{
|
|
1393
1405
|
Name => 'CanonCameraInfoPowerShot',
|
|
1394
1406
|
# valid if format is int32u[138] or int32u[148]
|
|
@@ -4695,6 +4707,57 @@ my %ciMaxFocal = (
|
|
|
4695
4707
|
},
|
|
4696
4708
|
);
|
|
4697
4709
|
|
|
4710
|
+
%Image::ExifTool::Canon::CameraInfoR6 = (
|
|
4711
|
+
%binaryDataAttrs,
|
|
4712
|
+
FIRST_ENTRY => 0,
|
|
4713
|
+
PRIORITY => 0,
|
|
4714
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
4715
|
+
NOTES => 'CameraInfo tags for the EOS R6.',
|
|
4716
|
+
0x0af1 => { #forum15210
|
|
4717
|
+
Name => 'ShutterCount',
|
|
4718
|
+
Format => 'int32u',
|
|
4719
|
+
Notes => 'includes electronic + mechanical shutter',
|
|
4720
|
+
},
|
|
4721
|
+
);
|
|
4722
|
+
|
|
4723
|
+
# ref https://exiftool.org/forum/index.php?topic=15356.0
|
|
4724
|
+
%Image::ExifTool::Canon::CameraInfoG5XII = (
|
|
4725
|
+
%binaryDataAttrs,
|
|
4726
|
+
FIRST_ENTRY => 0,
|
|
4727
|
+
PRIORITY => 0,
|
|
4728
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
4729
|
+
NOTES => 'CameraInfo tags for the EOS R6.',
|
|
4730
|
+
0x0293 => {
|
|
4731
|
+
Name => 'ShutterCount',
|
|
4732
|
+
Format => 'int32u',
|
|
4733
|
+
Notes => 'includes electronic + mechanical shutter',
|
|
4734
|
+
# - advances by 1 for each photo file, regardless of mechanical or electronic shutter
|
|
4735
|
+
# - does not advance for regular video files
|
|
4736
|
+
# - advances for time lapse video files
|
|
4737
|
+
# - creating a new directory or resetting the counter from the menu doesn't affect this shutter count
|
|
4738
|
+
},
|
|
4739
|
+
0x0b21 => {
|
|
4740
|
+
Name => 'DirectoryIndex',
|
|
4741
|
+
Groups => { 2 => 'Image' },
|
|
4742
|
+
Format => 'int32u',
|
|
4743
|
+
},
|
|
4744
|
+
0x0b2d => {
|
|
4745
|
+
Name => 'FileIndex',
|
|
4746
|
+
Format => 'int32u',
|
|
4747
|
+
Groups => { 2 => 'Image' },
|
|
4748
|
+
Format => 'int32u',
|
|
4749
|
+
ValueConv => '$val + 1',
|
|
4750
|
+
ValueConvInv => '$val - 1',
|
|
4751
|
+
},
|
|
4752
|
+
#0x0b39 => {
|
|
4753
|
+
# Name => 'DirectoryIndex',
|
|
4754
|
+
# Groups => { 2 => 'Image' },
|
|
4755
|
+
# Format => 'int32u',
|
|
4756
|
+
# ValueConv => '$val - 1',
|
|
4757
|
+
# ValueConvInv => '$val + 1',
|
|
4758
|
+
#},
|
|
4759
|
+
);
|
|
4760
|
+
|
|
4698
4761
|
# Canon camera information for 70D (MakerNotes tag 0x0d) (ref PH)
|
|
4699
4762
|
%Image::ExifTool::Canon::CameraInfo70D = (
|
|
4700
4763
|
%binaryDataAttrs,
|
|
@@ -6879,6 +6942,7 @@ my %ciMaxFocal = (
|
|
|
6879
6942
|
298 => 'Canon RF 1200mm F8L IS USM', #42
|
|
6880
6943
|
299 => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
|
|
6881
6944
|
300 => 'Canon RF 1200mm F8L IS USM + RF2x', #42
|
|
6945
|
+
301 => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH
|
|
6882
6946
|
302 => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
|
|
6883
6947
|
303 => 'Canon RF 135mm F1.8 L IS USM', #42
|
|
6884
6948
|
304 => 'Canon RF 24-50mm F4.5-6.3 IS STM', #42
|
|
@@ -6886,6 +6950,7 @@ my %ciMaxFocal = (
|
|
|
6886
6950
|
306 => 'Canon RF 100-300mm F2.8L IS USM', #42
|
|
6887
6951
|
307 => 'Canon RF 100-300mm F2.8L IS USM + RF1.4x', #42
|
|
6888
6952
|
308 => 'Canon RF 100-300mm F2.8L IS USM + RF2x', #42
|
|
6953
|
+
312 => 'Canon RF 10-20mm F4 L IS STM', #42
|
|
6889
6954
|
313 => 'Canon RF 28mm F2.8 STM', #42
|
|
6890
6955
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
|
6891
6956
|
},
|
|
@@ -9081,8 +9146,14 @@ my %filterConv = (
|
|
|
9081
9146
|
CMT3 => { # (CR3 files)
|
|
9082
9147
|
Name => 'MakerNoteCanon',
|
|
9083
9148
|
PreservePadding => 1,
|
|
9149
|
+
Writable => 'undef', # (writable directory!)
|
|
9150
|
+
# (note that ExifTool 12.68 and earlier lacked the ability to write this as a block,
|
|
9151
|
+
# and would instead add the maker notes the the CMT2 ExifIFD. To remove these
|
|
9152
|
+
# incorrectly-placed maker notes, use "exiftool -exififd:makernotes= FILE")
|
|
9153
|
+
MakerNotes => 1,
|
|
9084
9154
|
SubDirectory => {
|
|
9085
9155
|
TagTable => 'Image::ExifTool::Canon::Main',
|
|
9156
|
+
DirName => 'MakerNotes', # (necessary for mechanism that prevents these from being deleted)
|
|
9086
9157
|
ProcessProc => \&ProcessCMT3,
|
|
9087
9158
|
WriteProc => \&Image::ExifTool::WriteTIFF,
|
|
9088
9159
|
},
|
|
@@ -16,7 +16,7 @@ use Image::ExifTool::Exif;
|
|
|
16
16
|
use Image::ExifTool::XMP;
|
|
17
17
|
use Image::ExifTool::GPS;
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.09';
|
|
20
20
|
|
|
21
21
|
sub ProcessDJIInfo($$$);
|
|
22
22
|
|
|
@@ -143,9 +143,10 @@ my %convFloat2 = (
|
|
|
143
143
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
|
|
144
144
|
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lat")',
|
|
145
145
|
},
|
|
146
|
-
GpsLongtitude => { # (
|
|
146
|
+
GpsLongtitude => { # [sic] (misspelt in DJI original file)
|
|
147
147
|
Name => 'GPSLongtitude',
|
|
148
148
|
Writable => 'real',
|
|
149
|
+
Avoid => 1, # (in case someone tries to write "GPSLong*")
|
|
149
150
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
|
|
150
151
|
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lon")',
|
|
151
152
|
},
|
|
@@ -17,7 +17,7 @@ use Image::ExifTool::Exif;
|
|
|
17
17
|
use Image::ExifTool::MakerNotes;
|
|
18
18
|
use Image::ExifTool::CanonRaw;
|
|
19
19
|
|
|
20
|
-
$VERSION = '1.
|
|
20
|
+
$VERSION = '1.24';
|
|
21
21
|
|
|
22
22
|
sub ProcessOriginalRaw($$$);
|
|
23
23
|
sub ProcessAdobeData($$$);
|
|
@@ -120,6 +120,25 @@ sub WriteAdobeStuff($$$);
|
|
|
120
120
|
},
|
|
121
121
|
);
|
|
122
122
|
|
|
123
|
+
# (DNG 1.7)
|
|
124
|
+
%Image::ExifTool::DNG::ImageSeq = (
|
|
125
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
126
|
+
0 => { Name => 'SeqID', Format => 'var_string' },
|
|
127
|
+
1 => { Name => 'SeqType', Format => 'var_string' },
|
|
128
|
+
2 => { Name => 'SeqFrameInfo', Format => 'var_string' },
|
|
129
|
+
3 => { Name => 'SeqIndex', Format => 'int32u' },
|
|
130
|
+
7 => { Name => 'SeqCount', Format => 'int32u' },
|
|
131
|
+
11 => { Name => 'SeqFinal', Format => 'int8u', PrintConv => { 0 => 'No', 1 => 'Yes' } },
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
# (DNG 1.7)
|
|
135
|
+
%Image::ExifTool::DNG::ProfileDynamicRange = (
|
|
136
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
137
|
+
0 => { Name => 'PDRVersion', Format => 'int16u' },
|
|
138
|
+
2 => { Name => 'DynamicRange', Format => 'int16u', PrintConv => { 0 => 'Standard', 1 => 'High' } },
|
|
139
|
+
4 => { Name => 'HintMaxOutputValue', Format => 'float' },
|
|
140
|
+
);
|
|
141
|
+
|
|
123
142
|
# fill in maker notes
|
|
124
143
|
{
|
|
125
144
|
my $tagInfo;
|
|
@@ -786,7 +805,11 @@ sub ProcessAdobeMakN($$$)
|
|
|
786
805
|
return 1 unless $$tagInfo{Writable};
|
|
787
806
|
}
|
|
788
807
|
$val = substr($$dataPt, 20) unless defined $val;
|
|
789
|
-
$et->FoundTag($tagInfo, $val);
|
|
808
|
+
my $key = $et->FoundTag($tagInfo, $val);
|
|
809
|
+
if ($$et{MAKER_NOTE_FIXUP}) {
|
|
810
|
+
$$et{TAG_EXTRA}{$key}{Fixup} = $$et{MAKER_NOTE_FIXUP};
|
|
811
|
+
delete $$et{MAKER_NOTE_FIXUP};
|
|
812
|
+
}
|
|
790
813
|
}
|
|
791
814
|
}
|
|
792
815
|
return 1;
|