exiftool_vendored 12.67.0 → 12.70.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +79 -10
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +7 -7
- data/bin/exiftool +32 -27
- data/bin/lib/Image/ExifTool/CBOR.pm +18 -2
- data/bin/lib/Image/ExifTool/Canon.pm +87 -16
- data/bin/lib/Image/ExifTool/DJI.pm +3 -2
- data/bin/lib/Image/ExifTool/DNG.pm +25 -2
- data/bin/lib/Image/ExifTool/EXE.pm +54 -6
- data/bin/lib/Image/ExifTool/Exif.pm +175 -14
- data/bin/lib/Image/ExifTool/FujiFilm.pm +158 -20
- data/bin/lib/Image/ExifTool/GIF.pm +5 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +16 -11
- data/bin/lib/Image/ExifTool/ID3.pm +70 -7
- data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +30 -15
- data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +82 -22
- data/bin/lib/Image/ExifTool/Olympus.pm +7 -1
- data/bin/lib/Image/ExifTool/PNG.pm +3 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +22 -9
- data/bin/lib/Image/ExifTool/Pentax.pm +6 -1
- data/bin/lib/Image/ExifTool/PhotoMechanic.pm +2 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +92 -55
- data/bin/lib/Image/ExifTool/README +14 -5
- data/bin/lib/Image/ExifTool/RIFF.pm +60 -10
- data/bin/lib/Image/ExifTool/Sony.pm +152 -46
- data/bin/lib/Image/ExifTool/TagLookup.pm +6955 -6713
- data/bin/lib/Image/ExifTool/TagNames.pod +878 -334
- data/bin/lib/Image/ExifTool/Text.pm +4 -5
- data/bin/lib/Image/ExifTool/Validate.pm +23 -20
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
- data/bin/lib/Image/ExifTool/WriteExif.pl +14 -4
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +3 -0
- data/bin/lib/Image/ExifTool/WriteRIFF.pl +31 -6
- data/bin/lib/Image/ExifTool/Writer.pl +40 -14
- data/bin/lib/Image/ExifTool/XISF.pm +185 -0
- data/bin/lib/Image/ExifTool/XMP.pm +67 -2
- data/bin/lib/Image/ExifTool/XMP2.pl +35 -0
- data/bin/lib/Image/ExifTool.pm +92 -45
- data/bin/lib/Image/ExifTool.pod +14 -8
- data/bin/perl-Image-ExifTool.spec +6 -6
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8660bdc38a746e24a73d1b5a0b167250bce83398c78d24f4a2ef736b9bb7a5a4
|
4
|
+
data.tar.gz: 8fc11e9218cf70d7ab1bf608b39bcd12693aea6c20bdaf3d31907a95ff21b626
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77b2a89162d45e272bb27aa0481c57ea95fae1e677081aad86976accda1492f622e46d789c39818e4de31b1e1fa8fb951c4687a20ecfe7d5435a98df30b73a19
|
7
|
+
data.tar.gz: 9d59b5179a8b89b99456845bc087b643290efe2bcfddffbed73eb224b7fb7f669a43f1e5c29f60ae60bf3d00ac3142372cee21932c65d321e1868f35fa5e567e
|
data/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)
|
data/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
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/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.
|
data/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;
|