Skip to content

Commit

Permalink
Upgrading to exiftool v12.75
Browse files Browse the repository at this point in the history
  • Loading branch information
morozgrafix committed Jan 31, 2024
1 parent 1446d73 commit fa648d9
Show file tree
Hide file tree
Showing 23 changed files with 423 additions and 252 deletions.
20 changes: 17 additions & 3 deletions bin/Changes
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,31 @@ ExifTool Version History

RSS feed: https://exiftool.org/rss.xml

Note: The most recent production release is Version 12.70. (Other versions are
Note: The most recent production release is Version 12.75. (Other versions are
considered development releases, and are not uploaded to MetaCPAN.)

Jan. 30, 2024 - Version 12.75 (production release)

- CORRUPTION WARNING: Fixed bug introduced in 12.45 which could result in
corrupted Sony ARW images from some newer models when writing if lossless
compression was used
- Added ability to read C2PA JUMBF metadata from PDF and SVG files
- Added ability to extract JUMBF metadata as a block
- Added read support for C2PA (JUMBF-format) files
- Removed "date before 1970" warning entirely since 64-bit systems should be
able to handle dates in this range
- Improved Canon FocusMode decoding
- Fixed bug introducd in 12.74 which could cause "Undefined subroutine"
runtime error when reading MIE files

Jan. 23, 2024 - Version 12.74

- Added a couple of new Nikon lenses (thanks Chris)
- Added write support for a few new QuickTime Keys tags
- Decode ShutterCount for Canon EOS R5 (thanks John Moyer)
- Improved error messages in the case of file read errors
- Enhanced tag name strings (eg. -if option expressions) to allow values of
multiple matching tags to be concatenated when a group name of "All" is
- Enhanced tag name strings (eg. -if and -p option arguments) to allow values
of multiple matching tags to be concatenated when a group name of "All" is
specified
- Enhanced -p option to add -p- feature which avoids adding trailing newline
- Changed warning from "Shift results in negative time" to "Shift results in
Expand Down
2 changes: 1 addition & 1 deletion bin/META.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,5 @@
}
},
"release_status" : "stable",
"version" : "12.74"
"version" : "12.75"
}
2 changes: 1 addition & 1 deletion bin/META.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,4 @@ recommends:
Time::HiRes: 0
requires:
perl: 5.004
version: 12.74
version: 12.75
91 changes: 46 additions & 45 deletions bin/README
Original file line number Diff line number Diff line change
Expand Up @@ -14,49 +14,50 @@ supported by ExifTool (r = read, w = write, c = create):

File Types
------------+-------------+-------------+-------------+------------
360 r/w | DOCX r | ISO r | NRW r/w | RAR r
3FR r | DPX r | ITC r | NUMBERS r | RAW r/w
3G2 r/w | DR4 r/w/c | J2C r | O r | RIFF r
3GP r/w | DSS r | JNG r/w | ODP r | RSRC r
7Z r | DV r | JP2 r/w | ODS r | RTF r
A r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
AA r | DVR-MS r | JSON r | OFR r | RWL r/w
AAC r | DYLIB r | JXL r | OGG r | RWZ r
AAE r | EIP r | K25 r | OGV r | RM r
AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
ACR r | EPUB r | KEY r | OPUS r | SKETCH r
AFM r | ERF r/w | LA r | ORF r/w | SO r
AI r/w | EXE r | LFP r | ORI r/w | SR2 r/w
AIFF r | EXIF r/w/c | LIF r | OTF r | SRF r
APE r | EXR r | LNK r | PAC r | SRW r/w
ARQ r/w | EXV r/w/c | LRV r/w | PAGES r | SVG r
ARW r/w | F4A/V r/w | M2TS r | PBM r/w | SWF r
ASF r | FFF r/w | M4A/V r/w | PCD r | THM r/w
AVI r | FITS r | MACOS r | PCX r | TIFF r/w
AVIF r/w | FLA r | MAX r | PDB r | TORRENT r
AZW r | FLAC r | MEF r/w | PDF r/w | TTC r
BMP r | FLIF r/w | MIE r/w/c | PEF r/w | TTF r
BPG r | FLV r | MIFF r | PFA r | TXT r
BTF r | FPF r | MKA r | PFB r | VCF r
CHM r | FPX r | MKS r | PFM r | VNT r
COS r | GIF r/w | MKV r | PGF r | VRD r/w/c
CR2 r/w | GLV r/w | MNG r/w | PGM r/w | VSD r
CR3 r/w | GPR r/w | MOBI r | PLIST r | WAV r
CRM r/w | GZ r | MODD r | PICT r | WDP r/w
CRW r/w | HDP r/w | MOI r | PMP r | WEBP r/w
CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBM r
CSV r | HEIC r/w | MOV r/w | PPM r/w | WMA r
CUR r | HEIF r/w | MP3 r | PPT r | WMV r
CZI r | HTML r | MP4 r/w | PPTX r | WPG r
DCM r | ICC r/w/c | MPC r | PS r/w | WTV r
DCP r/w | ICO r | MPG r | PSB r/w | WV r
DCR r | ICS r | MPO r/w | PSD r/w | X3F r/w
DFONT r | IDML r | MQV r/w | PSP r | XCF r
DIVX r | IIQ r/w | MRC r | QTIF r/w | XISF r
DJVU r | IND r/w | MRW r/w | R3D r | XLS r
DLL r | INSP r/w | MXF r | RA r | XLSX r
DNG r/w | INSV r | NEF r/w | RAF r/w | XMP r/w/c
DOC r | INX r | NKSC r/w | RAM r | ZIP r
360 r/w | DOCX r | ITC r | O r | RSRC r
3FR r | DPX r | J2C r | ODP r | RTF r
3G2 r/w | DR4 r/w/c | JNG r/w | ODS r | RW2 r/w
3GP r/w | DSS r | JP2 r/w | ODT r | RWL r/w
7Z r | DV r | JPEG r/w | OFR r | RWZ r
A r | DVB r/w | JSON r | OGG r | RM r
AA r | DVR-MS r | JXL r | OGV r | SEQ r
AAC r | DYLIB r | K25 r | ONP r | SKETCH r
AAE r | EIP r | KDC r | OPUS r | SO r
AAX r/w | EPS r/w | KEY r | ORF r/w | SR2 r/w
ACR r | EPUB r | LA r | ORI r/w | SRF r
AFM r | ERF r/w | LFP r | OTF r | SRW r/w
AI r/w | EXE r | LIF r | PAC r | SVG r
AIFF r | EXIF r/w/c | LNK r | PAGES r | SWF r
APE r | EXR r | LRV r/w | PBM r/w | THM r/w
ARQ r/w | EXV r/w/c | M2TS r | PCD r | TIFF r/w
ARW r/w | F4A/V r/w | M4A/V r/w | PCX r | TORRENT r
ASF r | FFF r/w | MACOS r | PDB r | TTC r
AVI r | FITS r | MAX r | PDF r/w | TTF r
AVIF r/w | FLA r | MEF r/w | PEF r/w | TXT r
AZW r | FLAC r | MIE r/w/c | PFA r | VCF r
BMP r | FLIF r/w | MIFF r | PFB r | VNT r
BPG r | FLV r | MKA r | PFM r | VRD r/w/c
BTF r | FPF r | MKS r | PGF r | VSD r
C2PA r | FPX r | MKV r | PGM r/w | WAV r
CHM r | GIF r/w | MNG r/w | PLIST r | WDP r/w
COS r | GLV r/w | MOBI r | PICT r | WEBP r/w
CR2 r/w | GPR r/w | MODD r | PMP r | WEBM r
CR3 r/w | GZ r | MOI r | PNG r/w | WMA r
CRM r/w | HDP r/w | MOS r/w | PPM r/w | WMV r
CRW r/w | HDR r | MOV r/w | PPT r | WPG r
CS1 r/w | HEIC r/w | MP3 r | PPTX r | WTV r
CSV r | HEIF r/w | MP4 r/w | PS r/w | WV r
CUR r | HTML r | MPC r | PSB r/w | X3F r/w
CZI r | ICC r/w/c | MPG r | PSD r/w | XCF r
DCM r | ICO r | MPO r/w | PSP r | XISF r
DCP r/w | ICS r | MQV r/w | QTIF r/w | XLS r
DCR r | IDML r | MRC r | R3D r | XLSX r
DFONT r | IIQ r/w | MRW r/w | RA r | XMP r/w/c
DIVX r | IND r/w | MXF r | RAF r/w | ZIP r
DJVU r | INSP r/w | NEF r/w | RAM r |
DLL r | INSV r | NKSC r/w | RAR r |
DNG r/w | INX r | NRW r/w | RAW r/w |
DOC r | ISO r | NUMBERS r | RIFF r |

Meta Information
----------------------+----------------------+---------------------
Expand Down Expand Up @@ -108,8 +109,8 @@ your home directory, then you would type the following commands in a
terminal window to extract and run ExifTool:

cd ~/Desktop
gzip -dc Image-ExifTool-12.74.tar.gz | tar -xf -
cd Image-ExifTool-12.74
gzip -dc Image-ExifTool-12.75.tar.gz | tar -xf -
cd Image-ExifTool-12.75
./exiftool t/images/ExifTool.jpg

Note: These commands extract meta information from one of the test images.
Expand Down
95 changes: 50 additions & 45 deletions bin/exiftool
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use strict;
use warnings;
require 5.004;

my $version = '12.74';
my $version = '12.75';

# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
my $exePath;
Expand Down Expand Up @@ -4109,6 +4109,10 @@ sub SuggestedExtension($$$)
$ext = 'pict';
} elsif ($$valPt =~ /^\xff\x0a|\0\0\0\x0cJXL \x0d\x0a......ftypjxl/s) {
$ext = 'jxl';
} elsif ($$valPt =~ /^.{4}jumb\0.{3}jumdc2pa/s) {
$ext = 'c2pa';
} elsif ($tag eq 'JUMBF') {
$ext = 'jumbf';
} else {
$ext = 'dat';
}
Expand Down Expand Up @@ -4645,49 +4649,50 @@ supported by ExifTool (r = read, w = write, c = create):
File Types
------------+-------------+-------------+-------------+------------
360 r/w | DOCX r | ISO r | NRW r/w | RAR r
3FR r | DPX r | ITC r | NUMBERS r | RAW r/w
3G2 r/w | DR4 r/w/c | J2C r | O r | RIFF r
3GP r/w | DSS r | JNG r/w | ODP r | RSRC r
7Z r | DV r | JP2 r/w | ODS r | RTF r
A r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
AA r | DVR-MS r | JSON r | OFR r | RWL r/w
AAC r | DYLIB r | JXL r | OGG r | RWZ r
AAE r | EIP r | K25 r | OGV r | RM r
AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
ACR r | EPUB r | KEY r | OPUS r | SKETCH r
AFM r | ERF r/w | LA r | ORF r/w | SO r
AI r/w | EXE r | LFP r | ORI r/w | SR2 r/w
AIFF r | EXIF r/w/c | LIF r | OTF r | SRF r
APE r | EXR r | LNK r | PAC r | SRW r/w
ARQ r/w | EXV r/w/c | LRV r/w | PAGES r | SVG r
ARW r/w | F4A/V r/w | M2TS r | PBM r/w | SWF r
ASF r | FFF r/w | M4A/V r/w | PCD r | THM r/w
AVI r | FITS r | MACOS r | PCX r | TIFF r/w
AVIF r/w | FLA r | MAX r | PDB r | TORRENT r
AZW r | FLAC r | MEF r/w | PDF r/w | TTC r
BMP r | FLIF r/w | MIE r/w/c | PEF r/w | TTF r
BPG r | FLV r | MIFF r | PFA r | TXT r
BTF r | FPF r | MKA r | PFB r | VCF r
CHM r | FPX r | MKS r | PFM r | VNT r
COS r | GIF r/w | MKV r | PGF r | VRD r/w/c
CR2 r/w | GLV r/w | MNG r/w | PGM r/w | VSD r
CR3 r/w | GPR r/w | MOBI r | PLIST r | WAV r
CRM r/w | GZ r | MODD r | PICT r | WDP r/w
CRW r/w | HDP r/w | MOI r | PMP r | WEBP r/w
CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBM r
CSV r | HEIC r/w | MOV r/w | PPM r/w | WMA r
CUR r | HEIF r/w | MP3 r | PPT r | WMV r
CZI r | HTML r | MP4 r/w | PPTX r | WPG r
DCM r | ICC r/w/c | MPC r | PS r/w | WTV r
DCP r/w | ICO r | MPG r | PSB r/w | WV r
DCR r | ICS r | MPO r/w | PSD r/w | X3F r/w
DFONT r | IDML r | MQV r/w | PSP r | XCF r
DIVX r | IIQ r/w | MRC r | QTIF r/w | XISF r
DJVU r | IND r/w | MRW r/w | R3D r | XLS r
DLL r | INSP r/w | MXF r | RA r | XLSX r
DNG r/w | INSV r | NEF r/w | RAF r/w | XMP r/w/c
DOC r | INX r | NKSC r/w | RAM r | ZIP r
360 r/w | DOCX r | ITC r | O r | RSRC r
3FR r | DPX r | J2C r | ODP r | RTF r
3G2 r/w | DR4 r/w/c | JNG r/w | ODS r | RW2 r/w
3GP r/w | DSS r | JP2 r/w | ODT r | RWL r/w
7Z r | DV r | JPEG r/w | OFR r | RWZ r
A r | DVB r/w | JSON r | OGG r | RM r
AA r | DVR-MS r | JXL r | OGV r | SEQ r
AAC r | DYLIB r | K25 r | ONP r | SKETCH r
AAE r | EIP r | KDC r | OPUS r | SO r
AAX r/w | EPS r/w | KEY r | ORF r/w | SR2 r/w
ACR r | EPUB r | LA r | ORI r/w | SRF r
AFM r | ERF r/w | LFP r | OTF r | SRW r/w
AI r/w | EXE r | LIF r | PAC r | SVG r
AIFF r | EXIF r/w/c | LNK r | PAGES r | SWF r
APE r | EXR r | LRV r/w | PBM r/w | THM r/w
ARQ r/w | EXV r/w/c | M2TS r | PCD r | TIFF r/w
ARW r/w | F4A/V r/w | M4A/V r/w | PCX r | TORRENT r
ASF r | FFF r/w | MACOS r | PDB r | TTC r
AVI r | FITS r | MAX r | PDF r/w | TTF r
AVIF r/w | FLA r | MEF r/w | PEF r/w | TXT r
AZW r | FLAC r | MIE r/w/c | PFA r | VCF r
BMP r | FLIF r/w | MIFF r | PFB r | VNT r
BPG r | FLV r | MKA r | PFM r | VRD r/w/c
BTF r | FPF r | MKS r | PGF r | VSD r
C2PA r | FPX r | MKV r | PGM r/w | WAV r
CHM r | GIF r/w | MNG r/w | PLIST r | WDP r/w
COS r | GLV r/w | MOBI r | PICT r | WEBP r/w
CR2 r/w | GPR r/w | MODD r | PMP r | WEBM r
CR3 r/w | GZ r | MOI r | PNG r/w | WMA r
CRM r/w | HDP r/w | MOS r/w | PPM r/w | WMV r
CRW r/w | HDR r | MOV r/w | PPT r | WPG r
CS1 r/w | HEIC r/w | MP3 r | PPTX r | WTV r
CSV r | HEIF r/w | MP4 r/w | PS r/w | WV r
CUR r | HTML r | MPC r | PSB r/w | X3F r/w
CZI r | ICC r/w/c | MPG r | PSD r/w | XCF r
DCM r | ICO r | MPO r/w | PSP r | XISF r
DCP r/w | ICS r | MQV r/w | QTIF r/w | XLS r
DCR r | IDML r | MRC r | R3D r | XLSX r
DFONT r | IIQ r/w | MRW r/w | RA r | XMP r/w/c
DIVX r | IND r/w | MXF r | RAF r/w | ZIP r
DJVU r | INSP r/w | NEF r/w | RAM r |
DLL r | INSV r | NKSC r/w | RAR r |
DNG r/w | INX r | NRW r/w | RAW r/w |
DOC r | ISO r | NUMBERS r | RIFF r |
Meta Information
----------------------+----------------------+---------------------
Expand Down Expand Up @@ -5600,7 +5605,7 @@ with this command:
produces output like this:
-- Generated by ExifTool 12.74 --
-- Generated by ExifTool 12.75 --
File: a.jpg - 2003:10:31 15:44:19
(f/5.6, 1/60s, ISO 100)
File: b.jpg - 2006:05:23 11:57:38
Expand Down
20 changes: 16 additions & 4 deletions bin/lib/Image/ExifTool.pm
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
%jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
%static_vars);

$VERSION = '12.74';
$VERSION = '12.75';
$RELEASE = '';
@ISA = qw(Exporter);
%EXPORT_TAGS = (
Expand Down Expand Up @@ -195,9 +195,9 @@ $defaultLang = 'en'; # default language
OGG FLAC APE MPC MKV MXF DV PMP IND PGF ICC ITC FLIR FLIF FPF
LFP HTML VRD RTF FITS XISF XCF DSS QTIF FPX PICT ZIP GZIP PLIST
RAR 7Z BZ2 CZI TAR EXE EXR HDR CHM LNK WMF AVC DEX DPX RAW Font
RSRC M2TS MacOS PHP PCX DCX DWF DWG DXF WTV Torrent VCard LRI
R3D AA PDB PFM2 MRC LIF JXL MOI ISO ALIAS JSON MP3 DICOM PCD ICO
TXT AAC);
JUMBF RSRC M2TS MacOS PHP PCX DCX DWF DWG DXF WTV Torrent VCard
LRI R3D AA PDB PFM2 MRC LIF JXL MOI ISO ALIAS JSON MP3 DICOM PCD
ICO TXT AAC);

# file types that we can write (edit)
my @writeTypes = qw(JPEG TIFF GIF CRW MRW ORF RAF RAW PNG MIE PSD XMP PPM EPS
Expand Down Expand Up @@ -260,6 +260,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
BPG => ['BPG', 'Better Portable Graphics'],
BTF => ['BTF', 'Big Tagged Image File Format'], #(unofficial)
BZ2 => ['BZ2', 'BZIP2 archive'],
C2PA => ['JUMBF','Coalition for Content Provenance and Authenticity'],
CHM => ['CHM', 'Microsoft Compiled HTML format'],
CIFF => ['CRW', 'Camera Image File Format'],
COS => ['COS', 'Capture One Settings'],
Expand Down Expand Up @@ -374,6 +375,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
JPS => ['JPEG', 'JPEG Stereo image'],
JPX => ['JP2', 'JPEG 2000 with extensions'],
JSON => ['JSON', 'JavaScript Object Notation'],
JUMBF=> ['JUMBF','JPEG Universal Metadata Box Format'],
JXL => ['JXL', 'JPEG XL'],
JXR => ['TIFF', 'JPEG XR'],
K25 => ['TIFF', 'Kodak DC25 RAW'],
Expand Down Expand Up @@ -612,6 +614,7 @@ my %fileDescription = (
BPG => 'image/bpg',
BTF => 'image/x-tiff-big', #(NC) (ref http://www.asmail.be/msg0055371937.html)
BZ2 => 'application/bzip2',
C2PA => 'application/c2pa',
'Canon 1D RAW' => 'image/x-raw', # (uses .TIF file extension)
CHM => 'application/x-chm',
COS => 'application/octet-stream', #PH (NC)
Expand Down Expand Up @@ -686,6 +689,7 @@ my %fileDescription = (
JPS => 'image/x-jps',
JPX => 'image/jpx',
JSON => 'application/json',
JUMBF=> 'application/octet-stream', #PH (invented format)
JXL => 'image/jxl', #PH (NC)
JXR => 'image/jxr',
K25 => 'image/x-kodak-k25',
Expand Down Expand Up @@ -856,6 +860,7 @@ my %moduleName = (
HDR => 'Radiance',
JP2 => 'Jpeg2000',
JPEG => '',
JUMBF=> 'Jpeg2000',
JXL => 'Jpeg2000',
LFP => 'Lytro',
LRI => 0,
Expand Down Expand Up @@ -947,6 +952,7 @@ $testLen = 1024; # number of bytes to read when testing for magic number
JP2 => '(\0\0\0\x0cjP( |\x1a\x1a)\x0d\x0a\x87\x0a|\xff\x4f\xff\x51\0)',
JPEG => '\xff\xd8\xff',
JSON => '(\xef\xbb\xbf)?\s*(\[\s*)?\{\s*"[^"]*"\s*:',
JUMBF=> '.{4}jumb\0.{3}jumd',
JXL => '\xff\x0a|\0\0\0\x0cJXL \x0d\x0a......ftypjxl ',
LFP => '\x89LFP\x0d\x0a\x1a\x0a',
LIF => '\x70\0{3}.{4}\x2a.{4}<\0',
Expand Down Expand Up @@ -1640,6 +1646,11 @@ my %systemTagsNotes = (
Groups => { 0 => 'XML', 1 => 'XML' },
Binary => 1,
},
JUMBF => {
Notes => 'the C2PA JUMBF data block, extracted only if specifically requested',
Groups => { 0 => 'JUMBF', 1 => 'JUMBF' },
Binary => 1,
},
ICC_Profile => {
Notes => q{
the full ICC_Profile data block. This tag is generated only if specifically
Expand Down Expand Up @@ -7568,6 +7579,7 @@ sub ProcessJPEG($$)
$dirInfo{DataPt} = \$buff;
$dirInfo{DataPos} = $segPos + 8; # (shows correct offsets for single-segment JUMBF)
$dirInfo{DataLen} = $dirInfo{DirLen} = $size;
$dirInfo{DirName} = 'JUMBF';
my $tagTablePtr = GetTagTable('Image::ExifTool::Jpeg2000::Main');
$self->ProcessDirectory(\%dirInfo, $tagTablePtr);
delete $jumbfChunk{$type};
Expand Down
Loading

0 comments on commit fa648d9

Please sign in to comment.