summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changes23
-rw-r--r--MANIFEST11
-rw-r--r--META.json2
-rw-r--r--META.yml2
-rw-r--r--README87
-rw-r--r--config_files/cuepointlist.config70
-rwxr-xr-xexiftool86
-rw-r--r--html/ExifTool.html2
-rw-r--r--html/ExifTool.pdf918
-rw-r--r--html/Shift.pdf6
-rw-r--r--html/TagNames/Canon.html5
-rw-r--r--html/TagNames/MRC.html731
-rw-r--r--html/TagNames/Nikon.html5
-rw-r--r--html/TagNames/NikonSettings.html15
-rw-r--r--html/TagNames/QuickTime.html25
-rw-r--r--html/TagNames/RIFF.html176
-rw-r--r--html/TagNames/Sony.html24
-rw-r--r--html/TagNames/index.html13
-rw-r--r--html/exiftool_pod.html84
-rw-r--r--html/exiftool_pod.pdf430
-rw-r--r--html/history.html24
-rw-r--r--html/index.html28
-rw-r--r--html/install.html22
-rw-r--r--lib/Image/ExifTool.pm34
-rw-r--r--lib/Image/ExifTool.pod85
-rw-r--r--lib/Image/ExifTool/Canon.pm5
-rw-r--r--lib/Image/ExifTool/Exif.pm23
-rw-r--r--lib/Image/ExifTool/Jpeg2000.pm24
-rw-r--r--lib/Image/ExifTool/MRC.pm341
-rw-r--r--lib/Image/ExifTool/Microsoft.pm4
-rw-r--r--lib/Image/ExifTool/Nikon.pm5
-rw-r--r--lib/Image/ExifTool/NikonSettings.pm11
-rw-r--r--lib/Image/ExifTool/QuickTime.pm109
-rw-r--r--lib/Image/ExifTool/QuickTimeStream.pl82
-rw-r--r--lib/Image/ExifTool/RIFF.pm94
-rw-r--r--lib/Image/ExifTool/Sony.pm5
-rw-r--r--lib/Image/ExifTool/TagLookup.pm34
-rw-r--r--lib/Image/ExifTool/TagNames.pod197
-rw-r--r--lib/Image/ExifTool/WriteQuickTime.pl49
-rw-r--r--lib/Image/ExifTool/WriteXMP.pl8
-rw-r--r--lib/Image/ExifTool/XMP.pm23
-rw-r--r--perl-Image-ExifTool.spec84
-rw-r--r--pp_build_exe.args9
-rw-r--r--t/JXL.t50
-rw-r--r--t/JXL_2.out8
-rw-r--r--t/JXL_3.out19
-rw-r--r--t/MRC.t30
-rw-r--r--t/MRC_2.out157
-rw-r--r--t/QuickTime.t33
-rw-r--r--t/QuickTime_17.out2
-rw-r--r--t/images/JXL.jxl2
-rw-r--r--t/images/MRC.mrcbin0 -> 2560 bytes
-rwxr-xr-xwindows_exiftool86
53 files changed, 3213 insertions, 1189 deletions
diff --git a/Changes b/Changes
index 16922a81..9cfb964b 100644
--- a/Changes
+++ b/Changes
@@ -7,6 +7,27 @@ RSS feed: https://exiftool.org/rss.xml
Note: The most recent production release is Version 12.16. (Other versions are
considered development releases, and are not uploaded to MetaCPAN.)
+Apr. 22, 2021 - Version 12.25
+
+ - JPEG XL support is now official
+ - Added read support for Medical Research Council (MRC) image files
+ - Added ability to write a number of 3gp tags in video files
+ - Added a new Sony PictureProfile value (thanks Jos Roost)
+ - Added a new Sony LensType (thanks LibRaw)
+ - Added a new Nikon LensID (thanks Niels Kristian Bech Jensen)
+ - Added a new Canon LensType
+ - Decode more GPS information from Blackvue dashcam videos
+ - Decode a couple of new NikonSettings tags (thanks Warren Hatch)
+ - Decode a few new RIFF tags
+ - Improved Validate option to add minor warning if standard XMP is missing
+ xpacket wrapper
+ - Avoid decoding some large arrays in DNG images to improve performance unless
+ the -m option is used
+ - Patched bug that could give runtime warning when trying to write an empty
+ XMP structure
+ - Fixed decoding of ImageWidth/Height for JPEG XL images
+ - Fixed problem were Microsoft Xtra tags couldn't be deleted
+
Apr. 13, 2021 - Version 12.24
- Added a new PhaseOne RawFormat value (thanks LibRaw)
@@ -16,7 +37,7 @@ Apr. 13, 2021 - Version 12.24
- Updated acdsee.config in distribution (thanks StarGeek)
- Recognize AutoCAD DXF files
- More work on experimental JUMBF read support
- - More work on experimental JXL read/write support
+ - More work on experimental JPEG XL read/write support
Apr. 1, 2021 - Version 12.23
diff --git a/MANIFEST b/MANIFEST
index e944f5a1..f54f326c 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -19,6 +19,7 @@ config_files/acdsee.config
config_files/age.config
config_files/bibble.config
config_files/convert_regions.config
+config_files/cuepointlist.config
config_files/depthmap.config
config_files/example.config
config_files/fotoware.config
@@ -104,6 +105,7 @@ html/TagNames/MOI.html
html/TagNames/MPC.html
html/TagNames/MPEG.html
html/TagNames/MPF.html
+html/TagNames/MRC.html
html/TagNames/MWG.html
html/TagNames/MXF.html
html/TagNames/MacOS.html
@@ -326,6 +328,7 @@ lib/Image/ExifTool/MOI.pm
lib/Image/ExifTool/MPC.pm
lib/Image/ExifTool/MPEG.pm
lib/Image/ExifTool/MPF.pm
+lib/Image/ExifTool/MRC.pm
lib/Image/ExifTool/MWG.pm
lib/Image/ExifTool/MXF.pm
lib/Image/ExifTool/MacOS.pm
@@ -601,6 +604,9 @@ t/JSON_2.out
t/JVC.t
t/JVC_2.out
t/JVC_3.out
+t/JXL.t
+t/JXL_2.out
+t/JXL_3.out
t/Jpeg2000.t
t/Jpeg2000_2.out
t/Jpeg2000_3.out
@@ -647,6 +653,8 @@ t/MOI.t
t/MOI_2.out
t/MP3.t
t/MP3_2.out
+t/MRC.t
+t/MRC_2.out
t/MWG.t
t/MWG_2.out
t/MWG_3.out
@@ -760,6 +768,7 @@ t/QuickTime_13.out
t/QuickTime_14.out
t/QuickTime_15.out
t/QuickTime_16.out
+t/QuickTime_17.out
t/QuickTime_2.out
t/QuickTime_3.out
t/QuickTime_4.out
@@ -1002,6 +1011,7 @@ t/images/InDesign.indd
t/images/JSON.json
t/images/JVC.jpg
t/images/JVC2.jpg
+t/images/JXL.jxl
t/images/Jpeg2000.j2c
t/images/Jpeg2000.jp2
t/images/Kodak.jpg
@@ -1013,6 +1023,7 @@ t/images/MIE.mie
t/images/MIFF.miff
t/images/MOI.moi
t/images/MP3.mp3
+t/images/MRC.mrc
t/images/MWG.jpg
t/images/MXF.mxf
t/images/MacOS.macos
diff --git a/META.json b/META.json
index f59bd9cd..7c948c52 100644
--- a/META.json
+++ b/META.json
@@ -47,6 +47,6 @@
}
},
"release_status" : "stable",
- "version" : "12.24",
+ "version" : "12.25",
"x_serialization_backend" : "JSON::PP version 4.02"
}
diff --git a/META.yml b/META.yml
index c874781e..82f09938 100644
--- a/META.yml
+++ b/META.yml
@@ -28,5 +28,5 @@ recommends:
Time::HiRes: 0
requires:
perl: 5.004
-version: 12.24
+version: 12.25
x_serialization_backend: 'JSON::PP version 4.02'
diff --git a/README b/README
index bad3817d..da3a32f6 100644
--- a/README
+++ b/README
@@ -14,47 +14,47 @@ supported by ExifTool (r = read, w = write, c = create):
File Types
------------+-------------+-------------+-------------+------------
- 360 r/w | DPX r | ITC r | O r | RAR r
- 3FR r | DR4 r/w/c | J2C r | ODP r | RAW r/w
- 3G2 r/w | DSS r | JNG r/w | ODS r | RIFF r
- 3GP r/w | DV r | JP2 r/w | ODT r | RSRC r
- A r | DVB r/w | JPEG r/w | OFR r | RTF r
- AA r | DVR-MS r | JSON r | OGG r | RW2 r/w
- AAE r | DYLIB r | JXL r | OGV r | RWL r/w
- AAX r/w | EIP r | K25 r | ONP r | RWZ r
- ACR r | EPS r/w | KDC r | OPUS r | RM r
- AFM r | EPUB r | KEY r | ORF r/w | SEQ r
- AI r/w | ERF r/w | LA r | ORI r/w | SKETCH r
- AIFF r | EXE r | LFP r | OTF r | SO r
- APE r | EXIF r/w/c | LNK r | PAC r | SR2 r/w
- ARQ r/w | EXR r | LRV r/w | PAGES r | SRF r
- ARW r/w | EXV r/w/c | M2TS r | PBM r/w | SRW r/w
- ASF r | F4A/V r/w | M4A/V r/w | PCD r | SVG r
- AVI r | FFF r/w | MACOS r | PCX r | SWF r
- AVIF r/w | FITS r | MAX r | PDB r | THM r/w
- AZW r | FLA r | MEF r/w | PDF r/w | TIFF r/w
- BMP r | FLAC r | MIE r/w/c | PEF r/w | TORRENT r
- BPG r | FLIF r/w | MIFF r | PFA r | TTC r
- BTF r | FLV r | MKA r | PFB r | TTF r
- CHM r | FPF r | MKS r | PFM r | TXT r
- COS r | FPX r | MKV r | PGF r | VCF r
- CR2 r/w | GIF r/w | MNG r/w | PGM r/w | VRD r/w/c
- CR3 r/w | GPR r/w | MOBI r | PLIST r | VSD r
- CRM r/w | GZ r | MODD r | PICT r | WAV r
- CRW r/w | HDP r/w | MOI r | PMP r | WDP r/w
- CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBP r
- CSV r | HEIC r/w | MOV r/w | PPM r/w | WEBM r
- CZI r | HEIF r/w | MP3 r | PPT r | WMA r
- DCM r | HTML r | MP4 r/w | PPTX r | WMV r
- DCP r/w | ICC r/w/c | MPC r | PS r/w | WTV r
- DCR r | ICS r | MPG r | PSB r/w | WV r
- DFONT r | IDML r | MPO r/w | PSD r/w | X3F r/w
- DIVX r | IIQ r/w | MQV r/w | PSP r | XCF r
- DJVU r | IND r/w | MRW r/w | QTIF r/w | XLS r
- DLL r | INSP r/w | MXF r | R3D r | XLSX r
- DNG r/w | INSV r | NEF r/w | RA r | XMP r/w/c
- DOC r | INX r | NRW r/w | RAF r/w | ZIP r
- DOCX r | ISO r | NUMBERS r | RAM r |
+ 360 r/w | DPX r | ITC r | NUMBERS r | RAM r
+ 3FR r | DR4 r/w/c | J2C r | O r | RAR r
+ 3G2 r/w | DSS r | JNG r/w | ODP r | RAW r/w
+ 3GP r/w | DV r | JP2 r/w | ODS r | RIFF r
+ A r | DVB r/w | JPEG r/w | ODT r | RSRC r
+ AA r | DVR-MS r | JSON r | OFR r | RTF r
+ AAE r | DYLIB r | JXL r | OGG r | RW2 r/w
+ AAX r/w | EIP r | K25 r | OGV r | RWL r/w
+ ACR r | EPS r/w | KDC r | ONP r | RWZ r
+ AFM r | EPUB r | KEY r | OPUS r | RM r
+ AI r/w | ERF r/w | LA r | ORF r/w | SEQ r
+ AIFF r | EXE r | LFP r | ORI r/w | SKETCH r
+ APE r | EXIF r/w/c | LNK r | OTF r | SO r
+ ARQ r/w | EXR r | LRV r/w | PAC r | SR2 r/w
+ ARW r/w | EXV r/w/c | M2TS r | PAGES r | SRF r
+ ASF r | F4A/V r/w | M4A/V r/w | PBM r/w | SRW r/w
+ AVI r | FFF r/w | MACOS r | PCD r | SVG r
+ AVIF r/w | FITS r | MAX r | PCX r | SWF r
+ AZW r | FLA r | MEF r/w | PDB r | THM r/w
+ BMP r | FLAC r | MIE r/w/c | PDF r/w | TIFF r/w
+ BPG r | FLIF r/w | MIFF r | PEF r/w | TORRENT r
+ BTF r | FLV r | MKA r | PFA r | TTC r
+ CHM r | FPF r | MKS r | PFB r | TTF r
+ COS r | FPX r | MKV r | PFM r | TXT r
+ CR2 r/w | GIF r/w | MNG r/w | PGF r | VCF r
+ CR3 r/w | GPR r/w | MOBI r | PGM r/w | VRD r/w/c
+ CRM r/w | GZ r | MODD r | PLIST r | VSD r
+ CRW r/w | HDP r/w | MOI r | PICT r | WAV r
+ CS1 r/w | HDR r | MOS r/w | PMP r | WDP r/w
+ CSV r | HEIC r/w | MOV r/w | PNG r/w | WEBP r
+ CZI r | HEIF r/w | MP3 r | PPM r/w | WEBM r
+ DCM r | HTML r | MP4 r/w | PPT r | WMA r
+ DCP r/w | ICC r/w/c | MPC r | PPTX r | WMV r
+ DCR r | ICS r | MPG r | PS r/w | WTV r
+ DFONT r | IDML r | MPO r/w | PSB r/w | WV r
+ DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
+ DJVU r | IND r/w | MRC r | PSP r | XCF r
+ DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
+ DNG r/w | INSV r | MXF r | R3D r | XLSX r
+ DOC r | INX r | NEF r/w | RA r | XMP r/w/c
+ DOCX r | ISO r | NRW r/w | RAF r/w | ZIP r
Meta Information
----------------------+----------------------+---------------------
@@ -106,8 +106,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.24.tar.gz | tar -xf -
- cd Image-ExifTool-12.24
+ gzip -dc Image-ExifTool-12.25.tar.gz | tar -xf -
+ cd Image-ExifTool-12.25
./exiftool t/images/ExifTool.jpg
Note: These commands extract meta information from one of the test images.
@@ -194,6 +194,7 @@ distribution package:
age.config - Calculate Age of person in photo
bibble.config - Definitions for writing Bibble XMP tags
convert_regions.config - Convert between MWG, MP and IPTC regions
+ cuepointlist.config - Extract cue points and labels as a list
depthmap.config - Extract Google DepthMap images
example.config - General example showing config features
fotoware.config - Definitions for writing Fotoware XMP tags
diff --git a/config_files/cuepointlist.config b/config_files/cuepointlist.config
new file mode 100644
index 00000000..21bc75c0
--- /dev/null
+++ b/config_files/cuepointlist.config
@@ -0,0 +1,70 @@
+#------------------------------------------------------------------------------
+# File: cuepointlist.config
+#
+# Description: ExifTool config file to generate list of cue points and labels
+# in WAV audio files
+#
+# Usage: exiftool -config cuepointlist.config -cuepointlist -b FILE
+#
+# Requires: ExifTool version 12.25 or later
+#
+# Revisions: 2021-04-20 - P. Harvey Created
+#------------------------------------------------------------------------------
+
+%Image::ExifTool::UserDefined = (
+ 'Image::ExifTool::Composite' => {
+ CuePointList => {
+ Require => {
+ 0 => 'CuePoints',
+ 1 => 'SampleRate',
+ },
+ Desire => {
+ 2 => 'CuePointLabel',
+ 3 => 'CuePointNotes',
+ 4 => 'LabeledText',
+ },
+ ValueConv => q{
+ SetByteOrder('II');
+ my (%lbl, %rgn, %rtyp, %rlbl, %note, $pos, $i);
+ # get labels if available
+ for ($i=1; defined $val[2]; ++$i) {
+ $lbl{$1} = $2 if $val[2] =~ /^(\d+) (.*)/ and length $2;
+ $val[2] = $self->GetValue("CuePointLabel ($i)");
+ }
+ # get notes if available
+ for ($i=1; defined $val[3]; ++$i) {
+ $note{$1} = $2 if $val[3] =~ /^(\d+) (.*)/ and length $2;
+ $val[3] = $self->GetValue("CuePointNotes ($i)");
+ }
+ # get regions if available
+ for ($i=1; defined $val[4]; ++$i) {
+ if ($val[4] =~ /^(\d+) (\d+) '(.*)' \d+ \d+ \d+ \d+ (.*)/) {
+ $rgn{$1} = $2;
+ $rtyp{$1} = $3;
+ $rlbl{$1} = $4;
+ }
+ $val[4] = $self->GetValue("LabeledText ($i)");
+ }
+ my $buff = "Cue\tStart\tEnd\tLabel\tPurpose\tText\tNotes\n";
+ for ($pos=4; $pos+24<=length(${$val[0]}); $pos+=24) {
+ my $n = Get32u($val[0], $pos);
+ my $start = Get32u($val[0], $pos + 4);
+ my (@lbl, $lbl);
+ push @lbl, $lbl{$n} if defined $lbl{$n};
+ push @lbl, $rlbl{$n} if defined $rlbl{$n};
+ push @lbl, '-', $note{$n} if defined $note{$n};
+ my $lbl = join ' ', @lbl;
+ $buff .= sprintf("%d\t%.3f\t%.3f\t%s\t%s\t%s\t%s\n",
+ $n, $start/$val[1], ($start+($rgn{$n}||0))/$val[1],
+ defined($lbl{$n}) ? $lbl{$n} : '',
+ defined($rtyp{$n}) ? $rtyp{$n} : '',
+ defined($rlbl{$n}) ? $rlbl{$n} : '',
+ defined($note{$n}) ? $note{$n} : '');
+ }
+ return $buff;
+ },
+ },
+ },
+);
+
+1; # end \ No newline at end of file
diff --git a/exiftool b/exiftool
index f6a4caea..da76e2e4 100755
--- a/exiftool
+++ b/exiftool
@@ -10,7 +10,7 @@
use strict;
require 5.004;
-my $version = '12.24';
+my $version = '12.25';
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
my $exeDir;
@@ -4469,47 +4469,47 @@ supported by ExifTool (r = read, w = write, c = create):
File Types
------------+-------------+-------------+-------------+------------
- 360 r/w | DPX r | ITC r | O r | RAR r
- 3FR r | DR4 r/w/c | J2C r | ODP r | RAW r/w
- 3G2 r/w | DSS r | JNG r/w | ODS r | RIFF r
- 3GP r/w | DV r | JP2 r/w | ODT r | RSRC r
- A r | DVB r/w | JPEG r/w | OFR r | RTF r
- AA r | DVR-MS r | JSON r | OGG r | RW2 r/w
- AAE r | DYLIB r | JXL r | OGV r | RWL r/w
- AAX r/w | EIP r | K25 r | ONP r | RWZ r
- ACR r | EPS r/w | KDC r | OPUS r | RM r
- AFM r | EPUB r | KEY r | ORF r/w | SEQ r
- AI r/w | ERF r/w | LA r | ORI r/w | SKETCH r
- AIFF r | EXE r | LFP r | OTF r | SO r
- APE r | EXIF r/w/c | LNK r | PAC r | SR2 r/w
- ARQ r/w | EXR r | LRV r/w | PAGES r | SRF r
- ARW r/w | EXV r/w/c | M2TS r | PBM r/w | SRW r/w
- ASF r | F4A/V r/w | M4A/V r/w | PCD r | SVG r
- AVI r | FFF r/w | MACOS r | PCX r | SWF r
- AVIF r/w | FITS r | MAX r | PDB r | THM r/w
- AZW r | FLA r | MEF r/w | PDF r/w | TIFF r/w
- BMP r | FLAC r | MIE r/w/c | PEF r/w | TORRENT r
- BPG r | FLIF r/w | MIFF r | PFA r | TTC r
- BTF r | FLV r | MKA r | PFB r | TTF r
- CHM r | FPF r | MKS r | PFM r | TXT r
- COS r | FPX r | MKV r | PGF r | VCF r
- CR2 r/w | GIF r/w | MNG r/w | PGM r/w | VRD r/w/c
- CR3 r/w | GPR r/w | MOBI r | PLIST r | VSD r
- CRM r/w | GZ r | MODD r | PICT r | WAV r
- CRW r/w | HDP r/w | MOI r | PMP r | WDP r/w
- CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBP r
- CSV r | HEIC r/w | MOV r/w | PPM r/w | WEBM r
- CZI r | HEIF r/w | MP3 r | PPT r | WMA r
- DCM r | HTML r | MP4 r/w | PPTX r | WMV r
- DCP r/w | ICC r/w/c | MPC r | PS r/w | WTV r
- DCR r | ICS r | MPG r | PSB r/w | WV r
- DFONT r | IDML r | MPO r/w | PSD r/w | X3F r/w
- DIVX r | IIQ r/w | MQV r/w | PSP r | XCF r
- DJVU r | IND r/w | MRW r/w | QTIF r/w | XLS r
- DLL r | INSP r/w | MXF r | R3D r | XLSX r
- DNG r/w | INSV r | NEF r/w | RA r | XMP r/w/c
- DOC r | INX r | NRW r/w | RAF r/w | ZIP r
- DOCX r | ISO r | NUMBERS r | RAM r |
+ 360 r/w | DPX r | ITC r | NUMBERS r | RAM r
+ 3FR r | DR4 r/w/c | J2C r | O r | RAR r
+ 3G2 r/w | DSS r | JNG r/w | ODP r | RAW r/w
+ 3GP r/w | DV r | JP2 r/w | ODS r | RIFF r
+ A r | DVB r/w | JPEG r/w | ODT r | RSRC r
+ AA r | DVR-MS r | JSON r | OFR r | RTF r
+ AAE r | DYLIB r | JXL r | OGG r | RW2 r/w
+ AAX r/w | EIP r | K25 r | OGV r | RWL r/w
+ ACR r | EPS r/w | KDC r | ONP r | RWZ r
+ AFM r | EPUB r | KEY r | OPUS r | RM r
+ AI r/w | ERF r/w | LA r | ORF r/w | SEQ r
+ AIFF r | EXE r | LFP r | ORI r/w | SKETCH r
+ APE r | EXIF r/w/c | LNK r | OTF r | SO r
+ ARQ r/w | EXR r | LRV r/w | PAC r | SR2 r/w
+ ARW r/w | EXV r/w/c | M2TS r | PAGES r | SRF r
+ ASF r | F4A/V r/w | M4A/V r/w | PBM r/w | SRW r/w
+ AVI r | FFF r/w | MACOS r | PCD r | SVG r
+ AVIF r/w | FITS r | MAX r | PCX r | SWF r
+ AZW r | FLA r | MEF r/w | PDB r | THM r/w
+ BMP r | FLAC r | MIE r/w/c | PDF r/w | TIFF r/w
+ BPG r | FLIF r/w | MIFF r | PEF r/w | TORRENT r
+ BTF r | FLV r | MKA r | PFA r | TTC r
+ CHM r | FPF r | MKS r | PFB r | TTF r
+ COS r | FPX r | MKV r | PFM r | TXT r
+ CR2 r/w | GIF r/w | MNG r/w | PGF r | VCF r
+ CR3 r/w | GPR r/w | MOBI r | PGM r/w | VRD r/w/c
+ CRM r/w | GZ r | MODD r | PLIST r | VSD r
+ CRW r/w | HDP r/w | MOI r | PICT r | WAV r
+ CS1 r/w | HDR r | MOS r/w | PMP r | WDP r/w
+ CSV r | HEIC r/w | MOV r/w | PNG r/w | WEBP r
+ CZI r | HEIF r/w | MP3 r | PPM r/w | WEBM r
+ DCM r | HTML r | MP4 r/w | PPT r | WMA r
+ DCP r/w | ICC r/w/c | MPC r | PPTX r | WMV r
+ DCR r | ICS r | MPG r | PS r/w | WTV r
+ DFONT r | IDML r | MPO r/w | PSB r/w | WV r
+ DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
+ DJVU r | IND r/w | MRC r | PSP r | XCF r
+ DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
+ DNG r/w | INSV r | MXF r | R3D r | XLSX r
+ DOC r | INX r | NEF r/w | RA r | XMP r/w/c
+ DOCX r | ISO r | NRW r/w | RAF r/w | ZIP r
Meta Information
----------------------+----------------------+---------------------
@@ -5393,7 +5393,7 @@ with this command:
produces output like this:
- -- Generated by ExifTool 12.24 --
+ -- Generated by ExifTool 12.25 --
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
diff --git a/html/ExifTool.html b/html/ExifTool.html
index 3b71f3b8..19777eda 100644
--- a/html/ExifTool.html
+++ b/html/ExifTool.html
@@ -380,6 +380,8 @@ while processing the image</td></tr>
my $exifTool = <b>new</b> Image::ExifTool;
</pre></td></tr></table></blockquote>
+<p>One ExifTool object may be used to process many files, so creating multiple
+ExifTool objects usually is not necessary.</p>
<p>Note that ExifTool uses AUTOLOAD to load non-member methods, so any class
using Image::ExifTool as a base class must define an AUTOLOAD which calls
Image::ExifTool::DoAutoLoad(). ie)</p>
diff --git a/html/ExifTool.pdf b/html/ExifTool.pdf
index 82f1a631..dcc0d05a 100644
--- a/html/ExifTool.pdf
+++ b/html/ExifTool.pdf
@@ -12,7 +12,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 1)Tj
+( -- Image::ExifTool 12.25 -- 1)Tj
/TT4 1 Tf
0 -1.6333 TD
(EXIFTOOL\(1\) User Contributed Perl Documentation EXIFTOOL\(1\))Tj
@@ -135,33 +135,33 @@ T*
0 -1.1 TD
( ------------+-------------+-------------+-------------+------------)Tj
T*
-( 360 r/w | DPX r | ITC r | O r | RAR r)Tj
+( 360 r/w | DPX r | ITC r | NUMBERS r | RAM r)Tj
T*
-( 3FR r | DR4 r/w/c | J2C r | ODP r | RAW r/w)Tj
+( 3FR r | DR4 r/w/c | J2C r | O r | RAR r)Tj
T*
-( 3G2 r/w | DSS r | JNG r/w | ODS r | RIFF r)Tj
+( 3G2 r/w | DSS r | JNG r/w | ODP r | RAW r/w)Tj
T*
-( 3GP r/w | DV r | JP2 r/w | ODT r | RSRC r)Tj
+( 3GP r/w | DV r | JP2 r/w | ODS r | RIFF r)Tj
T*
-( A r | DVB r/w | JPEG r/w | OFR r | RTF r)Tj
+( A r | DVB r/w | JPEG r/w | ODT r | RSRC r)Tj
T*
-( AA r | DVR-MS r | JSON r | OGG r | RW2 r/w)Tj
+( AA r | DVR-MS r | JSON r | OFR r | RTF r)Tj
T*
-( AAE r | DYLIB r | JXL r | OGV r | RWL r/w)Tj
+( AAE r | DYLIB r | JXL r | OGG r | RW2 r/w)Tj
T*
-( AAX r/w | EIP r | K25 r | ONP r | RWZ r)Tj
+( AAX r/w | EIP r | K25 r | OGV r | RWL r/w)Tj
T*
-( ACR r | EPS r/w | KDC r | OPUS r | RM r)Tj
+( ACR r | EPS r/w | KDC r | ONP r | RWZ r)Tj
T*
-( AFM r | EPUB r | KEY r | ORF r/w | SEQ r)Tj
+( AFM r | EPUB r | KEY r | OPUS r | RM r)Tj
T*
-( AI r/w | ERF r/w | LA r | ORI r/w | SKETCH r)Tj
+( AI r/w | ERF r/w | LA r | ORF r/w | SEQ r)Tj
T*
-( AIFF r | EXE r | LFP r | OTF r | SO r)Tj
+( AIFF r | EXE r | LFP r | ORI r/w | SKETCH r)Tj
T*
-( APE r | EXIF r/w/c | LNK r | PAC r | SR2 r/w)Tj
+( APE r | EXIF r/w/c | LNK r | OTF r | SO r)Tj
T*
-( ARQ r/w | EXR r | LRV r/w | PAGES r | SRF r)Tj
+( ARQ r/w | EXR r | LRV r/w | PAC r | SR2 r/w)Tj
ET
endstream
endobj
@@ -179,7 +179,7 @@ endobj
endobj
9 0 obj
<<
-/Length 5298
+/Length 5306
>>
stream
BT
@@ -189,62 +189,62 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 2)Tj
+( -- Image::ExifTool 12.25 -- 2)Tj
/TT4 1 Tf
0 -1.6333 TD
-( ARW r/w | EXV r/w/c | M2TS r | PBM r/w | SRW r/w)Tj
+( ARW r/w | EXV r/w/c | M2TS r | PAGES r | SRF r)Tj
0 -1.1 TD
-( ASF r | F4A/V r/w | M4A/V r/w | PCD r | SVG r)Tj
+( ASF r | F4A/V r/w | M4A/V r/w | PBM r/w | SRW r/w)Tj
T*
-( AVI r | FFF r/w | MACOS r | PCX r | SWF r)Tj
+( AVI r | FFF r/w | MACOS r | PCD r | SVG r)Tj
T*
-( AVIF r/w | FITS r | MAX r | PDB r | THM r/w)Tj
+( AVIF r/w | FITS r | MAX r | PCX r | SWF r)Tj
T*
-( AZW r | FLA r | MEF r/w | PDF r/w | TIFF r/w)Tj
+( AZW r | FLA r | MEF r/w | PDB r | THM r/w)Tj
T*
-( BMP r | FLAC r | MIE r/w/c | PEF r/w | TORRENT r)Tj
+( BMP r | FLAC r | MIE r/w/c | PDF r/w | TIFF r/w)Tj
T*
-( BPG r | FLIF r/w | MIFF r | PFA r | TTC r)Tj
+( BPG r | FLIF r/w | MIFF r | PEF r/w | TORRENT r)Tj
T*
-( BTF r | FLV r | MKA r | PFB r | TTF r)Tj
+( BTF r | FLV r | MKA r | PFA r | TTC r)Tj
T*
-( CHM r | FPF r | MKS r | PFM r | TXT r)Tj
+( CHM r | FPF r | MKS r | PFB r | TTF r)Tj
T*
-( COS r | FPX r | MKV r | PGF r | VCF r)Tj
+( COS r | FPX r | MKV r | PFM r | TXT r)Tj
T*
-( CR2 r/w | GIF r/w | MNG r/w | PGM r/w | VRD r/w/c)Tj
+( CR2 r/w | GIF r/w | MNG r/w | PGF r | VCF r)Tj
T*
-( CR3 r/w | GPR r/w | MOBI r | PLIST r | VSD r)Tj
+( CR3 r/w | GPR r/w | MOBI r | PGM r/w | VRD r/w/c)Tj
T*
-( CRM r/w | GZ r | MODD r | PICT r | WAV r)Tj
+( CRM r/w | GZ r | MODD r | PLIST r | VSD r)Tj
T*
-( CRW r/w | HDP r/w | MOI r | PMP r | WDP r/w)Tj
+( CRW r/w | HDP r/w | MOI r | PICT r | WAV r)Tj
T*
-( CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBP r)Tj
+( CS1 r/w | HDR r | MOS r/w | PMP r | WDP r/w)Tj
T*
-( CSV r | HEIC r/w | MOV r/w | PPM r/w | WEBM r)Tj
+( CSV r | HEIC r/w | MOV r/w | PNG r/w | WEBP r)Tj
T*
-( CZI r | HEIF r/w | MP3 r | PPT r | WMA r)Tj
+( CZI r | HEIF r/w | MP3 r | PPM r/w | WEBM r)Tj
T*
-( DCM r | HTML r | MP4 r/w | PPTX r | WMV r)Tj
+( DCM r | HTML r | MP4 r/w | PPT r | WMA r)Tj
T*
-( DCP r/w | ICC r/w/c | MPC r | PS r/w | WTV r)Tj
+( DCP r/w | ICC r/w/c | MPC r | PPTX r | WMV r)Tj
T*
-( DCR r | ICS r | MPG r | PSB r/w | WV r)Tj
+( DCR r | ICS r | MPG r | PS r/w | WTV r)Tj
T*
-( DFONT r | IDML r | MPO r/w | PSD r/w | X3F r/w)Tj
+( DFONT r | IDML r | MPO r/w | PSB r/w | WV r)Tj
T*
-( DIVX r | IIQ r/w | MQV r/w | PSP r | XCF r)Tj
+( DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w)Tj
T*
-( DJVU r | IND r/w | MRW r/w | QTIF r/w | XLS r)Tj
+( DJVU r | IND r/w | MRC r | PSP r | XCF r)Tj
T*
-( DLL r | INSP r/w | MXF r | R3D r | XLSX r)Tj
+( DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r)Tj
T*
-( DNG r/w | INSV r | NEF r/w | RA r | XMP r/w/c)Tj
+( DNG r/w | INSV r | MXF r | R3D r | XLSX r)Tj
T*
-( DOC r | INX r | NRW r/w | RAF r/w | ZIP r)Tj
+( DOC r | INX r | NEF r/w | RA r | XMP r/w/c)Tj
T*
-( DOCX r | ISO r | NUMBERS r | RAM r |)Tj
+( DOCX r | ISO r | NRW r/w | RAF r/w | ZIP r)Tj
0 -2.2 TD
( Meta Information)Tj
0 -1.1 TD
@@ -374,7 +374,7 @@ endobj
endobj
12 0 obj
<<
-/Length 4674
+/Length 4706
>>
stream
BT
@@ -384,7 +384,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 3)Tj
+( -- Image::ExifTool 12.25 -- 3)Tj
/TT4 1 Tf
0 -1.6333 TD
( be exported with the ":Public" export list.)Tj
@@ -441,6 +441,10 @@ T*
0 -2.2 TD
( $exifTool = new Image::ExifTool;)Tj
T*
+( One ExifTool object may be used to process many files, so creating)Tj
+0 -1.1 TD
+( multiple ExifTool objects usually is not necessary.)Tj
+0 -2.2 TD
( Note that ExifTool uses AUTOLOAD to load non-member methods, so any)Tj
0 -1.1 TD
( class using Image::ExifTool as a base class must define an AUTOLOAD)Tj
@@ -588,10 +592,6 @@ T*
( Below is an explanation of how the "ImageInfo" function arguments)Tj
0 -1.1 TD
( are interpreted:)Tj
-0 -2.2 TD
-( ExifTool ref)Tj
-0 -1.1 TD
-( "ImageInfo" may be called with an ExifTool object if desired.)Tj
ET
endstream
endobj
@@ -609,7 +609,7 @@ endobj
endobj
15 0 obj
<<
-/Length 4877
+/Length 4732
>>
stream
BT
@@ -619,11 +619,15 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 4)Tj
+( -- Image::ExifTool 12.25 -- 4)Tj
/TT4 1 Tf
-0 -1.6333 TD
-( Advantages of using the object-oriented form are that options)Tj
+0 -2.7333 TD
+( ExifTool ref)Tj
0 -1.1 TD
+( "ImageInfo" may be called with an ExifTool object if desired.)Tj
+T*
+( Advantages of using the object-oriented form are that options)Tj
+T*
( may be set before calling "ImageInfo", and the object may be)Tj
T*
( used afterward to access member functions. Must be the first)Tj
@@ -737,12 +741,6 @@ T*
( information.)Tj
0 -2.2 TD
( There will be 1:1 correspondence between the requested tags and)Tj
-0 -1.1 TD
-( the returned tag keys only if the "Duplicates" option is 0 and)Tj
-T*
-( "Sort" is 'Input'. \(With "Duplicates" enabled, there may be)Tj
-T*
-( more entries in the returned list of tag keys, and with other)Tj
ET
endstream
endobj
@@ -760,7 +758,7 @@ endobj
endobj
18 0 obj
<<
-/Length 4661
+/Length 4432
>>
stream
BT
@@ -770,11 +768,17 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 5)Tj
+( -- Image::ExifTool 12.25 -- 5)Tj
/TT4 1 Tf
0 -1.6333 TD
-( "Sort" settings the entries may not be in the same order as)Tj
+( the returned tag keys only if the "Duplicates" option is 0 and)Tj
0 -1.1 TD
+( "Sort" is 'Input'. \(With "Duplicates" enabled, there may be)Tj
+T*
+( more entries in the returned list of tag keys, and with other)Tj
+T*
+( "Sort" settings the entries may not be in the same order as)Tj
+T*
( requested.\) If a requested tag doesn't exist, a tag key is)Tj
T*
( still generated, but the tag value is undefined.)Tj
@@ -892,7 +896,36 @@ T*
( Perl wide characters are not used. See "CHARACTER ENCODINGS" for)Tj
T*
( details about the encodings. By default, most returned values are)Tj
-T*
+ET
+endstream
+endobj
+19 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/TT2 4 0 R
+/TT4 5 0 R
+>>
+/ExtGState <<
+/GS1 6 0 R
+>>
+>>
+endobj
+21 0 obj
+<<
+/Length 4207
+>>
+stream
+BT
+/TT2 1 Tf
+10 0 0 10 29 806.3333 Tm
+0 g
+/GS1 gs
+0 Tc
+0 Tw
+( -- Image::ExifTool 12.25 -- 6)Tj
+/TT4 1 Tf
+0 -1.6333 TD
( encoded in UTF-8. For these, _)Tj
24.6 0 TD
(E_)Tj
@@ -938,36 +971,7 @@ T*
(\) may be used to)Tj
-36.6 -1.1 TD
( convert to a sequence of logical Perl characters.)Tj
-ET
-endstream
-endobj
-19 0 obj
-<<
-/ProcSet [/PDF /Text ]
-/Font <<
-/TT2 4 0 R
-/TT4 5 0 R
->>
-/ExtGState <<
-/GS1 6 0 R
->>
->>
-endobj
-21 0 obj
-<<
-/Length 3828
->>
-stream
-BT
-/TT2 1 Tf
-10 0 0 10 29 806.3333 Tm
-0 g
-/GS1 gs
-0 Tc
-0 Tw
-( -- Image::ExifTool 12.24 -- 6)Tj
-/TT4 1 Tf
-0 -1.6333 TD
+0 -2.2 TD
( As well as tags representing information extracted from the image,)Tj
0 -1.1 TD
( the following Extra tags generated by ExifTool may be returned:)Tj
@@ -1083,10 +1087,6 @@ T*
( Flag to extract some directories \(mentioned in the ExifTool tag)Tj
T*
( name documentation\) as a block. Setting this to a value of 2)Tj
-T*
-( also prevents parsing the block to extract tags contained)Tj
-T*
-( within.)Tj
ET
endstream
endobj
@@ -1104,7 +1104,7 @@ endobj
endobj
24 0 obj
<<
-/Length 4742
+/Length 4699
>>
stream
BT
@@ -1114,9 +1114,13 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 7)Tj
+( -- Image::ExifTool 12.25 -- 7)Tj
/TT4 1 Tf
0 -1.6333 TD
+( also prevents parsing the block to extract tags contained)Tj
+0 -1.1 TD
+( within.)Tj
+0 -2.2 TD
( ByteOrder)Tj
0 -1.1 TD
( The byte order for newly created EXIF segments when writing.)Tj
@@ -1236,10 +1240,6 @@ T*
( CharsetIPTC)Tj
0 -1.1 TD
( Fallback internal IPTC character set to assume if IPTC)Tj
-T*
-( information contains no CodedCharacterSet tag. Possible values)Tj
-T*
-( are the same as the "Charset" option. Default is 'Latin'.)Tj
ET
endstream
endobj
@@ -1257,7 +1257,7 @@ endobj
endobj
27 0 obj
<<
-/Length 4413
+/Length 4512
>>
stream
BT
@@ -1267,9 +1267,13 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 8)Tj
+( -- Image::ExifTool 12.25 -- 8)Tj
/TT4 1 Tf
0 -1.6333 TD
+( information contains no CodedCharacterSet tag. Possible values)Tj
+0 -1.1 TD
+( are the same as the "Charset" option. Default is 'Latin'.)Tj
+0 -2.2 TD
( Note that this option affects some types of information when)Tj
0 -1.1 TD
( reading/writing the file and other types when getting/setting)Tj
@@ -1383,10 +1387,6 @@ T*
( Note: To avoid loss of precision, the default coordinate)Tj
0 -1.1 TD
( format is different when copying tags with)Tj
-T*
-( "SetNewValuesFromFile".)Tj
-0 -2.2 TD
-( DateFormat)Tj
ET
endstream
endobj
@@ -1404,7 +1404,7 @@ endobj
endobj
30 0 obj
<<
-/Length 4970
+/Length 4801
>>
stream
BT
@@ -1414,11 +1414,15 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 9)Tj
+( -- Image::ExifTool 12.25 -- 9)Tj
/TT4 1 Tf
0 -1.6333 TD
-( Format for printing date/time values. See "strftime" in the)Tj
+( "SetNewValuesFromFile".)Tj
+0 -2.2 TD
+( DateFormat)Tj
0 -1.1 TD
+( Format for printing date/time values. See "strftime" in the)Tj
+T*
( POSIX package for details about the format string. If date can)Tj
T*
( not be converted, value is left unchanged unless the StrictDate)Tj
@@ -1536,12 +1540,6 @@ T*
( also avoid extracting any EXIF MakerNote information, and will)Tj
T*
( stop parsing at the IDAT chunk of PNG images. \(By the PNG)Tj
-T*
-( specification, metadata is allowed after IDAT, but ExifTool)Tj
-T*
-( always writes it before because some utilities will ignore it)Tj
-T*
-( otherwise.\) When set to 3 or higher, only pseudo system tags)Tj
ET
endstream
endobj
@@ -1559,7 +1557,7 @@ endobj
endobj
33 0 obj
<<
-/Length 4500
+/Length 4631
>>
stream
BT
@@ -1569,11 +1567,17 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 10)Tj
+( -- Image::ExifTool 12.25 -- 10)Tj
/TT4 1 Tf
0 -1.6333 TD
-( and FileType are generated. For 3, the file header is read to)Tj
+( specification, metadata is allowed after IDAT, but ExifTool)Tj
0 -1.1 TD
+( always writes it before because some utilities will ignore it)Tj
+T*
+( otherwise.\) When set to 3 or higher, only pseudo system tags)Tj
+T*
+( and FileType are generated. For 3, the file header is read to)Tj
+T*
( provide an educated guess at FileType. For 4, the file is not)Tj
T*
( read at all and FileType is determined based on the file's)Tj
@@ -1687,10 +1691,6 @@ T*
( ignored if the number of acquired satellites is less than this.)Tj
T*
( Default is undef.)Tj
-0 -2.2 TD
-( GeoSpeedRef)Tj
-0 -1.1 TD
-( Reference units for writing GPSSpeed when geotagging:)Tj
ET
endstream
endobj
@@ -1708,7 +1708,7 @@ endobj
endobj
36 0 obj
<<
-/Length 4721
+/Length 4588
>>
stream
BT
@@ -1718,9 +1718,13 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 11)Tj
+( -- Image::ExifTool 12.25 -- 11)Tj
/TT4 1 Tf
0 -1.6333 TD
+( GeoSpeedRef)Tj
+0 -1.1 TD
+( Reference units for writing GPSSpeed when geotagging:)Tj
+0 -2.2 TD
( 'K', 'k' or 'km/h' - km/h)Tj
0 -1.1 TD
( 'M', 'm' or 'mph' - mph)Tj
@@ -1878,12 +1882,6 @@ T*
( list.)Tj
0 -2.2 TD
( ListJoin)Tj
-0 -1.1 TD
-( Separator used to join the PrintConv value of multi-item List-)Tj
-T*
-( type tags into a single string. If not defined, multi-item)Tj
-T*
-( lists are returned as a list reference. Does not affect)Tj
ET
endstream
endobj
@@ -1901,7 +1899,7 @@ endobj
endobj
41 0 obj
<<
-/Length 4308
+/Length 4478
>>
stream
BT
@@ -1911,9 +1909,15 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 12)Tj
+( -- Image::ExifTool 12.25 -- 12)Tj
/TT4 1 Tf
0 -1.6333 TD
+( Separator used to join the PrintConv value of multi-item List-)Tj
+0 -1.1 TD
+( type tags into a single string. If not defined, multi-item)Tj
+T*
+( lists are returned as a list reference. Does not affect)Tj
+T*
( ValueConv values. Default is ', '.)Tj
0 -2.2 TD
( ListSplit)Tj
@@ -2025,10 +2029,6 @@ T*
( autodetection of incorrect time-zero offsets in QuickTime)Tj
T*
( date/time values, and enforces a time zero of 1904 as per the)Tj
-T*
-( QuickTime specification.)Tj
-0 -2.2 TD
-( RequestAll)Tj
ET
endstream
endobj
@@ -2046,7 +2046,7 @@ endobj
endobj
44 0 obj
<<
-/Length 4459
+/Length 4396
>>
stream
BT
@@ -2056,11 +2056,15 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 13)Tj
+( -- Image::ExifTool 12.25 -- 13)Tj
/TT4 1 Tf
0 -1.6333 TD
-( Flag to request all tags to be extracted. This causes some)Tj
+( QuickTime specification.)Tj
+0 -2.2 TD
+( RequestAll)Tj
0 -1.1 TD
+( Flag to request all tags to be extracted. This causes some)Tj
+T*
( tags to be generated which normally would not be unless)Tj
T*
( specifically requested \(by passing the tag name to "ImageInfo")Tj
@@ -2170,10 +2174,6 @@ T*
( the DateFormat option set, the value is written only if)Tj
T*
( POSIX::strptime or Time::Piece is available and can)Tj
-T*
-( successfully convert the value.)Tj
-0 -2.2 TD
-( For PNG CreationTime, a setting of 1 has the additional effect)Tj
ET
endstream
endobj
@@ -2191,7 +2191,7 @@ endobj
endobj
47 0 obj
<<
-/Length 4325
+/Length 4255
>>
stream
BT
@@ -2201,11 +2201,15 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 14)Tj
+( -- Image::ExifTool 12.25 -- 14)Tj
/TT4 1 Tf
0 -1.6333 TD
-( of causing the date/time to be reformatted according to PNG 1.2)Tj
+( successfully convert the value.)Tj
+0 -2.2 TD
+( For PNG CreationTime, a setting of 1 has the additional effect)Tj
0 -1.1 TD
+( of causing the date/time to be reformatted according to PNG 1.2)Tj
+T*
( recommendation \(RFC-1123\) when writing, and a warning to be)Tj
T*
( issued for any non-standard value when reading \(but note that)Tj
@@ -2325,12 +2329,6 @@ T*
( names\).)Tj
0 -2.2 TD
( Validate)Tj
-0 -1.1 TD
-( Flag to perform extra validation metadata checks when reading,)Tj
-T*
-( causing extra warnings to be generated if problems are found.)Tj
-T*
-( Default is undef.)Tj
ET
endstream
endobj
@@ -2348,7 +2346,7 @@ endobj
endobj
50 0 obj
<<
-/Length 4218
+/Length 4192
>>
stream
BT
@@ -2358,9 +2356,15 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 15)Tj
+( -- Image::ExifTool 12.25 -- 15)Tj
/TT4 1 Tf
-0 -2.7333 TD
+0 -1.6333 TD
+( Flag to perform extra validation metadata checks when reading,)Tj
+0 -1.1 TD
+( causing extra warnings to be generated if problems are found.)Tj
+T*
+( Default is undef.)Tj
+0 -2.2 TD
( Verbose)Tj
0 -1.1 TD
( Print verbose messages to file specified by TextOut option.)Tj
@@ -2510,12 +2514,6 @@ T*
( Composite, ExtendedXMP, ExtractEmbedded, FastScan, FixBase,)Tj
T*
( HtmlDump, HtmlDumpBase, IgnoreMinorErrors, Lang, LargeFileSupport,)Tj
-T*
-( MakerNotes, MDItemTags, NoPDFList, Password, QuickTimeUTC \(enforced)Tj
-T*
-( 1904 time zero\), RequestAll, RequestTags, SaveFormat, SavePath,)Tj
-T*
-( ScanForXMP, Struct, TextOut, Unknown, Verbose, XAttrTags and)Tj
ET
endstream
endobj
@@ -2533,7 +2531,7 @@ endobj
endobj
53 0 obj
<<
-/Length 4168
+/Length 4291
>>
stream
BT
@@ -2543,9 +2541,15 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 16)Tj
+( -- Image::ExifTool 12.25 -- 16)Tj
/TT4 1 Tf
0 -1.6333 TD
+( MakerNotes, MDItemTags, NoPDFList, Password, QuickTimeUTC \(enforced)Tj
+0 -1.1 TD
+( 1904 time zero\), RequestAll, RequestTags, SaveFormat, SavePath,)Tj
+T*
+( ScanForXMP, Struct, TextOut, Unknown, Verbose, XAttrTags and)Tj
+T*
( XMPAutoConv.)Tj
0 -2.2 TD
( Return Value:)Tj
@@ -2679,10 +2683,6 @@ T*
( # create XMP data file from scratch)Tj
0 -1.1 TD
( $exifTool->WriteInfo\(undef, $dstfile, 'XMP'\);)Tj
-0 -2.2 TD
-( # overwrite file \(you do have backups, right?\))Tj
-0 -1.1 TD
-( $exifTool->WriteInfo\($srcfile\);)Tj
ET
endstream
endobj
@@ -2700,7 +2700,7 @@ endobj
endobj
56 0 obj
<<
-/Length 4009
+/Length 3972
>>
stream
BT
@@ -2710,9 +2710,13 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 17)Tj
+( -- Image::ExifTool 12.25 -- 17)Tj
/TT4 1 Tf
0 -2.7333 TD
+( # overwrite file \(you do have backups, right?\))Tj
+0 -1.1 TD
+( $exifTool->WriteInfo\($srcfile\);)Tj
+0 -2.2 TD
( Inputs:)Tj
0 -1.1 TD
( 0\) ExifTool object reference)Tj
@@ -2832,10 +2836,6 @@ T*
( Inputs:)Tj
0 -1.1 TD
( 0\) ExifTool object reference)Tj
-0 -2.2 TD
-( 1\) [optional] Information hash reference or tag list reference)Tj
-T*
-( 2\) [optional] Sort order \('Input', 'File', 'Tag', 'Descr' or)Tj
ET
endstream
endobj
@@ -2853,7 +2853,7 @@ endobj
endobj
59 0 obj
<<
-/Length 4352
+/Length 4344
>>
stream
BT
@@ -2863,9 +2863,13 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 18)Tj
+( -- Image::ExifTool 12.25 -- 18)Tj
/TT4 1 Tf
0 -1.6333 TD
+( 1\) [optional] Information hash reference or tag list reference)Tj
+0 -2.2 TD
+( 2\) [optional] Sort order \('Input', 'File', 'Tag', 'Descr' or)Tj
+0 -1.1 TD
( 'Group#'\))Tj
0 -2.2 TD
( 3\) [optional] Secondary sort order \('File', 'Tag' or 'Descr'\))Tj
@@ -3039,10 +3043,6 @@ T*
( ValueConv value is always a list reference. But in list context,)Tj
T*
( "GetValue" always returns the list itself.)Tj
-0 -2.2 TD
-( Note that "GetValue" requires a case-sensitive tag key as an argument.)Tj
-0 -1.1 TD
-( To retrieve tag information based on a case-insensitive tag name \(with)Tj
ET
endstream
endobj
@@ -3060,7 +3060,7 @@ endobj
endobj
62 0 obj
<<
-/Length 3961
+/Length 4040
>>
stream
BT
@@ -3070,9 +3070,13 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 19)Tj
+( -- Image::ExifTool 12.25 -- 19)Tj
/TT4 1 Tf
-0 -1.6333 TD
+0 -2.7333 TD
+( Note that "GetValue" requires a case-sensitive tag key as an argument.)Tj
+0 -1.1 TD
+( To retrieve tag information based on a case-insensitive tag name \(with)Tj
+T*
( an optional group specifier\), use "GetInfo" instead.)Tj
0 -2.2 TD
( # PrintConv example)Tj
@@ -3202,10 +3206,6 @@ T*
( For list-type tags \(like Keywords\), either call repeatedly with the)Tj
0 -1.1 TD
( same tag name for each value, or call with a reference to the list of)Tj
-T*
-( values.)Tj
-0 -2.2 TD
-( # set a new value for a tag \(errors go to STDERR\))Tj
ET
endstream
endobj
@@ -3223,7 +3223,7 @@ endobj
endobj
65 0 obj
<<
-/Length 4027
+/Length 3872
>>
stream
BT
@@ -3233,9 +3233,13 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 20)Tj
+( -- Image::ExifTool 12.25 -- 20)Tj
/TT4 1 Tf
0 -1.6333 TD
+( values.)Tj
+0 -2.2 TD
+( # set a new value for a tag \(errors go to STDERR\))Tj
+0 -1.1 TD
( $success = $exifTool->SetNewValue\($tag, $value\);)Tj
0 -2.2 TD
( # set a new value and capture any error message)Tj
@@ -3335,12 +3339,6 @@ T*
( 0\) ExifTool object reference)Tj
0 -2.2 TD
( 1\) [optional] Tag key or tag name, or undef to clear all new)Tj
-0 -1.1 TD
-( values. The tag name may be prefixed by one or more family 0, 1 or)Tj
-T*
-( 2 group names with optional leading family numbers, separated by)Tj
-T*
-( colons \(eg. 'EXIF:Artist', 'XMP:Time:*'\), which is equivalent to)Tj
ET
endstream
endobj
@@ -3358,7 +3356,7 @@ endobj
endobj
68 0 obj
<<
-/Length 4639
+/Length 4657
>>
stream
BT
@@ -3368,11 +3366,17 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 21)Tj
+( -- Image::ExifTool 12.25 -- 21)Tj
/TT4 1 Tf
0 -1.6333 TD
-( using a Group option argument. Also, a '#' may be appended to the)Tj
+( values. The tag name may be prefixed by one or more family 0, 1 or)Tj
0 -1.1 TD
+( 2 group names with optional leading family numbers, separated by)Tj
+T*
+( colons \(eg. 'EXIF:Artist', 'XMP:Time:*'\), which is equivalent to)Tj
+T*
+( using a Group option argument. Also, a '#' may be appended to the)Tj
+T*
( tag name \(eg. 'EXIF:Orientation#'\), with the same effect as setting)Tj
T*
( Type to 'ValueConv'. Wildcards \('*' and '?'\) may be used in the)Tj
@@ -3484,12 +3488,6 @@ T*
( Bit mask for tag protection levels to write. Bit 0x01 allows)Tj
T*
( writing of 'unsafe' tags \(ie. tags not copied automatically via)Tj
-T*
-( "SetNewValuesFromFile"\). Bit 0x02 allows writing of)Tj
-T*
-( 'protected' tags, and should only be used internally by)Tj
-T*
-( ExifTool. See Image::ExifTool::TagNames, for a list of tag)Tj
ET
endstream
endobj
@@ -3507,7 +3505,7 @@ endobj
endobj
72 0 obj
<<
-/Length 4593
+/Length 4759
>>
stream
BT
@@ -3517,9 +3515,15 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 22)Tj
+( -- Image::ExifTool 12.25 -- 22)Tj
/TT4 1 Tf
0 -1.6333 TD
+( "SetNewValuesFromFile"\). Bit 0x02 allows writing of)Tj
+0 -1.1 TD
+( 'protected' tags, and should only be used internally by)Tj
+T*
+( ExifTool. See Image::ExifTool::TagNames, for a list of tag)Tj
+T*
( names indicating 'unsafe' and 'protected' tags. Default is 0.)Tj
0 -2.2 TD
( ProtectSaved)Tj
@@ -3693,10 +3697,6 @@ T*
( $rawVal = $exifTool->GetNewValue\($tag\);)Tj
T*
( @rawVals = $exifTool->GetNewValue\($tag\);)Tj
-T*
-( Inputs:)Tj
-0 -1.1 TD
-( 0\) ExifTool object reference)Tj
ET
endstream
endobj
@@ -3714,7 +3714,7 @@ endobj
endobj
75 0 obj
<<
-/Length 4656
+/Length 4486
>>
stream
BT
@@ -3724,9 +3724,13 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 23)Tj
+( -- Image::ExifTool 12.25 -- 23)Tj
/TT4 1 Tf
0 -1.6333 TD
+( Inputs:)Tj
+0 -1.1 TD
+( 0\) ExifTool object reference)Tj
+0 -2.2 TD
( 1\) Tag name \(case sensitive, may be prefixed by family 0, 1 or 7)Tj
0 -1.1 TD
( group names, separated by colons\))Tj
@@ -3870,12 +3874,6 @@ T*
( 'XMP:*'\). A special feature allows tag names of the form)Tj
T*
( 'DSTTAG<SRCTAG' \(or 'SRCTAG>DSTTAG'\) to be specified to copy)Tj
-T*
-( information to a tag with a different name or a specified group.)Tj
-T*
-( Both 'SRCTAG' and 'DSTTAG' may contain wildcards and/or be prefixed)Tj
-T*
-( by a group name \(eg. 'fileModifyDate<modifyDate' or 'xmp:*<*'\),)Tj
ET
endstream
endobj
@@ -3893,7 +3891,7 @@ endobj
endobj
78 0 obj
<<
-/Length 4480
+/Length 4580
>>
stream
BT
@@ -3903,11 +3901,17 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 24)Tj
+( -- Image::ExifTool 12.25 -- 24)Tj
/TT4 1 Tf
0 -1.6333 TD
-( and/or suffixed by a '#' to disable print conversion. Copied tags)Tj
+( information to a tag with a different name or a specified group.)Tj
0 -1.1 TD
+( Both 'SRCTAG' and 'DSTTAG' may contain wildcards and/or be prefixed)Tj
+T*
+( by a group name \(eg. 'fileModifyDate<modifyDate' or 'xmp:*<*'\),)Tj
+T*
+( and/or suffixed by a '#' to disable print conversion. Copied tags)Tj
+T*
( may also be added or deleted from a list with arguments of the form)Tj
T*
( 'DSTTAG+<SRCTAG' or 'DSTTAG-<SRCTAG'. Tags are evaluated in order,)Tj
@@ -4015,10 +4019,6 @@ T*
( it is usually desirable to preserve the original groups by)Tj
T*
( specifying '*:*' for the tags to set.)Tj
-0 -2.2 TD
-( The "Duplicates" option is always in effect for tags extracted from)Tj
-0 -1.1 TD
-( the source file using this routine.)Tj
ET
endstream
endobj
@@ -4036,7 +4036,7 @@ endobj
endobj
81 0 obj
<<
-/Length 4371
+/Length 4386
>>
stream
BT
@@ -4046,9 +4046,13 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 25)Tj
+( -- Image::ExifTool 12.25 -- 25)Tj
/TT4 1 Tf
0 -1.6333 TD
+( The "Duplicates" option is always in effect for tags extracted from)Tj
+0 -1.1 TD
+( the source file using this routine.)Tj
+0 -2.2 TD
( The "Struct" option is enabled by default for tags extracted by)Tj
0 -1.1 TD
( this routine. This allows the hierarchy of complex structures to)Tj
@@ -4266,10 +4270,6 @@ T*
( 'FileCreateDate')Tj
0 -2.2 TD
( Return Value:)Tj
-0 -1.1 TD
-( 1 if the time was changed, 0 if nothing was done, or -1 if there)Tj
-T*
-( was an error setting the time.)Tj
ET
endstream
endobj
@@ -4287,7 +4287,7 @@ endobj
endobj
84 0 obj
<<
-/Length 4104
+/Length 4164
>>
stream
BT
@@ -4297,9 +4297,13 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 26)Tj
+( -- Image::ExifTool 12.25 -- 26)Tj
/TT4 1 Tf
0 -1.6333 TD
+( 1 if the time was changed, 0 if nothing was done, or -1 if there)Tj
+0 -1.1 TD
+( was an error setting the time.)Tj
+0 -2.2 TD
( Notes:)Tj
0 -1.1 TD
( Equivalent to, but more efficient than calling "WriteInfo" when)Tj
@@ -4471,10 +4475,6 @@ T*
(s)Tj
-8.4 -1.1 TD
( Get current group priority list.)Tj
-0 -2.2 TD
-( @groups = $exifTool->GetNewGroups\(\);)Tj
-T*
-( Inputs:)Tj
ET
endstream
endobj
@@ -4492,7 +4492,7 @@ endobj
endobj
87 0 obj
<<
-/Length 3733
+/Length 3587
>>
stream
BT
@@ -4502,9 +4502,13 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 27)Tj
+( -- Image::ExifTool 12.25 -- 27)Tj
/TT4 1 Tf
0 -1.6333 TD
+( @groups = $exifTool->GetNewGroups\(\);)Tj
+0 -2.2 TD
+( Inputs:)Tj
+0 -1.1 TD
( 0\) ExifTool object reference)Tj
0 -2.2 TD
( Return Values:)Tj
@@ -4660,12 +4664,6 @@ T*
( Group name \(or '' if tag has no group\). If no group family is)Tj
T*
( specified, "GetGroup" returns the name of the group in family 0)Tj
-T*
-( when called in scalar context, or the names of groups for all)Tj
-T*
-( families in list context. Returns a string of group names)Tj
-T*
-( separated by colons if the input group family contains a colon.)Tj
ET
endstream
endobj
@@ -4683,7 +4681,7 @@ endobj
endobj
90 0 obj
<<
-/Length 5021
+/Length 5092
>>
stream
BT
@@ -4693,11 +4691,17 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 28)Tj
+( -- Image::ExifTool 12.25 -- 28)Tj
/TT4 1 Tf
0 -1.6333 TD
-( The string is simplified to remove a leading 'Main:' and adjacent)Tj
+( when called in scalar context, or the names of groups for all)Tj
0 -1.1 TD
+( families in list context. Returns a string of group names)Tj
+T*
+( separated by colons if the input group family contains a colon.)Tj
+T*
+( The string is simplified to remove a leading 'Main:' and adjacent)Tj
+T*
( identical group names unless the family string begins with a colon.)Tj
0 -2.2 TD
( Notes:)Tj
@@ -4811,10 +4815,6 @@ T*
( numerical ID's may be in hex or decimal, and non-numerical ID's may)Tj
T*
( or may not have characters other than [-_A-Za-z0-9] converted to)Tj
-T*
-( hex. Note that unlike other group names, the tag ID's of family 7)Tj
-T*
-( group names are case sensitive \(but the leading "ID-" is not\).)Tj
ET
endstream
endobj
@@ -4832,7 +4832,7 @@ endobj
endobj
93 0 obj
<<
-/Length 4380
+/Length 4492
>>
stream
BT
@@ -4842,11 +4842,15 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 29)Tj
+( -- Image::ExifTool 12.25 -- 29)Tj
/TT4 1 Tf
0 -1.6333 TD
-( See "GetAllGroups [static]" for complete lists of group names.)Tj
+( hex. Note that unlike other group names, the tag ID's of family 7)Tj
+0 -1.1 TD
+( group names are case sensitive \(but the leading "ID-" is not\).)Tj
0 -2.2 TD
+( See "GetAllGroups [static]" for complete lists of group names.)Tj
+T*
( G)Tj
1.8 0 TD
(Ge)Tj
@@ -5072,10 +5076,6 @@ T*
(])Tj
-13.8 -1.1 TD
( Get a list of shortcut tags.)Tj
-0 -2.2 TD
-( Inputs:)Tj
-0 -1.1 TD
-( \(none\))Tj
ET
endstream
endobj
@@ -5093,7 +5093,7 @@ endobj
endobj
96 0 obj
<<
-/Length 4886
+/Length 4698
>>
stream
BT
@@ -5103,9 +5103,13 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 30)Tj
+( -- Image::ExifTool 12.25 -- 30)Tj
/TT4 1 Tf
0 -1.6333 TD
+( Inputs:)Tj
+0 -1.1 TD
+( \(none\))Tj
+0 -2.2 TD
( Return Values:)Tj
0 -1.1 TD
( List of shortcut tags \(as defined in Image::ExifTool::Shortcuts\).)Tj
@@ -5331,12 +5335,6 @@ T*
( Ducky, EPPIM, EXE, EXIF, ExifIFD, ExifTool, FITS, FLAC, FLIR, File,)Tj
T*
( Flash, FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF,)Tj
-T*
-( GIMP, GPS, GeoTiff, GlobParamIFD, GoPro, GraphConv, H264, HP, HTC,)Tj
-T*
-( HTML, HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-)Tj
-T*
-( equiv, ICC-chrm, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-)Tj
ET
endstream
endobj
@@ -5354,7 +5352,7 @@ endobj
endobj
99 0 obj
<<
-/Length 4812
+/Length 5010
>>
stream
BT
@@ -5364,11 +5362,17 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 31)Tj
+( -- Image::ExifTool 12.25 -- 31)Tj
/TT4 1 Tf
0 -1.6333 TD
-( view, ICC_Profile, ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2,)Tj
+( GIMP, GPS, GeoTiff, GlobParamIFD, GoPro, GraphConv, H264, HP, HTC,)Tj
0 -1.1 TD
+( HTML, HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-)Tj
+T*
+( equiv, ICC-chrm, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-)Tj
+T*
+( view, ICC_Profile, ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2,)Tj
+T*
( ID3v2_3, ID3v2_4, IFD0, IFD1, IPTC, IPTC#, ISO, ITC, Insta360,)Tj
T*
( InteropIFD, ItemList, JFIF, JFXX, JPEG, JPEG-HDR, JSON, JUMBF, JVC,)Tj
@@ -5526,10 +5530,6 @@ T*
( Get list of all deletable group names.)Tj
0 -2.2 TD
( @delGroups = Image::ExifTool::GetDeleteGroups\(\);)Tj
-T*
-( Inputs:)Tj
-0 -1.1 TD
-( None.)Tj
ET
endstream
endobj
@@ -5547,7 +5547,7 @@ endobj
endobj
103 0 obj
<<
-/Length 4896
+/Length 4607
>>
stream
BT
@@ -5557,9 +5557,13 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 32)Tj
+( -- Image::ExifTool 12.25 -- 32)Tj
/TT4 1 Tf
0 -1.6333 TD
+( Inputs:)Tj
+0 -1.1 TD
+( None.)Tj
+0 -2.2 TD
( Return Values:)Tj
0 -1.1 TD
( A list of deletable group names in alphabetical order. The current)Tj
@@ -5735,7 +5739,36 @@ T*
( True if ExifTool supports writing files of this type \(based on the)Tj
T*
( file extension\).)Tj
-0 -2.2 TD
+ET
+endstream
+endobj
+104 0 obj
+<<
+/ProcSet [/PDF /Text ]
+/Font <<
+/TT2 4 0 R
+/TT4 5 0 R
+>>
+/ExtGState <<
+/GS1 6 0 R
+>>
+>>
+endobj
+106 0 obj
+<<
+/Length 4913
+>>
+stream
+BT
+/TT2 1 Tf
+10 0 0 10 29 806.3333 Tm
+0 g
+/GS1 gs
+0 Tc
+0 Tw
+( -- Image::ExifTool 12.25 -- 33)Tj
+/TT4 1 Tf
+0 -1.6333 TD
( C)Tj
1.8 0 TD
(Ca)Tj
@@ -5773,38 +5806,9 @@ T*
(])Tj
-12 -1.1 TD
( Can the specified file be created?)Tj
-ET
-endstream
-endobj
-104 0 obj
-<<
-/ProcSet [/PDF /Text ]
-/Font <<
-/TT2 4 0 R
-/TT4 5 0 R
->>
-/ExtGState <<
-/GS1 6 0 R
->>
->>
-endobj
-106 0 obj
-<<
-/Length 4690
->>
-stream
-BT
-/TT2 1 Tf
-10 0 0 10 29 806.3333 Tm
-0 g
-/GS1 gs
-0 Tc
-0 Tw
-( -- Image::ExifTool 12.24 -- 33)Tj
-/TT4 1 Tf
-0 -1.6333 TD
-( my $creatable = Image::ExifTool::CanCreate\($filename\);)Tj
0 -2.2 TD
+( my $creatable = Image::ExifTool::CanCreate\($filename\);)Tj
+T*
( Inputs:)Tj
0 -1.1 TD
( 0\) File name or extension)Tj
@@ -6000,10 +6004,6 @@ T*
( appropriate for the system. In Windows this also has the effect of)Tj
T*
( activating Unicode filename support via the special Windows wide-)Tj
-T*
-( character i/o routines if Win32API::File is available.)Tj
-0 -2.2 TD
-( Internal Character Sets:)Tj
ET
endstream
endobj
@@ -6021,7 +6021,7 @@ endobj
endobj
109 0 obj
<<
-/Length 5396
+/Length 5369
>>
stream
BT
@@ -6031,11 +6031,15 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 34)Tj
+( -- Image::ExifTool 12.25 -- 34)Tj
/TT4 1 Tf
0 -1.6333 TD
-( The encodings used to store strings in the various metadata)Tj
+( character i/o routines if Win32API::File is available.)Tj
+0 -2.2 TD
+( Internal Character Sets:)Tj
0 -1.1 TD
+( The encodings used to store strings in the various metadata)Tj
+T*
( formats. These encodings may be changed for certain types of)Tj
T*
( metadata via the "CharsetEXIF", "CharsetID3", "CharsetIPTC",)Tj
@@ -6209,10 +6213,6 @@ T*
( changes the internal IPTC encoding to UTF-8 \(from Windows Latin1 unless)Tj
T*
( CodedCharacterSet was already 'UTF8'\):)Tj
-0 -2.2 TD
-( exiftool -tagsfromfile @ -iptc:all -codedcharacterset=utf8 a.jpg)Tj
-T*
-( or from Windows Latin2 \(cp1250\) to UTF-8:)Tj
ET
endstream
endobj
@@ -6230,7 +6230,7 @@ endobj
endobj
112 0 obj
<<
-/Length 4692
+/Length 4598
>>
stream
BT
@@ -6240,9 +6240,13 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 35)Tj
+( -- Image::ExifTool 12.25 -- 35)Tj
/TT4 1 Tf
-0 -2.7333 TD
+0 -1.6333 TD
+( exiftool -tagsfromfile @ -iptc:all -codedcharacterset=utf8 a.jpg)Tj
+0 -2.2 TD
+( or from Windows Latin2 \(cp1250\) to UTF-8:)Tj
+T*
( exiftool -tagsfromfile @ -iptc:all -codedcharacterset=utf8 \\)Tj
0 -1.1 TD
( -charset iptc=latin2 a.jpg)Tj
@@ -6414,12 +6418,6 @@ T*
(p)Tj
-6.6 -1.1 TD
( Some Photoshop resource names are stored as Pascal strings with unknown)Tj
-T*
-( encoding. By default, ExifTool assumes MacRoman encoding and converts)Tj
-T*
-( this to UTF-8, but the internal and external character sets may be)Tj
-T*
-( specified with the "CharsetPhotoshop" and "Charset" options)Tj
ET
endstream
endobj
@@ -6437,7 +6435,7 @@ endobj
endobj
115 0 obj
<<
-/Length 5257
+/Length 5504
>>
stream
BT
@@ -6447,9 +6445,15 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- Image::ExifTool 12.24 -- 36)Tj
+( -- Image::ExifTool 12.25 -- 36)Tj
/TT4 1 Tf
0 -1.6333 TD
+( encoding. By default, ExifTool assumes MacRoman encoding and converts)Tj
+0 -1.1 TD
+( this to UTF-8, but the internal and external character sets may be)Tj
+T*
+( specified with the "CharsetPhotoshop" and "Charset" options)Tj
+T*
( respectively.)Tj
0 -2.2 TD
( Q)Tj
@@ -6862,7 +6866,7 @@ T*
0.6 0 TD
(G\(3pm\))Tj
-27 -4.4 TD
-(perl v5.18.4 2021-04-13 EXIFTOOL\(1\))Tj
+(perl v5.18.4 2021-04-22 EXIFTOOL\(1\))Tj
ET
endstream
endobj
@@ -7298,8 +7302,8 @@ endobj
endobj
121 0 obj
<<
-/CreationDate (D:20210413110922-04'00')
-/ModDate (D:20210413110922-04'00')
+/CreationDate (D:20210422145338-04'00')
+/ModDate (D:20210422145338-04'00')
/Producer (Apple pstopdf)
>>
endobj
@@ -7313,135 +7317,135 @@ endobj
xref
0 123
0000000000 65535 f
-0000170479 00000 n
+0000170718 00000 n
0000000016 00000 n
0000004112 00000 n
-0000169480 00000 n
-0000169881 00000 n
-0000168945 00000 n
-0000173581 00000 n
-0000170559 00000 n
+0000169719 00000 n
+0000170120 00000 n
+0000169184 00000 n
+0000173820 00000 n
+0000170798 00000 n
0000004218 00000 n
-0000009568 00000 n
-0000170640 00000 n
-0000009675 00000 n
-0000014402 00000 n
-0000170723 00000 n
-0000014509 00000 n
-0000019439 00000 n
-0000170806 00000 n
-0000019546 00000 n
-0000024260 00000 n
-0000170889 00000 n
-0000024367 00000 n
-0000028248 00000 n
-0000170972 00000 n
-0000028355 00000 n
-0000033150 00000 n
-0000171055 00000 n
-0000033257 00000 n
-0000037723 00000 n
-0000171138 00000 n
-0000037830 00000 n
-0000042853 00000 n
-0000171221 00000 n
-0000042960 00000 n
-0000047513 00000 n
-0000171304 00000 n
-0000047620 00000 n
-0000052394 00000 n
-0000174107 00000 n
-0000173716 00000 n
-0000171388 00000 n
-0000052501 00000 n
-0000056862 00000 n
-0000171472 00000 n
-0000056969 00000 n
-0000061481 00000 n
-0000171556 00000 n
-0000061588 00000 n
-0000065966 00000 n
-0000171640 00000 n
-0000066073 00000 n
-0000070344 00000 n
-0000171724 00000 n
-0000070451 00000 n
-0000074672 00000 n
-0000171808 00000 n
-0000074779 00000 n
-0000078841 00000 n
-0000171892 00000 n
-0000078948 00000 n
-0000083353 00000 n
-0000171976 00000 n
-0000083460 00000 n
-0000087474 00000 n
-0000172060 00000 n
-0000087581 00000 n
-0000091661 00000 n
-0000172144 00000 n
-0000091768 00000 n
-0000096460 00000 n
-0000173854 00000 n
-0000172228 00000 n
-0000096567 00000 n
-0000101213 00000 n
-0000172312 00000 n
-0000101320 00000 n
-0000106029 00000 n
-0000172396 00000 n
-0000106136 00000 n
-0000110669 00000 n
-0000172480 00000 n
-0000110776 00000 n
-0000115200 00000 n
-0000172564 00000 n
-0000115307 00000 n
-0000119464 00000 n
-0000172648 00000 n
-0000119571 00000 n
-0000123357 00000 n
-0000172732 00000 n
-0000123464 00000 n
-0000128538 00000 n
-0000172816 00000 n
-0000128645 00000 n
-0000133078 00000 n
-0000172900 00000 n
-0000133185 00000 n
-0000138124 00000 n
-0000172984 00000 n
-0000138231 00000 n
-0000143096 00000 n
-0000173992 00000 n
-0000173070 00000 n
-0000143204 00000 n
-0000148154 00000 n
-0000173158 00000 n
-0000148262 00000 n
-0000153006 00000 n
-0000173246 00000 n
-0000153114 00000 n
-0000158564 00000 n
-0000173334 00000 n
-0000158672 00000 n
-0000163418 00000 n
-0000173422 00000 n
-0000163526 00000 n
-0000168837 00000 n
-0000169085 00000 n
-0000169288 00000 n
-0000173510 00000 n
-0000173539 00000 n
-0000174213 00000 n
-0000174337 00000 n
+0000009576 00000 n
+0000170879 00000 n
+0000009683 00000 n
+0000014442 00000 n
+0000170962 00000 n
+0000014549 00000 n
+0000019334 00000 n
+0000171045 00000 n
+0000019441 00000 n
+0000023926 00000 n
+0000171128 00000 n
+0000024033 00000 n
+0000028293 00000 n
+0000171211 00000 n
+0000028400 00000 n
+0000033152 00000 n
+0000171294 00000 n
+0000033259 00000 n
+0000037824 00000 n
+0000171377 00000 n
+0000037931 00000 n
+0000042785 00000 n
+0000171460 00000 n
+0000042892 00000 n
+0000047576 00000 n
+0000171543 00000 n
+0000047683 00000 n
+0000052324 00000 n
+0000174346 00000 n
+0000173955 00000 n
+0000171627 00000 n
+0000052431 00000 n
+0000056962 00000 n
+0000171711 00000 n
+0000057069 00000 n
+0000061518 00000 n
+0000171795 00000 n
+0000061625 00000 n
+0000065933 00000 n
+0000171879 00000 n
+0000066040 00000 n
+0000070285 00000 n
+0000171963 00000 n
+0000070392 00000 n
+0000074736 00000 n
+0000172047 00000 n
+0000074843 00000 n
+0000078868 00000 n
+0000172131 00000 n
+0000078975 00000 n
+0000083372 00000 n
+0000172215 00000 n
+0000083479 00000 n
+0000087572 00000 n
+0000172299 00000 n
+0000087679 00000 n
+0000091604 00000 n
+0000172383 00000 n
+0000091711 00000 n
+0000096421 00000 n
+0000174093 00000 n
+0000172467 00000 n
+0000096528 00000 n
+0000101340 00000 n
+0000172551 00000 n
+0000101447 00000 n
+0000105986 00000 n
+0000172635 00000 n
+0000106093 00000 n
+0000110726 00000 n
+0000172719 00000 n
+0000110833 00000 n
+0000115272 00000 n
+0000172803 00000 n
+0000115379 00000 n
+0000119596 00000 n
+0000172887 00000 n
+0000119703 00000 n
+0000123343 00000 n
+0000172971 00000 n
+0000123450 00000 n
+0000128595 00000 n
+0000173055 00000 n
+0000128702 00000 n
+0000133247 00000 n
+0000173139 00000 n
+0000133354 00000 n
+0000138105 00000 n
+0000173223 00000 n
+0000138212 00000 n
+0000143275 00000 n
+0000174231 00000 n
+0000173309 00000 n
+0000143383 00000 n
+0000148044 00000 n
+0000173397 00000 n
+0000148152 00000 n
+0000153119 00000 n
+0000173485 00000 n
+0000153227 00000 n
+0000158650 00000 n
+0000173573 00000 n
+0000158758 00000 n
+0000163410 00000 n
+0000173661 00000 n
+0000163518 00000 n
+0000169076 00000 n
+0000169324 00000 n
+0000169527 00000 n
+0000173749 00000 n
+0000173778 00000 n
+0000174452 00000 n
+0000174576 00000 n
trailer
<<
/Size 123
/Root 122 0 R
/Info 121 0 R
-/ID [<560ec6fe6e5440771a95f440aabbe0e8><560ec6fe6e5440771a95f440aabbe0e8>]
+/ID [<6f1fa4f957abd6d4edd957a2bc3331b3><6f1fa4f957abd6d4edd957a2bc3331b3>]
>>
startxref
-174409
+174648
%%EOF
diff --git a/html/Shift.pdf b/html/Shift.pdf
index 5c2a3dbe..3f717de8 100644
--- a/html/Shift.pdf
+++ b/html/Shift.pdf
@@ -593,8 +593,8 @@ endobj
endobj
16 0 obj
<<
-/CreationDate (D:20210413110922-04'00')
-/ModDate (D:20210413110922-04'00')
+/CreationDate (D:20210422145339-04'00')
+/ModDate (D:20210422145339-04'00')
/Producer (Apple pstopdf)
>>
endobj
@@ -630,7 +630,7 @@ trailer
/Size 18
/Root 17 0 R
/Info 16 0 R
-/ID [<aaba228f321479095b428dfe7ef65dcb><aaba228f321479095b428dfe7ef65dcb>]
+/ID [<8e19456eaff63821249a7d1d603df2f5><8e19456eaff63821249a7d1d603df2f5>]
>>
startxref
11800
diff --git a/html/TagNames/Canon.html b/html/TagNames/Canon.html
index 311bfbef..47cd0152 100644
--- a/html/TagNames/Canon.html
+++ b/html/TagNames/Canon.html
@@ -1731,7 +1731,8 @@ attempting to identify the specific lens model.</p>
</tr><tr><td>252.1</td><td>= Canon EF 70-200mm f/2.8L IS III USM + 1.4x</td>
</tr><tr><td>253</td><td>= Canon EF 70-200mm f/2.8L IS II USM + 2x</td>
</tr><tr><td>253.1</td><td>= Canon EF 70-200mm f/2.8L IS III USM + 2x</td>
-</tr><tr><td>254</td><td>= Canon EF 100mm f/2.8L Macro IS USM</td>
+</tr><tr><td>254</td><td>= Canon EF 100mm f/2.8L Macro IS USM or Tamron Lens</td>
+</tr><tr><td>254.1</td><td>= Tamron SP 90mm f/2.8 Di VC USD 1:1 Macro (F017)</td>
</tr><tr><td>255</td><td>= Sigma 24-105mm f/4 DG OS HSM | A or Other Lens</td>
</tr><tr><td>255.1</td><td>= Sigma 180mm f/2.8 EX DG OS HSM APO Macro</td>
</tr><tr><td>255.2</td><td>= Tamron SP 70-200mm f/2.8 Di VC USD</td>
@@ -11105,7 +11106,7 @@ SX280, and CR3 images from cameras such as the EOS M50.</p>
<hr>
(This document generated automatically by Image::ExifTool::BuildTagLookup)
-<br><i>Last revised Mar 17, 2021</i>
+<br><i>Last revised Apr 22, 2021</i>
<p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p>
</body>
</html>
diff --git a/html/TagNames/MRC.html b/html/TagNames/MRC.html
new file mode 100644
index 00000000..b888513a
--- /dev/null
+++ b/html/TagNames/MRC.html
@@ -0,0 +1,731 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- (this file generated automatically by Image::ExifTool::BuildTagLookup) -->
+<head>
+<title>MRC Tags</title>
+<link rel=stylesheet type='text/css' href='style.css' title='Style'>
+</head>
+<body>
+<h2 class=top>MRC Tags</h2>
+<p>Tags extracted from Medical Research Council (MRC) format imaging files.
+See <a href="https://www.ccpem.ac.uk/mrc_format/mrc2014.php">https://www.ccpem.ac.uk/mrc_format/mrc2014.php</a> for the specification.</p>
+<blockquote>
+<table class=frame><tr><td>
+<table class=inner cellspacing=1>
+<tr class=h><th>Index4</th><th>Tag Name</th>
+<th>Writable</th><th>Values / <span class=n>Notes</span></th></tr>
+<tr>
+<td class=r title='0 = 0x0'>0</td>
+<td>ImageWidth</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='1 = 0x1'>1</td>
+<td>ImageHeight</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='2 = 0x2'>2</td>
+<td>ImageDepth</td>
+<td class=c>no</td>
+<td><span class=s><span class=n>(number of sections. Use ExtractEmbedded option to extract metadata for all
+sections)</span></span></td></tr>
+<tr class=b>
+<td class=r title='3 = 0x3'>3</td>
+<td>ImageMode</td>
+<td class=c>no</td>
+<td><table class=cols><tr>
+ <td>0 = 8-bit signed integer
+ <br>1 = 16-bit signed integer
+ <br>2 = 32-bit signed real
+ <br>3 = complex 16-bit integer
+ <br>4 = complex 32-bit real
+ <br>6 = 16-bit unsigned integer</td></tr></table>
+</td></tr>
+<tr>
+<td class=r title='4 = 0x4'>4</td>
+<td>StartPoint</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='7 = 0x7'>7</td>
+<td>GridSize</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='10 = 0xa'>10</td>
+<td>CellWidth</td>
+<td class=c>no</td>
+<td><span class=s><span class=n>(cell size in angstroms)</span></span></td></tr>
+<tr class=b>
+<td class=r title='11 = 0xb'>11</td>
+<td>CellHeight</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='12 = 0xc'>12</td>
+<td>CellDepth</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='13 = 0xd'>13</td>
+<td>CellAlpha</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='14 = 0xe'>14</td>
+<td>CellBeta</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='15 = 0xf'>15</td>
+<td>CellGamma</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='16 = 0x10'>16</td>
+<td>ImageWidthAxis</td>
+<td class=c>no</td>
+<td><span class=s>1 = X
+ <br>2 = Y
+ <br>3 = Z</span></td></tr>
+<tr class=b>
+<td class=r title='17 = 0x11'>17</td>
+<td>ImageHeightAxis</td>
+<td class=c>no</td>
+<td><span class=s>1 = X
+ <br>2 = Y
+ <br>3 = Z</span></td></tr>
+<tr>
+<td class=r title='18 = 0x12'>18</td>
+<td>ImageDepthAxis</td>
+<td class=c>no</td>
+<td><span class=s>1 = X
+ <br>2 = Y
+ <br>3 = Z</span></td></tr>
+<tr class=b>
+<td class=r title='19 = 0x13'>19</td>
+<td>DensityMin</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='20 = 0x14'>20</td>
+<td>DensityMax</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='21 = 0x15'>21</td>
+<td>DensityMean</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='22 = 0x16'>22</td>
+<td>SpaceGroupNumber</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='23 = 0x17'>23</td>
+<td>ExtendedHeaderSize</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='26 = 0x1a'>26</td>
+<td>ExtendedHeaderType</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='27 = 0x1b'>27</td>
+<td>MRCVersion</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='49 = 0x31'>49</td>
+<td>Origin</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='53 = 0x35'>53</td>
+<td>MachineStamp</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='54 = 0x36'>54</td>
+<td>RMSDeviation</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='55 = 0x37'>55</td>
+<td>NumberOfLabels</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='56 = 0x38'>56</td>
+<td>Label0</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='76 = 0x4c'>76</td>
+<td>Label1</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='96 = 0x60'>96</td>
+<td>Label2</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='116 = 0x74'>116</td>
+<td>Label3</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='136 = 0x88'>136</td>
+<td>Label4</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='156 = 0x9c'>156</td>
+<td>Label5</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='176 = 0xb0'>176</td>
+<td>Label6</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='196 = 0xc4'>196</td>
+<td>Label7</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='216 = 0xd8'>216</td>
+<td>Label8</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='236 = 0xec'>236</td>
+<td>Label9</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+</table></td></tr></table></blockquote>
+
+<h2><a name='FEI12'>MRC FEI12 Tags</a></h2>
+<p>Tags extracted from FEI1 and FEI2 extended headers.</p>
+<blockquote>
+<table class=frame><tr><td>
+<table class=inner cellspacing=1>
+<tr class=h><th>Index1</th><th>Tag Name</th>
+<th>Writable</th><th>Values / <span class=n>Notes</span></th></tr>
+<tr>
+<td class=r title='0 = 0x0'>0</td>
+<td>MetadataSize</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='4 = 0x4'>4</td>
+<td>MetadataVersion</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='8 = 0x8'>8</td>
+<td>Bitmask1</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='12 = 0xc'>12</td>
+<td>TimeStamp</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='20 = 0x14'>20</td>
+<td>MicroscopeType</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='36 = 0x24'>36</td>
+<td>MicroscopeID</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='52 = 0x34'>52</td>
+<td>Application</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='68 = 0x44'>68</td>
+<td>AppVersion</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='84 = 0x54'>84</td>
+<td>HighTension</td>
+<td class=c>no</td>
+<td><span class=s><span class=n>(volts)</span></span></td></tr>
+<tr class=b>
+<td class=r title='92 = 0x5c'>92</td>
+<td>Dose</td>
+<td class=c>no</td>
+<td><span class=s><span class=n>(electrons/m2)</span></span></td></tr>
+<tr>
+<td class=r title='100 = 0x64'>100</td>
+<td>AlphaTilt</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='108 = 0x6c'>108</td>
+<td>BetaTilt</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='116 = 0x74'>116</td>
+<td>XStage</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='124 = 0x7c'>124</td>
+<td>YStage</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='132 = 0x84'>132</td>
+<td>ZStage</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='140 = 0x8c'>140</td>
+<td>TiltAxisAngle</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='148 = 0x94'>148</td>
+<td>DualAxisRot</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='156 = 0x9c'>156</td>
+<td>PixelSizeX</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='164 = 0xa4'>164</td>
+<td>PixelSizeY</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='220 = 0xdc'>220</td>
+<td>Defocus</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='228 = 0xe4'>228</td>
+<td>STEMDefocus</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='236 = 0xec'>236</td>
+<td>AppliedDefocus</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='244 = 0xf4'>244</td>
+<td>InstrumentMode</td>
+<td class=c>no</td>
+<td><span class=s>1 = TEM
+ <br>2 = STEM</span></td></tr>
+<tr class=b>
+<td class=r title='248 = 0xf8'>248</td>
+<td>ProjectionMode</td>
+<td class=c>no</td>
+<td><span class=s>1 = Diffraction
+ <br>2 = Imaging</span></td></tr>
+<tr>
+<td class=r title='252 = 0xfc'>252</td>
+<td>ObjectiveLens</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='268 = 0x10c'>268</td>
+<td>HighMagnificationMode</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='284 = 0x11c'>284</td>
+<td>ProbeMode</td>
+<td class=c>no</td>
+<td><span class=s>1 = Nano
+ <br>2 = Micro</span></td></tr>
+<tr class=b>
+<td class=r title='288 = 0x120'>288</td>
+<td>EFTEMOn</td>
+<td class=c>no</td>
+<td><span class=s>0 = No
+ <br>1 = Yes</span></td></tr>
+<tr>
+<td class=r title='289 = 0x121'>289</td>
+<td>Magnification</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='297 = 0x129'>297</td>
+<td>Bitmask2</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='301 = 0x12d'>301</td>
+<td>CameraLength</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='309 = 0x135'>309</td>
+<td>SpotIndex</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='313 = 0x139'>313</td>
+<td>IlluminationArea</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='321 = 0x141'>321</td>
+<td>Intensity</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='329 = 0x149'>329</td>
+<td>ConvergenceAngle</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='337 = 0x151'>337</td>
+<td>IlluminationMode</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='353 = 0x161'>353</td>
+<td>WideConvergenceAngleRange</td>
+<td class=c>no</td>
+<td><span class=s>0 = No
+ <br>1 = Yes</span></td></tr>
+<tr class=b>
+<td class=r title='354 = 0x162'>354</td>
+<td>SlitInserted</td>
+<td class=c>no</td>
+<td><span class=s>0 = No
+ <br>1 = Yes</span></td></tr>
+<tr>
+<td class=r title='355 = 0x163'>355</td>
+<td>SlitWidth</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='363 = 0x16b'>363</td>
+<td>AccelVoltOffset</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='371 = 0x173'>371</td>
+<td>DriftTubeVolt</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='379 = 0x17b'>379</td>
+<td>EnergyShift</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='387 = 0x183'>387</td>
+<td>ShiftOffsetX</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='395 = 0x18b'>395</td>
+<td>ShiftOffsetY</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='403 = 0x193'>403</td>
+<td>ShiftX</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='411 = 0x19b'>411</td>
+<td>ShiftY</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='419 = 0x1a3'>419</td>
+<td>IntegrationTime</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='427 = 0x1ab'>427</td>
+<td>BinningWidth</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='431 = 0x1af'>431</td>
+<td>BinningHeight</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='435 = 0x1b3'>435</td>
+<td>CameraName</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='451 = 0x1c3'>451</td>
+<td>ReadoutAreaLeft</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='455 = 0x1c7'>455</td>
+<td>ReadoutAreaTop</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='459 = 0x1cb'>459</td>
+<td>ReadoutAreaRight</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='463 = 0x1cf'>463</td>
+<td>ReadoutAreaBottom</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='467 = 0x1d3'>467</td>
+<td>CetaNoiseReduct</td>
+<td class=c>no</td>
+<td><span class=s>0 = No
+ <br>1 = Yes</span></td></tr>
+<tr class=b>
+<td class=r title='468 = 0x1d4'>468</td>
+<td>CetaFramesSummed</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='472 = 0x1d8'>472</td>
+<td>DirectDetElectronCounting</td>
+<td class=c>no</td>
+<td><span class=s>0 = No
+ <br>1 = Yes</span></td></tr>
+<tr class=b>
+<td class=r title='473 = 0x1d9'>473</td>
+<td>DirectDetAlignFrames</td>
+<td class=c>no</td>
+<td><span class=s>0 = No
+ <br>1 = Yes</span></td></tr>
+<tr>
+<td class=r title='490 = 0x1ea'>490</td>
+<td>Bitmask3</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='518 = 0x206'>518</td>
+<td>PhasePlate</td>
+<td class=c>no</td>
+<td><span class=s>0 = No
+ <br>1 = Yes</span></td></tr>
+<tr>
+<td class=r title='519 = 0x207'>519</td>
+<td>STEMDetectorName</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='535 = 0x217'>535</td>
+<td>Gain</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='543 = 0x21f'>543</td>
+<td>Offset</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='571 = 0x23b'>571</td>
+<td>DwellTime</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='579 = 0x243'>579</td>
+<td>FrameTime</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='587 = 0x24b'>587</td>
+<td>ScanSizeLeft</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='591 = 0x24f'>591</td>
+<td>ScanSizeTop</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='595 = 0x253'>595</td>
+<td>ScanSizeRight</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='599 = 0x257'>599</td>
+<td>ScanSizeBottom</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='603 = 0x25b'>603</td>
+<td>FullScanFOV_X</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='611 = 0x263'>611</td>
+<td>FullScanFOV_Y</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='619 = 0x26b'>619</td>
+<td>Element</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='635 = 0x27b'>635</td>
+<td>EnergyIntervalLower</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='643 = 0x283'>643</td>
+<td>EnergyIntervalHigher</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='651 = 0x28b'>651</td>
+<td>Method</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='655 = 0x28f'>655</td>
+<td>IsDoseFraction</td>
+<td class=c>no</td>
+<td><span class=s>0 = No
+ <br>1 = Yes</span></td></tr>
+<tr>
+<td class=r title='656 = 0x290'>656</td>
+<td>FractionNumber</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='660 = 0x294'>660</td>
+<td>StartFrame</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='664 = 0x298'>664</td>
+<td>EndFrame</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='668 = 0x29c'>668</td>
+<td>InputStackFilename</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='748 = 0x2ec'>748</td>
+<td>Bitmask4</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='752 = 0x2f0'>752</td>
+<td>AlphaTiltMin</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='760 = 0x2f8'>760</td>
+<td>AlphaTiltMax</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='768 = 0x300'>768</td>
+<td>ScanRotation</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='776 = 0x308'>776</td>
+<td>DiffractionPatternRotation</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='784 = 0x310'>784</td>
+<td>ImageRotation</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='792 = 0x318'>792</td>
+<td>ScanModeEnumeration</td>
+<td class=c>no</td>
+<td><span class=s>0 = Other
+ <br>1 = Raster
+ <br>2 = Serpentine</span></td></tr>
+<tr class=b>
+<td class=r title='796 = 0x31c'>796</td>
+<td>AcquisitionTimeStamp</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='804 = 0x324'>804</td>
+<td>DetectorCommercialName</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='820 = 0x334'>820</td>
+<td>StartTiltAngle</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='828 = 0x33c'>828</td>
+<td>EndTiltAngle</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='836 = 0x344'>836</td>
+<td>TiltPerImage</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='844 = 0x34c'>844</td>
+<td>TitlSpeed</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='852 = 0x354'>852</td>
+<td>BeamCenterX</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='856 = 0x358'>856</td>
+<td>BeamCenterY</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='860 = 0x35c'>860</td>
+<td>CFEGFlashTimeStamp</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='868 = 0x364'>868</td>
+<td>PhasePlatePosition</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='872 = 0x368'>872</td>
+<td>ObjectiveAperture</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+</table></td></tr></table></blockquote>
+
+<hr>
+(This document generated automatically by Image::ExifTool::BuildTagLookup)
+<br><i>Last revised Apr 22, 2021</i>
+<p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p>
+</body>
+</html>
diff --git a/html/TagNames/Nikon.html b/html/TagNames/Nikon.html
index b18a9c55..ce46abbb 100644
--- a/html/TagNames/Nikon.html
+++ b/html/TagNames/Nikon.html
@@ -6936,7 +6936,8 @@ used to specify the lens for ExifTool to choose in these cases (see the
</tr><tr><td>'07 36 3D 5F 2C 3C 03 00'</td><td>= Cosina AF Zoom 28-80mm F3.5-5.6 MC Macro</td>
</tr><tr><td>'07 3E 30 43 2D 35 03 00'</td><td>= Soligor AF Zoom 19-35mm 1:3.5-4.5 MC</td>
</tr><tr><td>'07 40 2F 44 2C 34 03 02'</td><td>= Tamron AF 19-35mm f/3.5-4.5 (A10)</td>
-</tr><tr><td>'07 40 30 45 2D 35 03 02'</td><td>= Tamron AF 19-35mm f/3.5-4.5 (A10)</td>
+</tr><tr><td>'07 40 30 45 2D 35 03 02.1'</td><td>= Tamron AF 19-35mm f/3.5-4.5 (A10)</td>
+</tr><tr><td>'07 40 30 45 2D 35 03 02.2'</td><td>= Voigtlander Ultragon 19-35mm F3.5-4.5 VMV</td>
</tr><tr><td>'07 40 3C 5C 2C 35 03 00'</td><td>= Tokina AF 270 II (AF 28-70mm f/3.5-4.5)</td>
</tr><tr><td>'07 40 3C 62 2C 34 03 00'</td><td>= AF Zoom-Nikkor 28-85mm f/3.5-4.5</td>
</tr><tr><td>'07 46 2B 44 24 30 03 02'</td><td>= Tamron SP AF 17-35mm f/2.8-4 Di LD Aspherical (IF) (A05)</td>
@@ -7425,7 +7426,7 @@ used to specify the lens for ExifTool to choose in these cases (see the
<hr>
(This document generated automatically by Image::ExifTool::BuildTagLookup)
-<br><i>Last revised Feb 23, 2021</i>
+<br><i>Last revised Apr 22, 2021</i>
<p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p>
</body>
</html>
diff --git a/html/TagNames/NikonSettings.html b/html/TagNames/NikonSettings.html
index 622e37fa..9c976357 100644
--- a/html/TagNames/NikonSettings.html
+++ b/html/TagNames/NikonSettings.html
@@ -2494,11 +2494,24 @@ Unknown only to reduce the volume of the normal output.</p>
<br>9 = Auto (People)
<br>10 = Auto (Animals)</td></tr></table>
</td></tr>
+<tr class=b>
+<td title='0x0170 = 368'>0x0170</td>
+<td>PreferSubSelectorCenter</td>
+<td class=c>no</td>
+<td><span class=s>1 = Off
+ <br>2 = On</span></td></tr>
+<tr>
+<td title='0x0174 = 372'>0x0174</td>
+<td>FocusPointSelectionSpeed</td>
+<td class=c>no</td>
+<td><span class=s>1 = Normal
+ <br>2 = High
+ <br>3 = Very High</span></td></tr>
</table></td></tr></table></blockquote>
<hr>
(This document generated automatically by Image::ExifTool::BuildTagLookup)
-<br><i>Last revised Feb 9, 2021</i>
+<br><i>Last revised Apr 22, 2021</i>
<p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p>
</body>
</html>
diff --git a/html/TagNames/QuickTime.html b/html/TagNames/QuickTime.html
index 31437a64..d3bbe05d 100644
--- a/html/TagNames/QuickTime.html
+++ b/html/TagNames/QuickTime.html
@@ -7418,8 +7418,8 @@ symbol in these tag ID&#39;s for the Ricoh Theta Z1 and maybe other models)</spa
<tr>
<td>'clsf'</td>
<td>Classification</td>
-<td class=c>no</td>
-<td>&nbsp;</td></tr>
+<td class=c title=' / = Avoid'>undef/</td>
+<td><span class=s><span class=n>(string in the form &quot;Entity=XXXX Index=### XXXXX&quot;, used in 3gp videos)</span></span></td></tr>
<tr class=b>
<td>'cmid'</td>
<td>CameraID</td>
@@ -7505,12 +7505,13 @@ containing this tag, but perhaps only if it is missing a time zone)</span></span
<td>'kywd'</td>
<td>Keywords</td>
<td class=c>no</td>
-<td>&nbsp;</td></tr>
+<td><span class=s><span class=n>(not writable because Apple doesn&#39;t follow the 3gp specification)</span></span></td></tr>
<tr>
<td>'loci'</td>
<td>LocationInformation</td>
-<td class=c>no</td>
-<td>&nbsp;</td></tr>
+<td class=c title=' / = Avoid'>undef/</td>
+<td><span class=s><span class=n>(string in the form &quot;XXXXX Role=XXX Lat=XXX Lon=XXX Alt=XXX Body=XXX
+Notes=XXX&quot;, used in 3gp videos)</span></span></td></tr>
<tr class=b>
<td>'lrcu'</td>
<td>LyricsURI</td>
@@ -7584,8 +7585,8 @@ containing this tag, but perhaps only if it is missing a time zone)</span></span
<tr class=b>
<td>'rtng'</td>
<td>Rating</td>
-<td class=c>no</td>
-<td>&nbsp;</td></tr>
+<td class=c title=' / = Avoid'>undef/</td>
+<td><span class=s><span class=n>(string in the form &quot;Entity=XXXX Criteria=XXXX XXXXX&quot;, used in 3gp videos)</span></span></td></tr>
<tr>
<td>'scen'</td>
<td>Scene</td>
@@ -7634,8 +7635,8 @@ containing this tag, but perhaps only if it is missing a time zone)</span></span
<tr>
<td>'urat'</td>
<td>UserRating</td>
-<td class=c>no</td>
-<td>&nbsp;</td></tr>
+<td class=c title=' / = Avoid'>undef/</td>
+<td><span class=s><span class=n>(used in 3gp videos)</span></span></td></tr>
<tr class=b>
<td>'uuid'</td>
<td>GarminSoftware
@@ -7656,8 +7657,8 @@ yaw, pitch and roll angles in degrees)</span></span></td></tr>
<tr>
<td>'yrrc'</td>
<td>Year</td>
-<td class=c>no</td>
-<td>&nbsp;</td></tr>
+<td class=c title=' / = Avoid'>undef/</td>
+<td><span class=s><span class=n>(used in 3gp videos)</span></span></td></tr>
<tr class=b>
<td>"&copy;ART"</td>
<td>Artist</td>
@@ -8750,7 +8751,7 @@ yaw, pitch and roll angles in degrees)</span></span></td></tr>
<hr>
(This document generated automatically by Image::ExifTool::BuildTagLookup)
-<br><i>Last revised Apr 1, 2021</i>
+<br><i>Last revised Apr 22, 2021</i>
<p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p>
</body>
</html>
diff --git a/html/TagNames/RIFF.html b/html/TagNames/RIFF.html
index a99f4b88..d96ea2a4 100644
--- a/html/TagNames/RIFF.html
+++ b/html/TagNames/RIFF.html
@@ -99,133 +99,164 @@ sub-documents, but the Duration is calculated for the full video.</p>
<td class=c>-</td>
<td>--&gt; <a href='RIFF.html#Tdat'>RIFF Tdat Tags</a></td></tr>
<tr>
+<td>'LIST_adtl'</td>
+<td>AssociatedDataList</td>
+<td class=c>-</td>
+<td>--&gt; <a href='RIFF.html'>RIFF Tags</a></td></tr>
+<tr class=b>
<td>'LIST_exif'</td>
<td>Exif</td>
<td class=c>-</td>
<td>--&gt; <a href='RIFF.html#Exif'>RIFF Exif Tags</a></td></tr>
-<tr class=b>
+<tr>
<td>'LIST_hdrl'</td>
<td>Hdrl</td>
<td class=c>-</td>
<td>--&gt; <a href='RIFF.html#Hdrl'>RIFF Hdrl Tags</a></td></tr>
-<tr>
+<tr class=b>
<td>'LIST_hydt'</td>
<td>PentaxData</td>
<td class=c>-</td>
<td>--&gt; <a href='Pentax.html#AVI'>Pentax AVI Tags</a></td></tr>
-<tr class=b>
+<tr>
<td>'LIST_ncdt'</td>
<td>NikonData</td>
<td class=c>-</td>
<td>--&gt; <a href='Nikon.html#AVI'>Nikon AVI Tags</a></td></tr>
-<tr>
+<tr class=b>
<td>'LIST_pntx'</td>
<td>PentaxData2</td>
<td class=c>-</td>
<td>--&gt; <a href='Pentax.html#AVI'>Pentax AVI Tags</a></td></tr>
-<tr class=b>
+<tr>
<td>'SGLT'</td>
<td>BikeBroAccel</td>
<td class=c>-</td>
<td>--&gt; <a href='QuickTime.html#Stream'>QuickTime Stream Tags</a></td></tr>
-<tr>
+<tr class=b>
<td>'SLLT'</td>
<td>BikeBroGPS</td>
<td class=c>-</td>
<td>--&gt; <a href='QuickTime.html#Stream'>QuickTime Stream Tags</a></td></tr>
-<tr class=b>
+<tr>
<td>'VP8 '</td>
<td>VP8Bitstream</td>
<td class=c>-</td>
<td>--&gt; <a href='RIFF.html#VP8'>RIFF VP8 Tags</a></td></tr>
-<tr>
+<tr class=b>
<td>'VP8L'</td>
<td>VP8L</td>
<td class=c>-</td>
<td>--&gt; <a href='RIFF.html#VP8L'>RIFF VP8L Tags</a></td></tr>
-<tr class=b>
+<tr>
<td>'VP8X'</td>
<td>VP8X</td>
<td class=c>-</td>
<td>--&gt; <a href='RIFF.html#VP8X'>RIFF VP8X Tags</a></td></tr>
-<tr>
+<tr class=b>
<td>'XMP '</td>
<td>XMP</td>
<td class=c>-</td>
<td>--&gt; <a href='XMP.html'>XMP Tags</a>
<br><span class='n s'>(WebP files)</span></td></tr>
-<tr class=b>
+<tr>
<td>'_PMX'</td>
<td>XMP</td>
<td class=c>-</td>
<td>--&gt; <a href='XMP.html'>XMP Tags</a>
<br><span class='n s'>(AVI and WAV files)</span></td></tr>
-<tr>
+<tr class=b>
<td>'aXML'</td>
<td>AXML</td>
<td class=c>-</td>
<td>--&gt; <a href='XMP.html#XML'>XMP XML Tags</a></td></tr>
-<tr class=b>
+<tr>
<td>'afsp'</td>
<td>Afsp</td>
<td class=c>no</td>
<td>&nbsp;</td></tr>
-<tr>
+<tr class=b>
<td>'bext'</td>
<td>BroadcastExtension</td>
<td class=c>-</td>
<td>--&gt; <a href='RIFF.html#BroadcastExt'>RIFF BroadcastExt Tags</a></td></tr>
-<tr class=b>
+<tr>
<td>'cue '</td>
<td>CuePoints</td>
<td class=c>no</td>
-<td>&nbsp;</td></tr>
-<tr>
+<td><span class=s><span class=n>(config_files/cutepointlist.config from full distribution will decode this
+and generate a list of cue points with labels)</span></span></td></tr>
+<tr class=b>
<td>'ds64'</td>
<td>DataSize64</td>
<td class=c>-</td>
<td>--&gt; <a href='RIFF.html#DS64'>RIFF DS64 Tags</a></td></tr>
-<tr class=b>
+<tr>
<td>'fact'</td>
<td>NumberOfSamples</td>
<td class=c>no</td>
<td>&nbsp;</td></tr>
-<tr>
+<tr class=b>
<td>'fmt '</td>
<td>AudioFormat</td>
<td class=c>-</td>
<td>--&gt; <a href='RIFF.html#AudioFormat'>RIFF AudioFormat Tags</a></td></tr>
-<tr class=b>
+<tr>
<td>'gps0'</td>
<td>GPSTrack</td>
<td class=c>-</td>
<td>--&gt; <a href='QuickTime.html#Stream'>QuickTime Stream Tags</a></td></tr>
-<tr>
+<tr class=b>
<td>'gsen'</td>
<td>GSensor</td>
<td class=c>-</td>
<td>--&gt; <a href='QuickTime.html#Stream'>QuickTime Stream Tags</a></td></tr>
-<tr class=b>
+<tr>
<td>'iXML'</td>
<td>IXML</td>
<td class=c>-</td>
<td>--&gt; <a href='XMP.html#XML'>XMP XML Tags</a></td></tr>
+<tr class=b>
+<td>'inst'</td>
+<td>Instrument</td>
+<td class=c>-</td>
+<td>--&gt; <a href='RIFF.html#Instrument'>RIFF Instrument Tags</a></td></tr>
<tr>
<td>'labl'</td>
-<td>Label</td>
-<td class=c>-</td>
-<td>--&gt; <a href='RIFF.html#Label'>RIFF Label Tags</a></td></tr>
+<td>CuePointLabel</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
<tr class=b>
<td>'list'</td>
<td>ListType</td>
<td class=c>no</td>
<td>&nbsp;</td></tr>
<tr>
+<td>'ltxt'</td>
+<td>LabeledText</td>
+<td class=c>no</td>
+<td><span class=s><span class=n>(CuePointID Length Purpose Country Language Dialect Codepage Text)</span></span></td></tr>
+<tr class=b>
+<td>'note'</td>
+<td>CuePointNote</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
<td>'olym'</td>
<td>Olym</td>
<td class=c>-</td>
<td>--&gt; <a href='Olympus.html#WAV'>Olympus WAV Tags</a></td></tr>
<tr class=b>
+<td>'plst'</td>
+<td>Playlist</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>'smpl'</td>
+<td>Sampler</td>
+<td class=c>-</td>
+<td>--&gt; <a href='RIFF.html#Sampler'>RIFF Sampler Tags</a></td></tr>
+<tr class=b>
<td>'tx_USER'</td>
<td>UserText</td>
<td class=c>-</td>
@@ -1469,7 +1500,50 @@ container specification.</p>
<td>&nbsp;</td></tr>
</table></td></tr></table></blockquote>
-<h2><a name='Label'>RIFF Label Tags</a></h2>
+<h2><a name='Instrument'>RIFF Instrument Tags</a></h2>
+<blockquote>
+<table class=frame><tr><td>
+<table class=inner cellspacing=1>
+<tr class=h><th>Index1</th><th>Tag Name</th>
+<th>Writable</th><th>Values / <span class=n>Notes</span></th></tr>
+<tr>
+<td class=r title='0 = 0x0'>0</td>
+<td>UnshiftedNote</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='1 = 0x1'>1</td>
+<td>FineTune</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='2 = 0x2'>2</td>
+<td>Gain</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='3 = 0x3'>3</td>
+<td>LowNote</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='4 = 0x4'>4</td>
+<td>HighNote</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='5 = 0x5'>5</td>
+<td>LowVelocity</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='6 = 0x6'>6</td>
+<td>HighVelocity</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+</table></td></tr></table></blockquote>
+
+<h2><a name='Sampler'>RIFF Sampler Tags</a></h2>
<blockquote>
<table class=frame><tr><td>
<table class=inner cellspacing=1>
@@ -1477,12 +1551,56 @@ container specification.</p>
<th>Writable</th><th>Values / <span class=n>Notes</span></th></tr>
<tr>
<td class=r title='0 = 0x0'>0</td>
-<td>LabelID</td>
+<td>Manufacturer</td>
<td class=c>no</td>
<td>&nbsp;</td></tr>
<tr class=b>
<td class=r title='1 = 0x1'>1</td>
-<td>LabelText</td>
+<td>Product</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='2 = 0x2'>2</td>
+<td>SamplePeriod</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='3 = 0x3'>3</td>
+<td>MIDIUnityNote</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='4 = 0x4'>4</td>
+<td>MIDIPitchFraction</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='5 = 0x5'>5</td>
+<td>SMPTEFormat</td>
+<td class=c>no</td>
+<td><span class=s>0 = none
+ <br>24 = 24 fps
+ <br>25 = 25 fps
+ <br>29 = 29 fps
+ <br>30 = 30 fps</span></td></tr>
+<tr>
+<td class=r title='6 = 0x6'>6</td>
+<td>SMPTEOffset</td>
+<td class=c>no</td>
+<td><span class=s><span class=n>(HH:MM:SS:FF)</span></span></td></tr>
+<tr class=b>
+<td class=r title='7 = 0x7'>7</td>
+<td>NumSampleLoops</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='8 = 0x8'>8</td>
+<td>SamplerDataLen</td>
+<td class=c>no</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='9 = 0x9'>9</td>
+<td>SamplerData</td>
<td class=c>no</td>
<td>&nbsp;</td></tr>
</table></td></tr></table></blockquote>
@@ -1529,7 +1647,7 @@ Extracted only if the ExtractEmbedded option is used.</p>
<hr>
(This document generated automatically by Image::ExifTool::BuildTagLookup)
-<br><i>Last revised Jan 18, 2021</i>
+<br><i>Last revised Apr 22, 2021</i>
<p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p>
</body>
</html>
diff --git a/html/TagNames/Sony.html b/html/TagNames/Sony.html
index bb39d71c..0e39b43b 100644
--- a/html/TagNames/Sony.html
+++ b/html/TagNames/Sony.html
@@ -835,7 +835,7 @@ toward magenta)</span></span></td></tr>
<td title='0x2037 = 8247'>0x2037</td>
<td>FocusFrameSize</td>
<td class=c>no</td>
-<td>&nbsp;</td></tr>
+<td><span class=s><span class=n>(width and height of FocusFrame, centered on FocusLocation)</span></span></td></tr>
<tr class=b>
<td title='0x2039 = 8249'>0x2039</td>
<td>JPEG-HEIFSwitch</td>
@@ -4869,6 +4869,7 @@ multi-frame noise reduction)</span></span></td></tr>
</tr><tr><td>32859</td><td>= Sony FE 20mm F1.8 G</td>
</tr><tr><td>32860</td><td>= Sony FE 12-24mm F2.8 GM</td>
</tr><tr><td>32862</td><td>= Sony FE 50mm F1.2 GM</td>
+</tr><tr><td>32863</td><td>= Sony FE 14mm F1.8 GM</td>
</tr><tr><td>32864</td><td>= Sony FE 28-60mm F4-5.6</td>
</tr><tr><td>32865</td><td>= Sony FE 35mm F1.4 GM</td>
</tr><tr><td>32866</td><td>= Sony FE 24mm F2.8 G</td>
@@ -5319,6 +5320,7 @@ rotation -- the width is always the longer dimension.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -5348,6 +5350,7 @@ rotation -- the width is always the longer dimension.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -5719,6 +5722,7 @@ option is used.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -5748,6 +5752,7 @@ option is used.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -5951,6 +5956,7 @@ option is used.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -5980,6 +5986,7 @@ option is used.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -6169,6 +6176,7 @@ not valid for panorama images.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -6198,6 +6206,7 @@ not valid for panorama images.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -6391,6 +6400,7 @@ WX300, but not for panorama images.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -6420,6 +6430,7 @@ WX300, but not for panorama images.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -6664,6 +6675,7 @@ WX300, but not for panorama images.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -6693,6 +6705,7 @@ WX300, but not for panorama images.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -6882,6 +6895,7 @@ ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-68/77M2.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -6911,6 +6925,7 @@ ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-68/77M2.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -7146,6 +7161,7 @@ ILCE-6300/6500/7RM2/7SM2, ILCA-99M2.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -7175,6 +7191,7 @@ ILCE-6300/6500/7RM2/7SM2, ILCA-99M2.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -7415,6 +7432,7 @@ RX100M5A/RX100M7/HX99.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -7444,6 +7462,7 @@ RX100M5A/RX100M7/HX99.</p>
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -11034,6 +11053,7 @@ ILCE-7/7M2/7M3/7R/7RM2/7RM3/7RM4/7S/7SM2/9/9M2/5000/5100/6000/6100/6300/
<br>33 = Gamma HLG2 (PP10)
<br>34 = Gamma HLG3
<br>37 = FL
+ <br>38 = VV2
<br>39 = IN
<br>40 = SH</td></tr></table>
</td></tr>
@@ -11755,7 +11775,7 @@ some models when the <a href="../ExifTool.html#ExtractEmbedded">ExtractEmbedded<
<hr>
(This document generated automatically by Image::ExifTool::BuildTagLookup)
-<br><i>Last revised Apr 13, 2021</i>
+<br><i>Last revised Apr 22, 2021</i>
<p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p>
</body>
</html>
diff --git a/html/TagNames/index.html b/html/TagNames/index.html
index 14cd2554..98b24f5c 100644
--- a/html/TagNames/index.html
+++ b/html/TagNames/index.html
@@ -10,7 +10,7 @@
<h2 class=top>ExifTool Tag Names</h2>
<p>
The tables listed below give the names of all tags recognized by ExifTool.
-They contain a total of 24118 tags, with 15614 unique tag names.
+They contain a total of 24273 tags, with 15738 unique tag names.
</p>
<blockquote>
<table width='100%' class=frame><tr><td>
@@ -95,6 +95,7 @@ They contain a total of 24118 tags, with 15614 unique tag names.
<a href='DPX.html'>DPX</a><br>
<a href='OpenEXR.html'>OpenEXR</a><br>
<a href='ZISRAW.html'>ZISRAW</a><br>
+<a href='MRC.html'>MRC</a><br>
<a href='MIFF.html'>MIFF</a><br>
<a href='PCX.html'>PCX</a><br>
<a href='PGF.html'>PGF</a><br>
@@ -107,8 +108,8 @@ They contain a total of 24118 tags, with 15614 unique tag names.
<a href='ITC.html'>ITC</a><br>
<a href='FLAC.html'>FLAC</a><br>
<a href='Ogg.html'>Ogg</a><br>
-<a href='Vorbis.html'>Vorbis</a><br>
-<a href='Opus.html'>Opus</a></td><td width='16%'>
+<a href='Vorbis.html'>Vorbis</a></td><td width='16%'>
+<a href='Opus.html'>Opus</a><br>
<a href='Theora.html'>Theora</a><br>
<a href='APE.html'>APE</a><br>
<a href='Audible.html'>Audible</a><br>
@@ -130,8 +131,8 @@ They contain a total of 24118 tags, with 15614 unique tag names.
<a href='ASF.html'>ASF</a><br>
<a href='WTV.html'>WTV</a><br>
<a href='DICOM.html'>DICOM</a><br>
-<a href='FITS.html'>FITS</a><br>
-<a href='HTML.html'>HTML</a></td><td width='16%'>
+<a href='FITS.html'>FITS</a></td><td width='16%'>
+<a href='HTML.html'>HTML</a><br>
<a href='Palm.html'>Palm</a><br>
<a href='Torrent.html'>Torrent</a><br>
<a href='EXE.html'>EXE</a><br>
@@ -233,7 +234,7 @@ ExifTool. A big thanks to everyone who has helped with this so far!)</i>
<hr>
(This document generated automatically by Image::ExifTool::BuildTagLookup)
<br><i>Created Feb 15, 2005</i>
-<br><i>Last revised Apr 13, 2021</i>
+<br><i>Last revised Apr 22, 2021</i>
<p class=lf><a href='../index.html'>&lt;-- Back to ExifTool home page</a></p>
</body>
</html>
diff --git a/html/exiftool_pod.html b/html/exiftool_pod.html
index e52652e2..77e06cdd 100644
--- a/html/exiftool_pod.html
+++ b/html/exiftool_pod.html
@@ -100,47 +100,47 @@
<pre><code> File Types
------------+-------------+-------------+-------------+------------
- 360 r/w | DPX r | ITC r | O r | RAR r
- 3FR r | DR4 r/w/c | J2C r | ODP r | RAW r/w
- 3G2 r/w | DSS r | JNG r/w | ODS r | RIFF r
- 3GP r/w | DV r | JP2 r/w | ODT r | RSRC r
- A r | DVB r/w | JPEG r/w | OFR r | RTF r
- AA r | DVR-MS r | JSON r | OGG r | RW2 r/w
- AAE r | DYLIB r | JXL r | OGV r | RWL r/w
- AAX r/w | EIP r | K25 r | ONP r | RWZ r
- ACR r | EPS r/w | KDC r | OPUS r | RM r
- AFM r | EPUB r | KEY r | ORF r/w | SEQ r
- AI r/w | ERF r/w | LA r | ORI r/w | SKETCH r
- AIFF r | EXE r | LFP r | OTF r | SO r
- APE r | EXIF r/w/c | LNK r | PAC r | SR2 r/w
- ARQ r/w | EXR r | LRV r/w | PAGES r | SRF r
- ARW r/w | EXV r/w/c | M2TS r | PBM r/w | SRW r/w
- ASF r | F4A/V r/w | M4A/V r/w | PCD r | SVG r
- AVI r | FFF r/w | MACOS r | PCX r | SWF r
- AVIF r/w | FITS r | MAX r | PDB r | THM r/w
- AZW r | FLA r | MEF r/w | PDF r/w | TIFF r/w
- BMP r | FLAC r | MIE r/w/c | PEF r/w | TORRENT r
- BPG r | FLIF r/w | MIFF r | PFA r | TTC r
- BTF r | FLV r | MKA r | PFB r | TTF r
- CHM r | FPF r | MKS r | PFM r | TXT r
- COS r | FPX r | MKV r | PGF r | VCF r
- CR2 r/w | GIF r/w | MNG r/w | PGM r/w | VRD r/w/c
- CR3 r/w | GPR r/w | MOBI r | PLIST r | VSD r
- CRM r/w | GZ r | MODD r | PICT r | WAV r
- CRW r/w | HDP r/w | MOI r | PMP r | WDP r/w
- CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBP r
- CSV r | HEIC r/w | MOV r/w | PPM r/w | WEBM r
- CZI r | HEIF r/w | MP3 r | PPT r | WMA r
- DCM r | HTML r | MP4 r/w | PPTX r | WMV r
- DCP r/w | ICC r/w/c | MPC r | PS r/w | WTV r
- DCR r | ICS r | MPG r | PSB r/w | WV r
- DFONT r | IDML r | MPO r/w | PSD r/w | X3F r/w
- DIVX r | IIQ r/w | MQV r/w | PSP r | XCF r
- DJVU r | IND r/w | MRW r/w | QTIF r/w | XLS r
- DLL r | INSP r/w | MXF r | R3D r | XLSX r
- DNG r/w | INSV r | NEF r/w | RA r | XMP r/w/c
- DOC r | INX r | NRW r/w | RAF r/w | ZIP r
- DOCX r | ISO r | NUMBERS r | RAM r |
+ 360 r/w | DPX r | ITC r | NUMBERS r | RAM r
+ 3FR r | DR4 r/w/c | J2C r | O r | RAR r
+ 3G2 r/w | DSS r | JNG r/w | ODP r | RAW r/w
+ 3GP r/w | DV r | JP2 r/w | ODS r | RIFF r
+ A r | DVB r/w | JPEG r/w | ODT r | RSRC r
+ AA r | DVR-MS r | JSON r | OFR r | RTF r
+ AAE r | DYLIB r | JXL r | OGG r | RW2 r/w
+ AAX r/w | EIP r | K25 r | OGV r | RWL r/w
+ ACR r | EPS r/w | KDC r | ONP r | RWZ r
+ AFM r | EPUB r | KEY r | OPUS r | RM r
+ AI r/w | ERF r/w | LA r | ORF r/w | SEQ r
+ AIFF r | EXE r | LFP r | ORI r/w | SKETCH r
+ APE r | EXIF r/w/c | LNK r | OTF r | SO r
+ ARQ r/w | EXR r | LRV r/w | PAC r | SR2 r/w
+ ARW r/w | EXV r/w/c | M2TS r | PAGES r | SRF r
+ ASF r | F4A/V r/w | M4A/V r/w | PBM r/w | SRW r/w
+ AVI r | FFF r/w | MACOS r | PCD r | SVG r
+ AVIF r/w | FITS r | MAX r | PCX r | SWF r
+ AZW r | FLA r | MEF r/w | PDB r | THM r/w
+ BMP r | FLAC r | MIE r/w/c | PDF r/w | TIFF r/w
+ BPG r | FLIF r/w | MIFF r | PEF r/w | TORRENT r
+ BTF r | FLV r | MKA r | PFA r | TTC r
+ CHM r | FPF r | MKS r | PFB r | TTF r
+ COS r | FPX r | MKV r | PFM r | TXT r
+ CR2 r/w | GIF r/w | MNG r/w | PGF r | VCF r
+ CR3 r/w | GPR r/w | MOBI r | PGM r/w | VRD r/w/c
+ CRM r/w | GZ r | MODD r | PLIST r | VSD r
+ CRW r/w | HDP r/w | MOI r | PICT r | WAV r
+ CS1 r/w | HDR r | MOS r/w | PMP r | WDP r/w
+ CSV r | HEIC r/w | MOV r/w | PNG r/w | WEBP r
+ CZI r | HEIF r/w | MP3 r | PPM r/w | WEBM r
+ DCM r | HTML r | MP4 r/w | PPT r | WMA r
+ DCP r/w | ICC r/w/c | MPC r | PPTX r | WMV r
+ DCR r | ICS r | MPG r | PS r/w | WTV r
+ DFONT r | IDML r | MPO r/w | PSB r/w | WV r
+ DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
+ DJVU r | IND r/w | MRC r | PSP r | XCF r
+ DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
+ DNG r/w | INSV r | MXF r | R3D r | XLSX r
+ DOC r | INX r | NEF r/w | RA r | XMP r/w/c
+ DOCX r | ISO r | NRW r/w | RAF r/w | ZIP r
Meta Information
----------------------+----------------------+---------------------
@@ -685,7 +685,7 @@
<p>produces output like this:</p>
-<pre><code> -- Generated by ExifTool 12.24 --
+<pre><code> -- Generated by ExifTool 12.25 --
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
diff --git a/html/exiftool_pod.pdf b/html/exiftool_pod.pdf
index 8448225c..5c382116 100644
--- a/html/exiftool_pod.pdf
+++ b/html/exiftool_pod.pdf
@@ -12,7 +12,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 1)Tj
+( -- ExifTool 12.25 -- 1)Tj
/TT4 1 Tf
0 -1.6333 TD
(EXIFTOOL\(1\) User Contributed Perl Documentation EXIFTOOL\(1\))Tj
@@ -577,39 +577,39 @@ T*
0 -1.1 TD
( ------------+-------------+-------------+-------------+------------)Tj
T*
-( 360 r/w | DPX r | ITC r | O r | RAR r)Tj
+( 360 r/w | DPX r | ITC r | NUMBERS r | RAM r)Tj
T*
-( 3FR r | DR4 r/w/c | J2C r | ODP r | RAW r/w)Tj
+( 3FR r | DR4 r/w/c | J2C r | O r | RAR r)Tj
T*
-( 3G2 r/w | DSS r | JNG r/w | ODS r | RIFF r)Tj
+( 3G2 r/w | DSS r | JNG r/w | ODP r | RAW r/w)Tj
T*
-( 3GP r/w | DV r | JP2 r/w | ODT r | RSRC r)Tj
+( 3GP r/w | DV r | JP2 r/w | ODS r | RIFF r)Tj
T*
-( A r | DVB r/w | JPEG r/w | OFR r | RTF r)Tj
+( A r | DVB r/w | JPEG r/w | ODT r | RSRC r)Tj
T*
-( AA r | DVR-MS r | JSON r | OGG r | RW2 r/w)Tj
+( AA r | DVR-MS r | JSON r | OFR r | RTF r)Tj
T*
-( AAE r | DYLIB r | JXL r | OGV r | RWL r/w)Tj
+( AAE r | DYLIB r | JXL r | OGG r | RW2 r/w)Tj
T*
-( AAX r/w | EIP r | K25 r | ONP r | RWZ r)Tj
+( AAX r/w | EIP r | K25 r | OGV r | RWL r/w)Tj
T*
-( ACR r | EPS r/w | KDC r | OPUS r | RM r)Tj
+( ACR r | EPS r/w | KDC r | ONP r | RWZ r)Tj
T*
-( AFM r | EPUB r | KEY r | ORF r/w | SEQ r)Tj
+( AFM r | EPUB r | KEY r | OPUS r | RM r)Tj
T*
-( AI r/w | ERF r/w | LA r | ORI r/w | SKETCH r)Tj
+( AI r/w | ERF r/w | LA r | ORF r/w | SEQ r)Tj
T*
-( AIFF r | EXE r | LFP r | OTF r | SO r)Tj
+( AIFF r | EXE r | LFP r | ORI r/w | SKETCH r)Tj
T*
-( APE r | EXIF r/w/c | LNK r | PAC r | SR2 r/w)Tj
+( APE r | EXIF r/w/c | LNK r | OTF r | SO r)Tj
T*
-( ARQ r/w | EXR r | LRV r/w | PAGES r | SRF r)Tj
+( ARQ r/w | EXR r | LRV r/w | PAC r | SR2 r/w)Tj
T*
-( ARW r/w | EXV r/w/c | M2TS r | PBM r/w | SRW r/w)Tj
+( ARW r/w | EXV r/w/c | M2TS r | PAGES r | SRF r)Tj
T*
-( ASF r | F4A/V r/w | M4A/V r/w | PCD r | SVG r)Tj
+( ASF r | F4A/V r/w | M4A/V r/w | PBM r/w | SRW r/w)Tj
T*
-( AVI r | FFF r/w | MACOS r | PCX r | SWF r)Tj
+( AVI r | FFF r/w | MACOS r | PCD r | SVG r)Tj
ET
endstream
endobj
@@ -627,7 +627,7 @@ endobj
endobj
9 0 obj
<<
-/Length 5402
+/Length 5410
>>
stream
BT
@@ -637,56 +637,56 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 2)Tj
+( -- ExifTool 12.25 -- 2)Tj
/TT4 1 Tf
0 -1.6333 TD
-( AVIF r/w | FITS r | MAX r | PDB r | THM r/w)Tj
+( AVIF r/w | FITS r | MAX r | PCX r | SWF r)Tj
0 -1.1 TD
-( AZW r | FLA r | MEF r/w | PDF r/w | TIFF r/w)Tj
+( AZW r | FLA r | MEF r/w | PDB r | THM r/w)Tj
T*
-( BMP r | FLAC r | MIE r/w/c | PEF r/w | TORRENT r)Tj
+( BMP r | FLAC r | MIE r/w/c | PDF r/w | TIFF r/w)Tj
T*
-( BPG r | FLIF r/w | MIFF r | PFA r | TTC r)Tj
+( BPG r | FLIF r/w | MIFF r | PEF r/w | TORRENT r)Tj
T*
-( BTF r | FLV r | MKA r | PFB r | TTF r)Tj
+( BTF r | FLV r | MKA r | PFA r | TTC r)Tj
T*
-( CHM r | FPF r | MKS r | PFM r | TXT r)Tj
+( CHM r | FPF r | MKS r | PFB r | TTF r)Tj
T*
-( COS r | FPX r | MKV r | PGF r | VCF r)Tj
+( COS r | FPX r | MKV r | PFM r | TXT r)Tj
T*
-( CR2 r/w | GIF r/w | MNG r/w | PGM r/w | VRD r/w/c)Tj
+( CR2 r/w | GIF r/w | MNG r/w | PGF r | VCF r)Tj
T*
-( CR3 r/w | GPR r/w | MOBI r | PLIST r | VSD r)Tj
+( CR3 r/w | GPR r/w | MOBI r | PGM r/w | VRD r/w/c)Tj
T*
-( CRM r/w | GZ r | MODD r | PICT r | WAV r)Tj
+( CRM r/w | GZ r | MODD r | PLIST r | VSD r)Tj
T*
-( CRW r/w | HDP r/w | MOI r | PMP r | WDP r/w)Tj
+( CRW r/w | HDP r/w | MOI r | PICT r | WAV r)Tj
T*
-( CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBP r)Tj
+( CS1 r/w | HDR r | MOS r/w | PMP r | WDP r/w)Tj
T*
-( CSV r | HEIC r/w | MOV r/w | PPM r/w | WEBM r)Tj
+( CSV r | HEIC r/w | MOV r/w | PNG r/w | WEBP r)Tj
T*
-( CZI r | HEIF r/w | MP3 r | PPT r | WMA r)Tj
+( CZI r | HEIF r/w | MP3 r | PPM r/w | WEBM r)Tj
T*
-( DCM r | HTML r | MP4 r/w | PPTX r | WMV r)Tj
+( DCM r | HTML r | MP4 r/w | PPT r | WMA r)Tj
T*
-( DCP r/w | ICC r/w/c | MPC r | PS r/w | WTV r)Tj
+( DCP r/w | ICC r/w/c | MPC r | PPTX r | WMV r)Tj
T*
-( DCR r | ICS r | MPG r | PSB r/w | WV r)Tj
+( DCR r | ICS r | MPG r | PS r/w | WTV r)Tj
T*
-( DFONT r | IDML r | MPO r/w | PSD r/w | X3F r/w)Tj
+( DFONT r | IDML r | MPO r/w | PSB r/w | WV r)Tj
T*
-( DIVX r | IIQ r/w | MQV r/w | PSP r | XCF r)Tj
+( DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w)Tj
T*
-( DJVU r | IND r/w | MRW r/w | QTIF r/w | XLS r)Tj
+( DJVU r | IND r/w | MRC r | PSP r | XCF r)Tj
T*
-( DLL r | INSP r/w | MXF r | R3D r | XLSX r)Tj
+( DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r)Tj
T*
-( DNG r/w | INSV r | NEF r/w | RA r | XMP r/w/c)Tj
+( DNG r/w | INSV r | MXF r | R3D r | XLSX r)Tj
T*
-( DOC r | INX r | NRW r/w | RAF r/w | ZIP r)Tj
+( DOC r | INX r | NEF r/w | RA r | XMP r/w/c)Tj
T*
-( DOCX r | ISO r | NUMBERS r | RAM r |)Tj
+( DOCX r | ISO r | NRW r/w | RAF r/w | ZIP r)Tj
0 -2.2 TD
( Meta Information)Tj
0 -1.1 TD
@@ -834,7 +834,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 3)Tj
+( -- ExifTool 12.25 -- 3)Tj
/TT4 1 Tf
0 -1.6333 TD
( -charset [[TYPE=]CHARSET] Specify encoding for special characters)Tj
@@ -991,7 +991,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 4)Tj
+( -- ExifTool 12.25 -- 4)Tj
/TT4 1 Tf
0 -1.6333 TD
( -globalTimeShift SHIFT Shift all formatted date/time values)Tj
@@ -1282,7 +1282,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 5)Tj
+( -- ExifTool 12.25 -- 5)Tj
/TT4 1 Tf
0 -1.6333 TD
( the -)Tj
@@ -1615,7 +1615,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 6)Tj
+( -- ExifTool 12.25 -- 6)Tj
/TT4 1 Tf
0 -1.6333 TD
( deletable Time tags except those in the EXIF. This difference)Tj
@@ -2052,7 +2052,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 7)Tj
+( -- ExifTool 12.25 -- 7)Tj
/TT4 1 Tf
0 -1.6333 TD
( specified for each copied tag. With this feature, information may)Tj
@@ -2539,7 +2539,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 8)Tj
+( -- ExifTool 12.25 -- 8)Tj
/TT4 1 Tf
0 -1.6333 TD
( groups of tags from a file containing redundant information, it)Tj
@@ -3042,7 +3042,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 9)Tj
+( -- ExifTool 12.25 -- 9)Tj
/TT4 1 Tf
0 -1.6333 TD
( "unsafe". For instance, the FileName and Directory tags are)Tj
@@ -3463,7 +3463,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 10)Tj
+( -- ExifTool 12.25 -- 10)Tj
/TT4 1 Tf
0 -1.6333 TD
( Vietnam cp1258 Windows Vietnamese)Tj
@@ -3748,7 +3748,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 11)Tj
+( -- ExifTool 12.25 -- 11)Tj
/TT4 1 Tf
0 -1.6333 TD
( names, the duplicate tags are only included in the CSV output if)Tj
@@ -4221,7 +4221,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 12)Tj
+( -- ExifTool 12.25 -- 12)Tj
/TT4 1 Tf
0 -1.6333 TD
( option, a dash \("-"\) is printed for the value of any missing tag,)Tj
@@ -4838,7 +4838,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 13)Tj
+( -- ExifTool 12.25 -- 13)Tj
/TT4 1 Tf
0 -1.6333 TD
( UTF-8 regardless of any -)Tj
@@ -5227,7 +5227,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 14)Tj
+( -- ExifTool 12.25 -- 14)Tj
/TT4 1 Tf
0 -2.7333 TD
( push @INC, 'lib';)Tj
@@ -5492,7 +5492,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 15)Tj
+( -- ExifTool 12.25 -- 15)Tj
/TT4 1 Tf
0 -1.6333 TD
( A section is defined as a group of consecutive files with the same)Tj
@@ -5525,7 +5525,7 @@ T*
T*
( produces output like this:)Tj
T*
-( -- Generated by ExifTool 12.24 --)Tj
+( -- Generated by ExifTool 12.25 --)Tj
0 -1.1 TD
( File: a.jpg - 2003:10:31 15:44:19)Tj
T*
@@ -5871,7 +5871,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 16)Tj
+( -- ExifTool 12.25 -- 16)Tj
/TT4 1 Tf
0 -1.6333 TD
( to column-align values.)Tj
@@ -6414,7 +6414,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 17)Tj
+( -- ExifTool 12.25 -- 17)Tj
/TT4 1 Tf
0 -1.6333 TD
( the source file extension \(including the '.'\) with the specified)Tj
@@ -6645,7 +6645,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 18)Tj
+( -- ExifTool 12.25 -- 18)Tj
/TT4 1 Tf
0 -1.6333 TD
( For %d and %D, the field width/position specifiers may be applied)Tj
@@ -6876,7 +6876,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 19)Tj
+( -- ExifTool 12.25 -- 19)Tj
/TT4 1 Tf
0 -1.6333 TD
( the output file \(based on the format of the data\). The %g code)Tj
@@ -7383,7 +7383,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 20)Tj
+( -- ExifTool 12.25 -- 20)Tj
/TT4 1 Tf
0 -1.6333 TD
( -)Tj
@@ -7884,7 +7884,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 21)Tj
+( -- ExifTool 12.25 -- 21)Tj
/TT4 1 Tf
0 -1.6333 TD
( that exiftool will automatically fix the offsets for images which)Tj
@@ -8441,7 +8441,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 22)Tj
+( -- ExifTool 12.25 -- 22)Tj
/TT4 1 Tf
0 -1.6333 TD
( character to disable print conversion. The expression $GROUP:all)Tj
@@ -8756,7 +8756,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 23)Tj
+( -- ExifTool 12.25 -- 23)Tj
/TT4 1 Tf
0 -1.6333 TD
( with minor errors and disables some validation checks which could)Tj
@@ -9311,7 +9311,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 24)Tj
+( -- ExifTool 12.25 -- 24)Tj
/TT4 1 Tf
0 -1.6333 TD
( necessary.)Tj
@@ -9886,7 +9886,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 25)Tj
+( -- ExifTool 12.25 -- 25)Tj
/TT4 1 Tf
0 -1.6333 TD
( to tags with numerical tag ID's, and causes tag names like)Tj
@@ -10267,7 +10267,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 26)Tj
+( -- ExifTool 12.25 -- 26)Tj
/TT4 1 Tf
0 -1.6333 TD
( used to prevent the command window from closing when run as a)Tj
@@ -10872,7 +10872,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 27)Tj
+( -- ExifTool 12.25 -- 27)Tj
/TT4 1 Tf
0 -1.6333 TD
( they are supported by the destination metadata format\):)Tj
@@ -11239,7 +11239,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 28)Tj
+( -- ExifTool 12.25 -- 28)Tj
/TT4 1 Tf
0 -1.6333 TD
( -)Tj
@@ -11906,7 +11906,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 29)Tj
+( -- ExifTool 12.25 -- 29)Tj
/TT4 1 Tf
0 -1.6333 TD
( -)Tj
@@ -12539,7 +12539,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 30)Tj
+( -- ExifTool 12.25 -- 30)Tj
/TT4 1 Tf
0 -1.6333 TD
( per line \(see the -)Tj
@@ -13096,7 +13096,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 31)Tj
+( -- ExifTool 12.25 -- 31)Tj
/TT4 1 Tf
0 -1.6333 TD
( with spaces translated to underlines, and multiple consecutive)Tj
@@ -13295,7 +13295,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 32)Tj
+( -- ExifTool 12.25 -- 32)Tj
/TT4 1 Tf
0 -1.6333 TD
( valid ExifTool character set, preferably "UTF8" \(see the -)Tj
@@ -13804,7 +13804,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 33)Tj
+( -- ExifTool 12.25 -- 33)Tj
/TT4 1 Tf
0 -1.6333 TD
( quotes as below around arguments containing special characters.)Tj
@@ -13941,7 +13941,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 34)Tj
+( -- ExifTool 12.25 -- 34)Tj
/TT4 1 Tf
0 -2.7333 TD
( exiftool -icc_profile -b -w icc image.jpg)Tj
@@ -14108,7 +14108,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 35)Tj
+( -- ExifTool 12.25 -- 35)Tj
/TT4 1 Tf
0 -1.6333 TD
( exiftool -r -XMP-crss:all= DIR)Tj
@@ -14275,7 +14275,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 36)Tj
+( -- ExifTool 12.25 -- 36)Tj
/TT4 1 Tf
0 -1.6333 TD
( Copy the values of all writable tags from "src.cr2" to "dst.jpg",)Tj
@@ -14444,7 +14444,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 37)Tj
+( -- ExifTool 12.25 -- 37)Tj
/TT4 1 Tf
0 -1.6333 TD
( Recursively rewrite all "JPG" images in "dir" with information)Tj
@@ -14691,7 +14691,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 38)Tj
+( -- ExifTool 12.25 -- 38)Tj
/TT4 1 Tf
0 -1.6333 TD
( exiftool -o . '-Directory<DateTimeOriginal' -d %Y/%m/%d dir)Tj
@@ -14868,7 +14868,7 @@ BT
/GS1 gs
0 Tc
0 Tw
-( -- ExifTool 12.24 -- 39)Tj
+( -- ExifTool 12.25 -- 39)Tj
/TT4 1 Tf
0 -1.6333 TD
( exiftool -xmp:geotag=track.log a.jpg)Tj
@@ -15243,7 +15243,7 @@ T*
0.6 0 TD
(s\(3pm\), Image::ExifTool::Shift.pl)Tj
-19.2 -4.4 TD
-(perl v5.18.4 2021-04-13 EXIFTOOL\(1\))Tj
+(perl v5.18.4 2021-04-22 EXIFTOOL\(1\))Tj
ET
endstream
endobj
@@ -15703,8 +15703,8 @@ endobj
endobj
130 0 obj
<<
-/CreationDate (D:20210413110921-04'00')
-/ModDate (D:20210413110921-04'00')
+/CreationDate (D:20210422145337-04'00')
+/ModDate (D:20210422145337-04'00')
/Producer (Apple pstopdf)
>>
endobj
@@ -15718,144 +15718,144 @@ endobj
xref
0 132
0000000000 65535 f
-0000263482 00000 n
+0000263490 00000 n
0000000016 00000 n
0000007982 00000 n
-0000262493 00000 n
-0000262882 00000 n
-0000261958 00000 n
-0000266848 00000 n
-0000263562 00000 n
+0000262501 00000 n
+0000262890 00000 n
+0000261966 00000 n
+0000266856 00000 n
+0000263570 00000 n
0000008088 00000 n
-0000013542 00000 n
-0000263643 00000 n
-0000013649 00000 n
-0000019012 00000 n
-0000263726 00000 n
-0000019119 00000 n
-0000025091 00000 n
-0000263809 00000 n
-0000025198 00000 n
-0000031663 00000 n
-0000263892 00000 n
-0000031770 00000 n
-0000039178 00000 n
-0000263975 00000 n
-0000039285 00000 n
-0000047018 00000 n
-0000264058 00000 n
-0000047125 00000 n
-0000054575 00000 n
-0000264141 00000 n
-0000054682 00000 n
-0000061627 00000 n
-0000264224 00000 n
-0000061734 00000 n
-0000067788 00000 n
-0000264307 00000 n
-0000067895 00000 n
-0000075359 00000 n
-0000267398 00000 n
-0000266983 00000 n
-0000264391 00000 n
-0000075466 00000 n
-0000084422 00000 n
-0000264475 00000 n
-0000084529 00000 n
-0000090983 00000 n
-0000264559 00000 n
-0000091090 00000 n
-0000096210 00000 n
-0000264643 00000 n
-0000096317 00000 n
-0000102427 00000 n
-0000264727 00000 n
-0000102534 00000 n
-0000110582 00000 n
-0000264811 00000 n
-0000110689 00000 n
-0000115893 00000 n
-0000264895 00000 n
-0000116000 00000 n
-0000121666 00000 n
-0000264979 00000 n
-0000121773 00000 n
-0000129502 00000 n
-0000265063 00000 n
-0000129609 00000 n
-0000137358 00000 n
-0000265147 00000 n
-0000137465 00000 n
-0000145859 00000 n
-0000267121 00000 n
-0000265231 00000 n
-0000145966 00000 n
-0000152027 00000 n
-0000265315 00000 n
-0000152134 00000 n
-0000160421 00000 n
-0000265399 00000 n
-0000160528 00000 n
-0000168651 00000 n
-0000265483 00000 n
-0000168758 00000 n
-0000174946 00000 n
-0000265567 00000 n
-0000175053 00000 n
-0000183686 00000 n
-0000265651 00000 n
-0000183793 00000 n
-0000190089 00000 n
-0000265735 00000 n
-0000190196 00000 n
-0000198994 00000 n
-0000265819 00000 n
-0000199101 00000 n
-0000207677 00000 n
-0000265903 00000 n
-0000207784 00000 n
-0000215814 00000 n
-0000265987 00000 n
-0000215921 00000 n
-0000220349 00000 n
-0000267259 00000 n
-0000266073 00000 n
-0000220457 00000 n
-0000227663 00000 n
-0000266161 00000 n
-0000227771 00000 n
-0000231879 00000 n
-0000266249 00000 n
-0000231987 00000 n
-0000236363 00000 n
-0000266337 00000 n
-0000236471 00000 n
-0000240812 00000 n
-0000266425 00000 n
-0000240920 00000 n
-0000245721 00000 n
-0000266513 00000 n
-0000245829 00000 n
-0000251306 00000 n
-0000266601 00000 n
-0000251414 00000 n
-0000256192 00000 n
-0000266689 00000 n
-0000256300 00000 n
-0000261850 00000 n
-0000262098 00000 n
-0000262301 00000 n
-0000266777 00000 n
-0000266806 00000 n
-0000267504 00000 n
-0000267628 00000 n
+0000013550 00000 n
+0000263651 00000 n
+0000013657 00000 n
+0000019020 00000 n
+0000263734 00000 n
+0000019127 00000 n
+0000025099 00000 n
+0000263817 00000 n
+0000025206 00000 n
+0000031671 00000 n
+0000263900 00000 n
+0000031778 00000 n
+0000039186 00000 n
+0000263983 00000 n
+0000039293 00000 n
+0000047026 00000 n
+0000264066 00000 n
+0000047133 00000 n
+0000054583 00000 n
+0000264149 00000 n
+0000054690 00000 n
+0000061635 00000 n
+0000264232 00000 n
+0000061742 00000 n
+0000067796 00000 n
+0000264315 00000 n
+0000067903 00000 n
+0000075367 00000 n
+0000267406 00000 n
+0000266991 00000 n
+0000264399 00000 n
+0000075474 00000 n
+0000084430 00000 n
+0000264483 00000 n
+0000084537 00000 n
+0000090991 00000 n
+0000264567 00000 n
+0000091098 00000 n
+0000096218 00000 n
+0000264651 00000 n
+0000096325 00000 n
+0000102435 00000 n
+0000264735 00000 n
+0000102542 00000 n
+0000110590 00000 n
+0000264819 00000 n
+0000110697 00000 n
+0000115901 00000 n
+0000264903 00000 n
+0000116008 00000 n
+0000121674 00000 n
+0000264987 00000 n
+0000121781 00000 n
+0000129510 00000 n
+0000265071 00000 n
+0000129617 00000 n
+0000137366 00000 n
+0000265155 00000 n
+0000137473 00000 n
+0000145867 00000 n
+0000267129 00000 n
+0000265239 00000 n
+0000145974 00000 n
+0000152035 00000 n
+0000265323 00000 n
+0000152142 00000 n
+0000160429 00000 n
+0000265407 00000 n
+0000160536 00000 n
+0000168659 00000 n
+0000265491 00000 n
+0000168766 00000 n
+0000174954 00000 n
+0000265575 00000 n
+0000175061 00000 n
+0000183694 00000 n
+0000265659 00000 n
+0000183801 00000 n
+0000190097 00000 n
+0000265743 00000 n
+0000190204 00000 n
+0000199002 00000 n
+0000265827 00000 n
+0000199109 00000 n
+0000207685 00000 n
+0000265911 00000 n
+0000207792 00000 n
+0000215822 00000 n
+0000265995 00000 n
+0000215929 00000 n
+0000220357 00000 n
+0000267267 00000 n
+0000266081 00000 n
+0000220465 00000 n
+0000227671 00000 n
+0000266169 00000 n
+0000227779 00000 n
+0000231887 00000 n
+0000266257 00000 n
+0000231995 00000 n
+0000236371 00000 n
+0000266345 00000 n
+0000236479 00000 n
+0000240820 00000 n
+0000266433 00000 n
+0000240928 00000 n
+0000245729 00000 n
+0000266521 00000 n
+0000245837 00000 n
+0000251314 00000 n
+0000266609 00000 n
+0000251422 00000 n
+0000256200 00000 n
+0000266697 00000 n
+0000256308 00000 n
+0000261858 00000 n
+0000262106 00000 n
+0000262309 00000 n
+0000266785 00000 n
+0000266814 00000 n
+0000267512 00000 n
+0000267636 00000 n
trailer
<<
/Size 132
/Root 131 0 R
/Info 130 0 R
-/ID [<88f6ccfb20ef49d8fb5d8a90914f5aa9><88f6ccfb20ef49d8fb5d8a90914f5aa9>]
+/ID [<b3d1dc5ae4b0d68c4a17df38172d68bb><b3d1dc5ae4b0d68c4a17df38172d68bb>]
>>
startxref
-267700
+267708
%%EOF
diff --git a/html/history.html b/html/history.html
index ae5b647f..24533f51 100644
--- a/html/history.html
+++ b/html/history.html
@@ -17,6 +17,28 @@ considered development releases, and are not uploaded to <a href="https://metacp
<!-- Use line width of 80 -->
<!-- *********************************************************************** -->
+<a name='v12.25'><b>Apr. 22, 2021 - Version 12.25</b></a>
+<ul>
+<li>JPEG XL support is now official
+<li>Added read support for Medical Research Council (MRC) image files
+<li>Added ability to write a number of 3gp tags in video files
+<li>Added a new Sony PictureProfile value (thanks Jos Roost)
+<li>Added a new Sony LensType (thanks LibRaw)
+<li>Added a new Nikon LensID (thanks Niels Kristian Bech Jensen)
+<li>Added a new Canon LensType
+<li>Decode more GPS information from Blackvue dashcam videos
+<li>Decode a couple of new NikonSettings tags (thanks Warren Hatch)
+<li>Decode a few new RIFF tags
+<li>Improved Validate option to add minor warning if standard XMP is missing
+ xpacket wrapper
+<li>Avoid decoding some large arrays in DNG images to improve performance unless
+ the -m option is used
+<li>Patched bug that could give runtime warning when trying to write an empty
+ XMP structure
+<li>Fixed decoding of ImageWidth/Height for JPEG XL images
+<li>Fixed problem were Microsoft Xtra tags couldn't be deleted
+</ul>
+
<a name='v12.24'><b>Apr. 13, 2021 - Version 12.24</b></a>
<ul>
<li>Added a new PhaseOne RawFormat value (thanks LibRaw)
@@ -26,7 +48,7 @@ considered development releases, and are not uploaded to <a href="https://metacp
<li>Updated acdsee.config in distribution (thanks StarGeek)
<li>Recognize AutoCAD DXF files
<li>More work on experimental JUMBF read support
-<li>More work on experimental JXL read/write support
+<li>More work on experimental JPEG XL read/write support
</ul>
<a name='v12.23'><b>Apr. 1, 2021 - Version 12.23</b></a>
diff --git a/html/index.html b/html/index.html
index 725aca3c..b90b9068 100644
--- a/html/index.html
+++ b/html/index.html
@@ -39,7 +39,13 @@ table.links th.rt { border-right: 0 }
table.dl { border: 1px solid gray; border-collapse: collapse }
table.dl td { padding: .4em .8em }
table.bm { margin: 0 0 .35em 0 }
-span.sup { font-size: 0.8em; font-weight: normal; position: relative; top: -.4em; }
+table.sticky { border-collapse: separate; border-spacing: 0 }
+table.sticky th { position: sticky; top: 0; background: #ddd; z-index: 1; border-top: 1px solid gray;
+ border-bottom: 1px solid gray; border-right: 1px solid gray }
+table.sticky td { border-bottom: 1px solid gray; border-right: 1px solid gray }
+table.sticky th:first-child,
+table.sticky td:first-child { border-left: 1px solid gray}
+span.sup { font-size: 0.8em; font-weight: normal; position: relative; top: -.4em }
-->
</style>
</head>
@@ -81,9 +87,9 @@ span.sup { font-size: 0.8em; font-weight: normal; position: relative; top
</div>
<blockquote><table class='dl lg'><tr><td><b>
-<a href="http://sourceforge.net/projects/exiftool/files/Image-ExifTool-12.24.tar.gz/download">
-Download Version 12.24</a> (4.7 MB) -
-<a href="history.html">Apr. 13, 2021</a></b></td></tr></table></blockquote>
+<a href="http://sourceforge.net/projects/exiftool/files/Image-ExifTool-12.25.tar.gz/download">
+Download Version 12.25</a> (4.7 MB) -
+<a href="history.html">Apr. 22, 2021</a></b></td></tr></table></blockquote>
<p><b>ExifTool is a platform-independent <a href="ExifTool.html">Perl
library</a> plus a <a href="exiftool_pod.html">command-line application</a> for
@@ -136,8 +142,8 @@ distribution above.)</i></p>
<blockquote><table class='dl lg'><tr><td><b>
<a name="alone">Windows Executable:</a>
-<a href="http://sourceforge.net/projects/exiftool/files/exiftool-12.24.zip/download">
- exiftool-12.24.zip</a> (6.4 MB)</b></td></tr></table></blockquote>
+<a href="http://sourceforge.net/projects/exiftool/files/exiftool-12.25.zip/download">
+ exiftool-12.25.zip</a> (6.4 MB)</b></td></tr></table></blockquote>
<p><b>The stand-alone Windows executable</b> does not require Perl. Just
download and un-zip the archive then double-click on
@@ -155,7 +161,7 @@ if you have any problems/comments with this version.)</i></p>
<blockquote><table class='dl lg'><tr><td><b>
MacOS Package:
<a href="http://sourceforge.net/projects/exiftool/files/ExifTool-9.70.dmg/download">
- ExifTool-12.24.dmg</a> (3.0 MB)</b></td></tr></table></blockquote>
+ ExifTool-12.25.dmg</a> (3.0 MB)</b></td></tr></table></blockquote>
<p><b>The MacOS package</b> installs the ExifTool command-line application and
libraries in /usr/local/bin. After installing, type "<code>exiftool</code>" in a
@@ -280,7 +286,7 @@ suck the last bit of metadata out of whatever image file you throw at it!"</i> -
<p>ExifTool can <b>R</b>ead, <b>W</b>rite and/or <b>C</b>reate files in the following formats.
Also listed are the support levels for EXIF, IPTC, XMP, ICC_Profile and other metadata types
for each file format.</p>
-<blockquote class=s><table class='norm tight sm bm'>
+<blockquote class=s><table class='sticky tight sm bm'>
<tr><th>File Type</th><th>Support</th><th>Description</th><th><a href="TagNames/EXIF.html">EXIF</a></th><th><a href="TagNames/IPTC.html">IPTC</a></th><th><a href="TagNames/XMP.html">XMP</a></th><th><a href="TagNames/ICC_Profile.html">ICC</a><span class=sup>1</span></th><th>Other</th></tr>
<tr><td>360</td><td>R/W</td><td>GoPro 360 video (<a href="TagNames/QuickTime.html">QuickTime</a>-based)</td><td>R/W<span class=sup>3</span></td><td>R/W<span class=sup>3</span></td><td>R/W/C</td><td>-</td><td>R/W/C <a href="TagNames/QuickTime.html">QuickTime</a>, R <a href="TagNames/GoPro.html#GPMF">GoPro</a></td></tr>
<tr><td>3FR</td><td>R</td><td>Hasselblad RAW (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R</td><td>R</td><td>R</td><td>R</td><td>-</td></tr>
@@ -368,8 +374,7 @@ for each file format.</p>
<tr><td><a href="TagNames/Jpeg2000.html">JP2, JPF, JPM, JPX</a></td><td>R/W</td><td>JPEG 2000 image [Compound/Extended]</td><td>R/W/C<span class=sup>3</span></td><td>R/W/C<span class=sup>3</span></td><td>R/W/C</td><td>R</td><td>R/W/C <a href="TagNames/Jpeg2000.html">Jpeg2000</a>, R <a href="TagNames/Photoshop.html">Photoshop</a><span class=sup>3</span></td></tr>
<tr><td><a href="TagNames/JPEG.html">JPEG, JPG, JPE</a></td><td>R/W</td><td>Joint Photographic Experts Group image</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td><a href="#JPEG">Supported JPEG Meta Information</a></td></tr>
<tr><td><a href="TagNames/JSON.html">JSON</a></td><td>R</td><td>JavaScript Object Notation</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/JSON.html">JSON</a></td></tr>
-<tr><td>JXL</td><td>R/W</td><td>JPEG XL in ISO BMFF container</td><td>R/W/C</td><td>-</td><td>R/W/C</td><td>-</td><td>-</td></tr>
-<tr><td>JXL</td><td>R</td><td>JPEG XL Codestream</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
+<tr><td>JXL</td><td>R/W</td><td>JPEG XL (codestream and ISO BMFF)</td><td>R/W/C</td><td>-</td><td>R/W/C</td><td>-</td><td>-</td></tr>
<tr><td>K25</td><td>R</td><td>Kodak DC25 RAW (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R</td><td>R</td><td>R</td><td>R</td><td>-</td></tr>
<tr><td>KDC</td><td>R</td><td>Kodak Digital Camera RAW (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R</td><td>R</td><td>R</td><td>R</td><td>R <a href="TagNames/Kodak.html">Kodak</a></td></tr>
<tr><td><a href="TagNames/iWork.html">KEY, KTH</a></td><td>R</td><td>Apple iWork '09 Keynote presentation/Theme</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/iWork.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr>
@@ -397,6 +402,7 @@ for each file format.</p>
<tr><td>MPO</td><td>R/W</td><td>Extended Multi-Picture format (<a href="TagNames/JPEG.html">JPEG</a> with <a href="TagNames/MPF.html">MPF</a> extensions)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td><a href="#JPEG">Supported JPEG Meta Information</a></td></tr>
<tr><td><a href="TagNames/QuickTime.html">MQV</a></td><td>R/W</td><td>Sony Mobile QuickTime Video</td><td>R/W<span class=sup>3</span></td><td>R/W<span class=sup>3</span></td><td>R/W/C</td><td>-</td><td>R/W/C <a href="TagNames/QuickTime.html">QuickTime</a></td></tr>
<tr><td><a href="TagNames/MinoltaRaw.html">MRW</a></td><td>R/W</td><td>Minolta RAW</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/MinoltaRaw.html">MinoltaRaw</a> <a href="TagNames/Minolta.html">Minolta</a></td></tr>
+<tr><td><a href="TagNames/MRC.html">MRC</a></td><td>R</td><td>Medical Research Council</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/MRC.html">MRC</a></td></tr>
<tr><td><a href="TagNames/MXF.html">MXF</a></td><td>R</td><td>Material Exchange Format</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/MXF.html">MXF</a></td></tr>
<tr><td>NEF</td><td>R/W</td><td>Nikon (RAW) Electronic Format (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/Nikon.html">Nikon</a> <a href="TagNames/NikonCapture.html">NikonCapture</a></td></tr>
<tr><td><a href="TagNames/iWork.html">NMBTEMPLATE</a></td><td>R</td><td>Apple iWork '09 Numbers Template</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/iWork.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr>
@@ -1383,7 +1389,7 @@ three droplets to extract information [exiftool must be installed] (thanks to Ro
<li><a href="https://exiftool.org/forum/index.php/topic,5262.0.html">ExifToolWrapper</a>: .NET wrapper for ExifTool (using C#)</li>
<li><a href="http://gitorious.org/mini_exiftool">MiniExiftool</a>: Ruby library wrapper for ExifTool</li>
<li><a href="https://github.com/mceachen/exiftoolr">exiftoolr</a>: Ruby wrapper for ExifTool</li>
-<li><a href="http://smarnach.github.com/pyexiftool/">pyexiftool</a>: Python wrapper for ExifTool</li>
+<li><a href="https://github.com/sylikc/pyexiftool">pyexiftool</a>: Python wrapper for ExifTool</li>
<li><a href="https://github.com/guinslym/pyexifinfo">PyExifInfo</a>: Another Python wrapper for ExifTool</li>
<li><a href="https://github.com/romainneutron/PHPExiftool">PHPExiftool</a>: PHP wrapper for ExifTool (in development)</li>
<li><a href="https://exiftool.org/forum/index.php/topic,5381.0.html">ExifTool_PHP_StayOpen</a>: ExifTool PHP fast processing script using -stayOpen and Gearman</li>
diff --git a/html/install.html b/html/install.html
index fc49abba..18fc3bf9 100644
--- a/html/install.html
+++ b/html/install.html
@@ -52,10 +52,10 @@ documentation or some other files of the full distribution.</p>
<h3>Stand-Alone Executable</h3>
<ol>
<li><b>Download</b> the <b>Windows Executable</b> from the <a href="index.html">ExifTool home page</a>.
-<br><span class=lt>(The file you download should be named "<code>exiftool-12.24.zip</code>".)</span></li>
+<br><span class=lt>(The file you download should be named "<code>exiftool-12.25.zip</code>".)</span></li>
<li><b>Extract "<code>exiftool(-k).exe</code>"</b> from the
"<code>.zip</code>" file, and place it <b>on your Desktop</b>.
-<br><span class=lt>(Double-click on "<code>exiftool-12.24.zip</code>" to open
+<br><span class=lt>(Double-click on "<code>exiftool-12.25.zip</code>" to open
the archive, then drag "<code>exiftool(-k).exe</code>" to your Desktop.)</span></li>
</ol>
<p>You can now double-click on "<code>exiftool(-k).exe</code>" to read the
@@ -109,7 +109,7 @@ can be downloaded from
<a href="http://www.activestate.com/activeperl/">activeperl.com</a>.)</p>
<ol>
<li><b>Download</b> the <b>Image-ExifTool distribution</b> from the <a href="index.html">ExifTool home page</a>
-<br><span class=lt>(The file you download should be named "<code>Image-ExifTool-12.24.tar.gz</code>".)</span></li>
+<br><span class=lt>(The file you download should be named "<code>Image-ExifTool-12.25.tar.gz</code>".)</span></li>
<li><b>Extract the ExifTool files</b> from the archive.
<br><span class=lt>(The archive is a gzipped tar file, and can be opened with
various Windows utilities, including WinZip.)</span></li>
@@ -151,7 +151,7 @@ in the MacOS package. Both versions run natively on PPC and Intel Macs.</p>
<h3>MacOS Package</h3>
<ol>
<li><b>Download</b> the <b>ExifTool MacOS Package</b> from the <a href="index.html">ExifTool home page</a>.
-<br><span class=lt>(The file you download should be named "<code>ExifTool-12.24.dmg</code>".)</span></li>
+<br><span class=lt>(The file you download should be named "<code>ExifTool-12.25.dmg</code>".)</span></li>
<li><b>Install</b> as a normal <b>MacOS package</b>.
<br><span class=lt>(Open the disk image, double-click on the install package, and follow the instructions.
See the second item in the Notes section below if you are stopped with an "unidentified developer" message.)
@@ -167,12 +167,12 @@ See the second item in the Notes section below if you are stopped with an "unide
<ol>
<li><b>Download</b> the <b>Image-ExifTool distribution</b> from the <a href="index.html">ExifTool home page</a>
to your Desktop.
-<br><span class=lt>(The file you download should be named "<code>Image-ExifTool-12.24.tar.gz</code>".)</span></li>
+<br><span class=lt>(The file you download should be named "<code>Image-ExifTool-12.25.tar.gz</code>".)</span></li>
<li><b>Launch</b> the <b>Terminal</b> application from the Utilities folder in your Applications folder.</li>
<li>In the Terminal window, <b>type the following</b>:
<pre class='code'> cd ~/Desktop
- tar -xzf Image-ExifTool-12.24.tar.gz
- cd Image-ExifTool-12.24
+ tar -xzf Image-ExifTool-12.25.tar.gz
+ cd Image-ExifTool-12.25
sudo cp -r exiftool lib /usr/local/bin
</pre>
<span class=lt>(Note: The last step above will require you to enter your
@@ -188,7 +188,7 @@ your Perl version. If both sets of libraries exist, /usr/local/bin/lib takes
precedence for exiftool, but /Library/Perl/#.#.# is the default for any other
Perl scripts.</li>
<li>In MacOS 10.8 or later, you may see this message when you try to open the install package:
-<blockquote class=red>"ExifTool-12.24.pkg" can't be opened because it is from an
+<blockquote class=red>"ExifTool-12.25.pkg" can't be opened because it is from an
unidentified developer.</blockquote> The solution is to control-click on the pkg
then select "Open" from the pop-up menu instead of just double-clicking. An alternative
is to lower the security settings by changing "Allow applications downloaded from" to
@@ -215,11 +215,11 @@ have the wrong "<code>lib</code>" folder.</li>
<ol>
<li><b>Download</b> the <b>Image-ExifTool distribution</b> from the <a href="index.html">ExifTool home page</a>
-<br><span class=lt>(The file you download should be named "<code>Image-ExifTool-12.24.tar.gz</code>".)</span></li>
+<br><span class=lt>(The file you download should be named "<code>Image-ExifTool-12.25.tar.gz</code>".)</span></li>
<li><b>Unpack the distribution</b> and <b>make it your current directory</b> by typing:
<pre class='code'> cd <i>&lt;your download directory&gt;</i>
- gzip -dc Image-ExifTool-12.24.tar.gz | tar -xf -
- cd Image-ExifTool-12.24
+ gzip -dc Image-ExifTool-12.25.tar.gz | tar -xf -
+ cd Image-ExifTool-12.25
</pre>
<span class=lt>(At this point you may run exiftool by typing
"<code>./exiftool <i>&lt;image file name&gt;</i></code>".)</span></li>
diff --git a/lib/Image/ExifTool.pm b/lib/Image/ExifTool.pm
index 9f3aedfa..310186ee 100644
--- a/lib/Image/ExifTool.pm
+++ b/lib/Image/ExifTool.pm
@@ -28,7 +28,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
%mimeType $swapBytes $swapWords $currentByteOrder %unpackStd
%jpegMarker %specialTags %fileTypeLookup $testLen $exePath);
-$VERSION = '12.24';
+$VERSION = '12.25';
$RELEASE = '';
@ISA = qw(Exporter);
%EXPORT_TAGS = (
@@ -138,18 +138,18 @@ sub ReadValue($$$;$$$);
@loadAllTables = qw(
PhotoMechanic Exif GeoTiff CanonRaw KyoceraRaw Lytro MinoltaRaw PanasonicRaw
SigmaRaw JPEG GIMP Jpeg2000 GIF BMP BMP::OS2 BMP::Extra BPG BPG::Extensions
- PICT PNG MNG FLIF DjVu DPX OpenEXR ZISRAW MIFF PCX PGF PSP PhotoCD Radiance
- PDF PostScript Photoshop::Header Photoshop::Layers Photoshop::ImageData
- FujiFilm::RAF FujiFilm::IFD Samsung::Trailer Sony::SRF2 Sony::SR2SubIFD
- Sony::PMP ITC ID3 ID3::Lyrics3 FLAC Ogg Vorbis APE APE::NewHeader
- APE::OldHeader Audible MPC MPEG::Audio MPEG::Video MPEG::Xing M2TS QuickTime
- QuickTime::ImageFile QuickTime::Stream QuickTime::Tags360Fly Matroska MOI
- MXF DV Flash Flash::FLV Real::Media Real::Audio Real::Metafile Red RIFF AIFF
- ASF WTV DICOM FITS MIE JSON HTML XMP::SVG Palm Palm::MOBI Palm::EXTH Torrent
- EXE EXE::PEVersion EXE::PEString EXE::MachO EXE::PEF EXE::ELF EXE::AR
- EXE::CHM LNK Font VCard Text VCard::VCalendar RSRC Rawzor ZIP ZIP::GZIP
- ZIP::RAR RTF OOXML iWork ISO FLIR::AFF FLIR::FPF MacOS MacOS::MDItem
- FlashPix::DocTable
+ PICT PNG MNG FLIF DjVu DPX OpenEXR ZISRAW MRC MRC::FEI12 MIFF PCX PGF PSP
+ PhotoCD Radiance PDF PostScript Photoshop::Header Photoshop::Layers
+ Photoshop::ImageData FujiFilm::RAF FujiFilm::IFD Samsung::Trailer Sony::SRF2
+ Sony::SR2SubIFD Sony::PMP ITC ID3 ID3::Lyrics3 FLAC Ogg Vorbis APE
+ APE::NewHeader APE::OldHeader Audible MPC MPEG::Audio MPEG::Video MPEG::Xing
+ M2TS QuickTime QuickTime::ImageFile QuickTime::Stream QuickTime::Tags360Fly
+ Matroska MOI MXF DV Flash Flash::FLV Real::Media Real::Audio Real::Metafile
+ Red RIFF AIFF ASF WTV DICOM FITS MIE JSON HTML XMP::SVG Palm Palm::MOBI
+ Palm::EXTH Torrent EXE EXE::PEVersion EXE::PEString EXE::MachO EXE::PEF
+ EXE::ELF EXE::AR EXE::CHM LNK Font VCard Text VCard::VCalendar RSRC Rawzor
+ ZIP ZIP::GZIP ZIP::RAR RTF OOXML iWork ISO FLIR::AFF FLIR::FPF MacOS
+ MacOS::MDItem FlashPix::DocTable
);
# alphabetical list of current Lang modules
@@ -190,7 +190,7 @@ $defaultLang = 'en'; # default language
HTML VRD RTF FITS XCF DSS QTIF FPX PICT ZIP GZIP PLIST RAR 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
- JXL MOI ISO ALIAS JSON MP3 DICOM PCD TXT);
+ MRC JXL MOI ISO ALIAS JSON MP3 DICOM PCD TXT);
# file types that we can write (edit)
my @writeTypes = qw(JPEG TIFF GIF CRW MRW ORF RAF RAW PNG MIE PSD XMP PPM EPS
@@ -396,6 +396,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
MPG => 'MPEG',
MPO => ['JPEG', 'Extended Multi-Picture format'],
MQV => ['MOV', 'Sony Mobile Quicktime Video'],
+ MRC => ['MRC', 'Medical Research Council image'],
MRW => ['MRW', 'Minolta RAW format'],
MTS => 'M2TS',
MXF => ['MXF', 'Material Exchange Format'],
@@ -681,6 +682,7 @@ my %fileDescription = (
MP4 => 'video/mp4',
MPC => 'audio/x-musepack',
MPEG => 'video/mpeg',
+ MRC => 'image/x-mrc',
MRW => 'image/x-minolta-mrw',
MXF => 'application/mxf',
NEF => 'image/x-nikon-nef',
@@ -920,6 +922,7 @@ $testLen = 1024; # number of bytes to read when testing for magic number
MPC => '(MP\+|ID3)',
MOI => 'V6',
MPEG => '\0\0\x01[\xb0-\xbf]',
+ MRC => '.{64}[\x01\x02\x03]\0\0\0[\x01\x02\x03]\0\0\0[\x01\x02\x03]\0\0\0.{132}MAP[\0 ](\x44\x44|\x44\x41|\x11\x11)\0\0',
MRW => '\0MR[MI]',
MXF => '\x06\x0e\x2b\x34\x02\x05\x01\x01\x0d\x01\x02', # (not tested if extension recognized)
OGG => '(OggS|ID3)',
@@ -7831,7 +7834,8 @@ sub GetTagInfo($$$;$$$)
}
}
if ($$tagInfo{Unknown} and not $$self{OPTIONS}{Unknown} and
- not $$self{OPTIONS}{Verbose} and not $$self{HTML_DUMP})
+ not $$self{OPTIONS}{Verbose} and not $$self{OPTIONS}{Validate} and
+ not $$self{HTML_DUMP})
{
# don't return Unknown tags unless that option is set
return undef;
diff --git a/lib/Image/ExifTool.pod b/lib/Image/ExifTool.pod
index ebf3d071..97ea7e46 100644
--- a/lib/Image/ExifTool.pod
+++ b/lib/Image/ExifTool.pod
@@ -65,47 +65,47 @@ supported by ExifTool (r = read, w = write, c = create):
File Types
------------+-------------+-------------+-------------+------------
- 360 r/w | DPX r | ITC r | O r | RAR r
- 3FR r | DR4 r/w/c | J2C r | ODP r | RAW r/w
- 3G2 r/w | DSS r | JNG r/w | ODS r | RIFF r
- 3GP r/w | DV r | JP2 r/w | ODT r | RSRC r
- A r | DVB r/w | JPEG r/w | OFR r | RTF r
- AA r | DVR-MS r | JSON r | OGG r | RW2 r/w
- AAE r | DYLIB r | JXL r | OGV r | RWL r/w
- AAX r/w | EIP r | K25 r | ONP r | RWZ r
- ACR r | EPS r/w | KDC r | OPUS r | RM r
- AFM r | EPUB r | KEY r | ORF r/w | SEQ r
- AI r/w | ERF r/w | LA r | ORI r/w | SKETCH r
- AIFF r | EXE r | LFP r | OTF r | SO r
- APE r | EXIF r/w/c | LNK r | PAC r | SR2 r/w
- ARQ r/w | EXR r | LRV r/w | PAGES r | SRF r
- ARW r/w | EXV r/w/c | M2TS r | PBM r/w | SRW r/w
- ASF r | F4A/V r/w | M4A/V r/w | PCD r | SVG r
- AVI r | FFF r/w | MACOS r | PCX r | SWF r
- AVIF r/w | FITS r | MAX r | PDB r | THM r/w
- AZW r | FLA r | MEF r/w | PDF r/w | TIFF r/w
- BMP r | FLAC r | MIE r/w/c | PEF r/w | TORRENT r
- BPG r | FLIF r/w | MIFF r | PFA r | TTC r
- BTF r | FLV r | MKA r | PFB r | TTF r
- CHM r | FPF r | MKS r | PFM r | TXT r
- COS r | FPX r | MKV r | PGF r | VCF r
- CR2 r/w | GIF r/w | MNG r/w | PGM r/w | VRD r/w/c
- CR3 r/w | GPR r/w | MOBI r | PLIST r | VSD r
- CRM r/w | GZ r | MODD r | PICT r | WAV r
- CRW r/w | HDP r/w | MOI r | PMP r | WDP r/w
- CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBP r
- CSV r | HEIC r/w | MOV r/w | PPM r/w | WEBM r
- CZI r | HEIF r/w | MP3 r | PPT r | WMA r
- DCM r | HTML r | MP4 r/w | PPTX r | WMV r
- DCP r/w | ICC r/w/c | MPC r | PS r/w | WTV r
- DCR r | ICS r | MPG r | PSB r/w | WV r
- DFONT r | IDML r | MPO r/w | PSD r/w | X3F r/w
- DIVX r | IIQ r/w | MQV r/w | PSP r | XCF r
- DJVU r | IND r/w | MRW r/w | QTIF r/w | XLS r
- DLL r | INSP r/w | MXF r | R3D r | XLSX r
- DNG r/w | INSV r | NEF r/w | RA r | XMP r/w/c
- DOC r | INX r | NRW r/w | RAF r/w | ZIP r
- DOCX r | ISO r | NUMBERS r | RAM r |
+ 360 r/w | DPX r | ITC r | NUMBERS r | RAM r
+ 3FR r | DR4 r/w/c | J2C r | O r | RAR r
+ 3G2 r/w | DSS r | JNG r/w | ODP r | RAW r/w
+ 3GP r/w | DV r | JP2 r/w | ODS r | RIFF r
+ A r | DVB r/w | JPEG r/w | ODT r | RSRC r
+ AA r | DVR-MS r | JSON r | OFR r | RTF r
+ AAE r | DYLIB r | JXL r | OGG r | RW2 r/w
+ AAX r/w | EIP r | K25 r | OGV r | RWL r/w
+ ACR r | EPS r/w | KDC r | ONP r | RWZ r
+ AFM r | EPUB r | KEY r | OPUS r | RM r
+ AI r/w | ERF r/w | LA r | ORF r/w | SEQ r
+ AIFF r | EXE r | LFP r | ORI r/w | SKETCH r
+ APE r | EXIF r/w/c | LNK r | OTF r | SO r
+ ARQ r/w | EXR r | LRV r/w | PAC r | SR2 r/w
+ ARW r/w | EXV r/w/c | M2TS r | PAGES r | SRF r
+ ASF r | F4A/V r/w | M4A/V r/w | PBM r/w | SRW r/w
+ AVI r | FFF r/w | MACOS r | PCD r | SVG r
+ AVIF r/w | FITS r | MAX r | PCX r | SWF r
+ AZW r | FLA r | MEF r/w | PDB r | THM r/w
+ BMP r | FLAC r | MIE r/w/c | PDF r/w | TIFF r/w
+ BPG r | FLIF r/w | MIFF r | PEF r/w | TORRENT r
+ BTF r | FLV r | MKA r | PFA r | TTC r
+ CHM r | FPF r | MKS r | PFB r | TTF r
+ COS r | FPX r | MKV r | PFM r | TXT r
+ CR2 r/w | GIF r/w | MNG r/w | PGF r | VCF r
+ CR3 r/w | GPR r/w | MOBI r | PGM r/w | VRD r/w/c
+ CRM r/w | GZ r | MODD r | PLIST r | VSD r
+ CRW r/w | HDP r/w | MOI r | PICT r | WAV r
+ CS1 r/w | HDR r | MOS r/w | PMP r | WDP r/w
+ CSV r | HEIC r/w | MOV r/w | PNG r/w | WEBP r
+ CZI r | HEIF r/w | MP3 r | PPM r/w | WEBM r
+ DCM r | HTML r | MP4 r/w | PPT r | WMA r
+ DCP r/w | ICC r/w/c | MPC r | PPTX r | WMV r
+ DCR r | ICS r | MPG r | PS r/w | WTV r
+ DFONT r | IDML r | MPO r/w | PSB r/w | WV r
+ DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
+ DJVU r | IND r/w | MRC r | PSP r | XCF r
+ DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
+ DNG r/w | INSV r | MXF r | R3D r | XLSX r
+ DOC r | INX r | NEF r/w | RA r | XMP r/w/c
+ DOCX r | ISO r | NRW r/w | RAF r/w | ZIP r
Meta Information
----------------------+----------------------+---------------------
@@ -176,6 +176,9 @@ Creates a new ExifTool object.
$exifTool = new Image::ExifTool;
+One ExifTool object may be used to process many files, so creating multiple
+ExifTool objects usually is not necessary.
+
Note that ExifTool uses AUTOLOAD to load non-member methods, so any class
using Image::ExifTool as a base class must define an AUTOLOAD which calls
Image::ExifTool::DoAutoLoad(). eg)
diff --git a/lib/Image/ExifTool/Canon.pm b/lib/Image/ExifTool/Canon.pm
index 09e8461c..a9147d09 100644
--- a/lib/Image/ExifTool/Canon.pm
+++ b/lib/Image/ExifTool/Canon.pm
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
sub ProcessExifInfo($$$);
sub SwapWords($);
-$VERSION = '4.46';
+$VERSION = '4.47';
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -473,7 +473,8 @@ $VERSION = '4.46';
253 => 'Canon EF 70-200mm f/2.8L IS II USM + 2x', #PH (NC)
253.1 => 'Canon EF 70-200mm f/2.8L IS III USM + 2x', #PH (NC)
# 253.2 => 'Tamron SP 70-200mm f/2.8 Di VC USD G2 (A025) + 2x', #forum9367
- 254 => 'Canon EF 100mm f/2.8L Macro IS USM', #42
+ 254 => 'Canon EF 100mm f/2.8L Macro IS USM or Tamron Lens', #42
+ 254.1 => 'Tamron SP 90mm f/2.8 Di VC USD 1:1 Macro (F017)', #PH
255 => 'Sigma 24-105mm f/4 DG OS HSM | A or Other Lens', #50
255.1 => 'Sigma 180mm f/2.8 EX DG OS HSM APO Macro', #50
255.2 => 'Tamron SP 70-200mm f/2.8 Di VC USD', #exiv issue 1202 (A009)
diff --git a/lib/Image/ExifTool/Exif.pm b/lib/Image/ExifTool/Exif.pm
index e6257525..230b05f4 100644
--- a/lib/Image/ExifTool/Exif.pm
+++ b/lib/Image/ExifTool/Exif.pm
@@ -56,7 +56,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::MakerNotes;
-$VERSION = '4.33';
+$VERSION = '4.34';
sub ProcessExif($$$);
sub WriteExif($$$);
@@ -321,6 +321,7 @@ my %utf8StringConv = (
my %longBin = (
ValueConv => 'length($val) > 64 ? \$val : $val',
ValueConvInv => '$val',
+ LongBinary => 1, # flag to avoid decoding values of a large array
);
# PrintConv for SampleFormat (0x153)
@@ -3618,11 +3619,11 @@ my %opcodeInfo = (
},
0xc6fc => {
Name => 'ProfileToneCurve',
+ %longBin,
Writable => 'float',
WriteGroup => 'IFD0',
Count => -1,
Protected => 1,
- Binary => 1,
},
0xc6fd => {
Name => 'ProfileEmbedPolicy',
@@ -3747,11 +3748,11 @@ my %opcodeInfo = (
},
0xc726 => {
Name => 'ProfileLookTableData',
+ %longBin,
Writable => 'float',
WriteGroup => 'IFD0',
Count => -1,
Protected => 1,
- Binary => 1,
},
0xc740 => { Name => 'OpcodeList1', %opcodeInfo }, # DNG 1.3
0xc741 => { Name => 'OpcodeList2', %opcodeInfo }, # DNG 1.3
@@ -6172,15 +6173,23 @@ sub ProcessExif($$$)
# (avoids long delays when processing some corrupted files)
if ($count > 100000 and $formatStr !~ /^(undef|string|binary)$/) {
my $tagName = $tagInfo ? $$tagInfo{Name} : sprintf('tag 0x%.4x', $tagID);
+ # (count of 196608 is typical for ColorMap)
if ($tagName ne 'TransferFunction' or $count != 196608) {
my $minor = $count > 2000000 ? 0 : 2;
next if $et->Warn("Ignoring $dirName $tagName with excessive count", $minor);
}
}
- # convert according to specified format
- $val = ReadValue($valueDataPt,$valuePtr,$formatStr,$count,$readSize,\$rational);
- # re-code if necessary
- $val = $et->Decode($val, $strEnc) if $strEnc and $formatStr eq 'string' and defined $val;
+ if ($count > 500 and $formatStr !~ /^(undef|string|binary)$/ and
+ (not $tagInfo or $$tagInfo{LongBinary}) and not $$et{OPTIONS}{IgnoreMinorErrors})
+ {
+ $et->WarnOnce('Not decoding some large array(s). Ignore minor errors to decode', 2);
+ $val = "(large array of $count $formatStr values)";
+ } else {
+ # convert according to specified format
+ $val = ReadValue($valueDataPt,$valuePtr,$formatStr,$count,$readSize,\$rational);
+ # re-code if necessary
+ $val = $et->Decode($val, $strEnc) if $strEnc and $formatStr eq 'string' and defined $val;
+ }
}
if ($verbose) {
diff --git a/lib/Image/ExifTool/Jpeg2000.pm b/lib/Image/ExifTool/Jpeg2000.pm
index ba141244..1438a5d6 100644
--- a/lib/Image/ExifTool/Jpeg2000.pm
+++ b/lib/Image/ExifTool/Jpeg2000.pm
@@ -16,7 +16,7 @@ use strict;
use vars qw($VERSION);
use Image::ExifTool qw(:DataAccess :Utils);
-$VERSION = '1.28';
+$VERSION = '1.29';
sub ProcessJpeg2000Box($$$);
sub ProcessJUMD($$$);
@@ -389,7 +389,7 @@ my %jumbfTypes = (
#
# stuff seen in JPEG XL images:
#
- # jbrd - JXL Brotli Compressed Data?
+ # jbrd - JPEG Bitstream Reconstruction Data (allows lossless conversion back to original JPG)
jxlc => {
Name => 'JXLCodestream',
Format => 'undef',
@@ -1034,16 +1034,18 @@ sub GetBits($$)
{
my ($a, $n) = @_;
my $v = 0;
+ my $bit = 1;
my $i;
while ($n--) {
for ($i=0; $i<@$a; ++$i) {
- my $set = $$a[$i] & 0x80000000;
- $$a[$i] <<= 1;
+ # consume bits LSB first
+ my $set = $$a[$i] & 1;
+ $$a[$i] >>= 1;
if ($i) {
- $$a[$i-1] |= 1 if $set;
+ $$a[$i-1] |= 0x80 if $set;
} else {
- $v <<= 1;
- $v |= 1 if $set;
+ $v |= $bit if $set;
+ $bit <<= 1;
}
}
}
@@ -1062,11 +1064,7 @@ sub ProcessJXLCodestream($$)
my $tmp = $$dataPt . ("\0" x 14);
$dataPt = \$tmp;
}
- # Note: I have a test ISO BMFF JXL image with EXIF that shows y=130, x=200
- # but the codestream decodes as y=128, x=254, so I'm not sure this is correct...
- # 200x130 image should be (binary) 0 00 010000001 000 00 011000111
- # JXL codestream is 0 00 010000000 010 (01000111010000001)
- my @a = unpack 'x2N3', $$dataPt;
+ my @a = unpack 'x2C12', $$dataPt;
my ($x, $y);
my $small = GetBits(\@a, 1);
if ($small) {
@@ -1183,7 +1181,6 @@ sub ProcessJXL($$)
# add metadata to empty ISO BMFF container
$$dirInfo{RAF} = new File::RandomAccess(\$buff);
} else {
- $et->Warn('JPEG XL codestream support is currently experimental',1);
$et->SetFileType('JXL Codestream','image/jxl', 'jxl');
return ProcessJXLCodestream($et, \$hdr);
}
@@ -1191,7 +1188,6 @@ sub ProcessJXL($$)
return 0;
}
$raf->Seek(0,0) or $et->Error('Seek error'), return 0;
- $et->Warn('JPEG XL support is currently experimental',1);
my $success = ProcessJP2($et, $dirInfo);
diff --git a/lib/Image/ExifTool/MRC.pm b/lib/Image/ExifTool/MRC.pm
new file mode 100644
index 00000000..7e184e90
--- /dev/null
+++ b/lib/Image/ExifTool/MRC.pm
@@ -0,0 +1,341 @@
+#------------------------------------------------------------------------------
+# File: MRC.pm
+#
+# Description: Read MRC (Medical Research Council) image files
+#
+# Revisions: 2021-04-21 - P. Harvey Created
+#
+# References: 1) https://www.ccpem.ac.uk/mrc_format/mrc2014.php
+# 2) http://legacy.ccp4.ac.uk/html/library.html
+# 3) https://github.com/ccpem/mrcfile/blob/master/mrcfile/dtypes.py
+#
+# Notes: The header is basically identical to the older CCP4 file format
+#------------------------------------------------------------------------------
+
+package Image::ExifTool::MRC;
+
+use strict;
+use vars qw($VERSION);
+use Image::ExifTool qw(:DataAccess :Utils);
+
+$VERSION = '1.00';
+
+my %bool = (
+ Format => 'int8u',
+ PrintConv => { 0 => 'No', 1 => 'Yes' }
+);
+
+%Image::ExifTool::MRC::Main = (
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
+ GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' },
+ VARS => { NO_LOOKUP => 1 }, # omit tags from lookup
+ FORMAT => 'int32u',
+ NOTES => q{
+ Tags extracted from Medical Research Council (MRC) format imaging files.
+ See L<https://www.ccpem.ac.uk/mrc_format/mrc2014.php> for the specification.
+ },
+ 0 => 'ImageWidth',
+ 1 => 'ImageHeight',
+ 2 => {
+ Name => 'ImageDepth',
+ Notes => q{
+ number of sections. Use ExtractEmbedded option to extract metadata for all
+ sections
+ },
+ RawConv => '$$self{ImageDepth} = $val',
+ },
+ 3 => {
+ Name => 'ImageMode',
+ PrintConv => {
+ 0 => '8-bit signed integer',
+ 1 => '16-bit signed integer',
+ 2 => '32-bit signed real',
+ 3 => 'complex 16-bit integer',
+ 4 => 'complex 32-bit real',
+ 6 => '16-bit unsigned integer',
+ },
+ },
+ 4 => { Name => 'StartPoint', Format => 'int32u[3]' },
+ 7 => { Name => 'GridSize', Format => 'int32u[3]' },
+ 10 => { Name => 'CellWidth', Format => 'float', Notes => 'cell size in angstroms' },
+ 11 => { Name => 'CellHeight',Format => 'float' },
+ 12 => { Name => 'CellDepth', Format => 'float' },
+ 13 => { Name => 'CellAlpha', Format => 'float' },
+ 14 => { Name => 'CellBeta', Format => 'float' },
+ 15 => { Name => 'CellGamma', Format => 'float' },
+ 16 => { Name => 'ImageWidthAxis', PrintConv => { 1 => 'X', 2 => 'Y', 3 => 'Z' } },
+ 17 => { Name => 'ImageHeightAxis', PrintConv => { 1 => 'X', 2 => 'Y', 3 => 'Z' } },
+ 18 => { Name => 'ImageDepthAxis', PrintConv => { 1 => 'X', 2 => 'Y', 3 => 'Z' } },
+ 19 => { Name => 'DensityMin', Format => 'float' },
+ 20 => { Name => 'DensityMax', Format => 'float' },
+ 21 => { Name => 'DensityMean',Format => 'float' },
+ 22 => 'SpaceGroupNumber',
+ 23 => { Name => 'ExtendedHeaderSize', RawConv => '$$self{ExtendedHeaderSize} = $val' },
+ 26 => { Name => 'ExtendedHeaderType', Format => 'string[4]', RawConv => '$$self{ExtendedHeaderType} = $val' },
+ 27 => 'MRCVersion',
+ 49 => { Name => 'Origin', Format => 'float[3]' },
+ 53 => { Name => 'MachineStamp', Format => 'int8u[4]', PrintConv => 'sprintf("0x%.2x 0x%.2x 0x%.2x 0x%.2x",split " ", $val)' },
+ 54 => { Name => 'RMSDeviation', Format => 'float' },
+ 55 => { Name => 'NumberOfLabels', RawConv => '$$self{NLab} = $val' },
+ 56 => { Name => 'Label0', Format => 'string[80]', Condition => '$$self{NLab} > 0' },
+ 76 => { Name => 'Label1', Format => 'string[80]', Condition => '$$self{NLab} > 1' },
+ 96 => { Name => 'Label2', Format => 'string[80]', Condition => '$$self{NLab} > 2' },
+ 116 => { Name => 'Label3', Format => 'string[80]', Condition => '$$self{NLab} > 3' },
+ 136 => { Name => 'Label4', Format => 'string[80]', Condition => '$$self{NLab} > 4' },
+ 156 => { Name => 'Label5', Format => 'string[80]', Condition => '$$self{NLab} > 5' },
+ 176 => { Name => 'Label6', Format => 'string[80]', Condition => '$$self{NLab} > 6' },
+ 196 => { Name => 'Label7', Format => 'string[80]', Condition => '$$self{NLab} > 7' },
+ 216 => { Name => 'Label8', Format => 'string[80]', Condition => '$$self{NLab} > 8' },
+ 236 => { Name => 'Label9', Format => 'string[80]', Condition => '$$self{NLab} > 9' },
+);
+
+%Image::ExifTool::MRC::FEI12 = (
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
+ GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' },
+ VARS => { NO_LOOKUP => 1 }, # omit tags from lookup (way too many!)
+ NOTES => 'Tags extracted from FEI1 and FEI2 extended headers.',
+ 0 => { Name => 'MetadataSize', Format => 'int32u', RawConv => '$$self{MetadataSize} = $val' },
+ 4 => { Name => 'MetadataVersion', Format => 'int32u' },
+ 8 => {
+ Name => 'Bitmask1',
+ Format => 'int32u',
+ RawConv => '$$self{BitM} = $val',
+ PrintConv => 'sprintf("0x%.8x", $val)',
+ },
+ 12 => {
+ Name => 'TimeStamp',
+ Format => 'double',
+ Condition => '$$self{BitM} & 0x01',
+ Groups => { 2 => 'Time'},
+ # shift from days since Dec 30, 1899 to Unix epoch of Jan 1, 1970
+ # (my sample looks like local time, although it should be UTC)
+ ValueConv => 'ConvertUnixTime(($val-25569)*24*3600)',
+ PrintConv => '$self->ConvertDateTime($val)',
+ },
+ 20 => { Name => 'MicroscopeType', Format => 'string[16]', Condition => '$$self{BitM} & 0x02' },
+ 36 => { Name => 'MicroscopeID', Format => 'string[16]', Condition => '$$self{BitM} & 0x04' },
+ 52 => { Name => 'Application', Format => 'string[16]', Condition => '$$self{BitM} & 0x08' },
+ 68 => { Name => 'AppVersion', Format => 'string[16]', Condition => '$$self{BitM} & 0x10' },
+ 84 => { Name => 'HighTension', Format => 'double', Condition => '$$self{BitM} & 0x20', Notes => 'volts' },
+ 92 => { Name => 'Dose', Format => 'double', Condition => '$$self{BitM} & 0x40', Notes => 'electrons/m2' },
+ 100 => { Name => 'AlphaTilt', Format => 'double', Condition => '$$self{BitM} & 0x80' },
+ 108 => { Name => 'BetaTilt', Format => 'double', Condition => '$$self{BitM} & 0x100' },
+ 116 => { Name => 'XStage', Format => 'double', Condition => '$$self{BitM} & 0x200' },
+ 124 => { Name => 'YStage', Format => 'double', Condition => '$$self{BitM} & 0x400' },
+ 132 => { Name => 'ZStage', Format => 'double', Condition => '$$self{BitM} & 0x800' },
+ 140 => { Name => 'TiltAxisAngle', Format => 'double', Condition => '$$self{BitM} & 0x1000' },
+ 148 => { Name => 'DualAxisRot', Format => 'double', Condition => '$$self{BitM} & 0x2000' },
+ 156 => { Name => 'PixelSizeX', Format => 'double', Condition => '$$self{BitM} & 0x4000' },
+ 164 => { Name => 'PixelSizeY', Format => 'double', Condition => '$$self{BitM} & 0x8000' },
+ 220 => { Name => 'Defocus', Format => 'double', Condition => '$$self{BitM} & 0x400000' },
+ 228 => { Name => 'STEMDefocus', Format => 'double', Condition => '$$self{BitM} & 0x800000' },
+ 236 => { Name => 'AppliedDefocus', Format => 'double', Condition => '$$self{BitM} & 0x1000000' },
+ 244 => { Name => 'InstrumentMode', Format => 'int32u', Condition => '$$self{BitM} & 0x2000000', PrintConv => { 1 => 'TEM', 2 => 'STEM' } },
+ 248 => { Name => 'ProjectionMode', Format => 'int32u', Condition => '$$self{BitM} & 0x4000000', PrintConv => { 1 => 'Diffraction', 2 => 'Imaging' } },
+ 252 => { Name => 'ObjectiveLens', Format => 'string[16]', Condition => '$$self{BitM} & 0x8000000' },
+ 268 => { Name => 'HighMagnificationMode', Format => 'string[16]', Condition => '$$self{BitM} & 0x10000000' },
+ 284 => { Name => 'ProbeMode', Format => 'int32u', Condition => '$$self{BitM} & 0x20000000', PrintConv => { 1 => 'Nano', 2 => 'Micro' } },
+ 288 => { Name => 'EFTEMOn', %bool, Condition => '$$self{BitM} & 0x40000000' },
+ 289 => { Name => 'Magnification', Format => 'double', Condition => '$$self{BitM} & 0x80000000' },
+ 297 => {
+ Name => 'Bitmask2',
+ Format => 'int32u',
+ RawConv => '$$self{BitM} = $val',
+ PrintConv => 'sprintf("0x%.8x", $val)',
+ },
+ 301 => { Name => 'CameraLength', Format => 'double', Condition => '$$self{BitM} & 0x01' },
+ 309 => { Name => 'SpotIndex', Format => 'int32u', Condition => '$$self{BitM} & 0x02' },
+ 313 => { Name => 'IlluminationArea',Format => 'double', Condition => '$$self{BitM} & 0x04' },
+ 321 => { Name => 'Intensity', Format => 'double', Condition => '$$self{BitM} & 0x08' },
+ 329 => { Name => 'ConvergenceAngle',Format => 'double', Condition => '$$self{BitM} & 0x10' },
+ 337 => { Name => 'IlluminationMode',Format => 'string[16]', Condition => '$$self{BitM} & 0x20' },
+ 353 => { Name => 'WideConvergenceAngleRange', %bool, Condition => '$$self{BitM} & 0x40' },
+ 354 => { Name => 'SlitInserted', %bool, Condition => '$$self{BitM} & 0x80' },
+ 355 => { Name => 'SlitWidth', Format => 'double', Condition => '$$self{BitM} & 0x100' },
+ 363 => { Name => 'AccelVoltOffset', Format => 'double', Condition => '$$self{BitM} & 0x200' },
+ 371 => { Name => 'DriftTubeVolt', Format => 'double', Condition => '$$self{BitM} & 0x400' },
+ 379 => { Name => 'EnergyShift', Format => 'double', Condition => '$$self{BitM} & 0x800' },
+ 387 => { Name => 'ShiftOffsetX', Format => 'double', Condition => '$$self{BitM} & 0x1000' },
+ 395 => { Name => 'ShiftOffsetY', Format => 'double', Condition => '$$self{BitM} & 0x2000' },
+ 403 => { Name => 'ShiftX', Format => 'double', Condition => '$$self{BitM} & 0x4000' },
+ 411 => { Name => 'ShiftY', Format => 'double', Condition => '$$self{BitM} & 0x8000' },
+ 419 => { Name => 'IntegrationTime', Format => 'double', Condition => '$$self{BitM} & 0x10000' },
+ 427 => { Name => 'BinningWidth', Format => 'int32u', Condition => '$$self{BitM} & 0x20000' },
+ 431 => { Name => 'BinningHeight', Format => 'int32u', Condition => '$$self{BitM} & 0x40000' },
+ 435 => { Name => 'CameraName', Format => 'string[16]', Condition => '$$self{BitM} & 0x80000' },
+ 451 => { Name => 'ReadoutAreaLeft', Format => 'int32u', Condition => '$$self{BitM} & 0x100000' },
+ 455 => { Name => 'ReadoutAreaTop', Format => 'int32u', Condition => '$$self{BitM} & 0x200000' },
+ 459 => { Name => 'ReadoutAreaRight',Format => 'int32u', Condition => '$$self{BitM} & 0x400000' },
+ 463 => { Name => 'ReadoutAreaBottom',Format=> 'int32u', Condition => '$$self{BitM} & 0x800000' },
+ 467 => { Name => 'CetaNoiseReduct', %bool, Condition => '$$self{BitM} & 0x1000000' },
+ 468 => { Name => 'CetaFramesSummed',Format => 'int32u', Condition => '$$self{BitM} & 0x2000000' },
+ 472 => { Name => 'DirectDetElectronCounting', %bool, Condition => '$$self{BitM} & 0x4000000' },
+ 473 => { Name => 'DirectDetAlignFrames', %bool, Condition => '$$self{BitM} & 0x8000000' },
+ 490 => {
+ Name => 'Bitmask3',
+ Format => 'int32u',
+ RawConv => '$$self{BitM} = $val',
+ PrintConv => 'sprintf("0x%.8x", $val)',
+ },
+ 518 => { Name => 'PhasePlate', %bool, Condition => '$$self{BitM} & 0x40' },
+ 519 => { Name => 'STEMDetectorName',Format => 'string[16]', Condition => '$$self{BitM} & 0x80' },
+ 535 => { Name => 'Gain', Format => 'double', Condition => '$$self{BitM} & 0x100' },
+ 543 => { Name => 'Offset', Format => 'double', Condition => '$$self{BitM} & 0x200' },
+ 571 => { Name => 'DwellTime', Format => 'double', Condition => '$$self{BitM} & 0x8000' },
+ 579 => { Name => 'FrameTime', Format => 'double', Condition => '$$self{BitM} & 0x10000' },
+ 587 => { Name => 'ScanSizeLeft', Format => 'int32u', Condition => '$$self{BitM} & 0x20000' },
+ 591 => { Name => 'ScanSizeTop', Format => 'int32u', Condition => '$$self{BitM} & 0x40000' },
+ 595 => { Name => 'ScanSizeRight', Format => 'int32u', Condition => '$$self{BitM} & 0x80000' },
+ 599 => { Name => 'ScanSizeBottom', Format => 'int32u', Condition => '$$self{BitM} & 0x100000' },
+ 603 => { Name => 'FullScanFOV_X', Format => 'double', Condition => '$$self{BitM} & 0x200000' },
+ 611 => { Name => 'FullScanFOV_Y', Format => 'double', Condition => '$$self{BitM} & 0x400000' },
+ 619 => { Name => 'Element', Format => 'string[16]', Condition => '$$self{BitM} & 0x800000' },
+ 635 => { Name => 'EnergyIntervalLower', Format => 'double', Condition => '$$self{BitM} & 0x1000000' },
+ 643 => { Name => 'EnergyIntervalHigher',Format => 'double', Condition => '$$self{BitM} & 0x2000000' },
+ 651 => { Name => 'Method', Format=> 'int32u', Condition => '$$self{BitM} & 0x4000000' },
+ 655 => { Name => 'IsDoseFraction', %bool, Condition => '$$self{BitM} & 0x8000000' },
+ 656 => { Name => 'FractionNumber', Format => 'int32u', Condition => '$$self{BitM} & 0x10000000' },
+ 660 => { Name => 'StartFrame', Format => 'int32u', Condition => '$$self{BitM} & 0x20000000' },
+ 664 => { Name => 'EndFrame', Format => 'int32u', Condition => '$$self{BitM} & 0x40000000' },
+ 668 => { Name =>'InputStackFilename',Format=> 'string[80]', Condition => '$$self{BitM} & 0x80000000' },
+ 748 => {
+ Name => 'Bitmask4',
+ Format => 'int32u',
+ RawConv => '$$self{BitM} = $val',
+ PrintConv => 'sprintf("0x%.8x", $val)',
+ },
+ 752 => { Name => 'AlphaTiltMin', Format => 'double', Condition => '$$self{BitM} & 0x01' },
+ 760 => { Name => 'AlphaTiltMax', Format => 'double', Condition => '$$self{BitM} & 0x02' },
+#
+# FEI2 header starts here
+#
+ 768 => { Name => 'ScanRotation', Format => 'double', Condition => '$$self{BitM} & 0x04' },
+ 776 => { Name => 'DiffractionPatternRotation',Format=>'double', Condition => '$$self{BitM} & 0x08' },
+ 784 => { Name => 'ImageRotation', Format => 'double', Condition => '$$self{BitM} & 0x10' },
+ 792 => { Name => 'ScanModeEnumeration',Format => 'int32u', Condition => '$$self{BitM} & 0x20', PrintConv => { 0 => 'Other', 1 => 'Raster', 2 => 'Serpentine' } },
+ 796 => {
+ Name => 'AcquisitionTimeStamp',
+ Format => 'int64u',
+ Condition => '$$self{BitM} & 0x40',
+ Groups => { 2 => 'Time' },
+ # microseconds since 1970 UTC
+ ValueConv => 'ConvertUnixTime($val / 1e6, 1, 6)',
+ PrintConv => '$self->ConvertDateTime($val)',
+ },
+ 804 => { Name => 'DetectorCommercialName', Format => 'string[16]', Condition => '$$self{BitM} & 0x80' },
+ 820 => { Name => 'StartTiltAngle', Format => 'double', Condition => '$$self{BitM} & 0x100' },
+ 828 => { Name => 'EndTiltAngle', Format => 'double', Condition => '$$self{BitM} & 0x200' },
+ 836 => { Name => 'TiltPerImage', Format => 'double', Condition => '$$self{BitM} & 0x400' },
+ 844 => { Name => 'TitlSpeed', Format => 'double', Condition => '$$self{BitM} & 0x800' },
+ 852 => { Name => 'BeamCenterX', Format => 'int32u', Condition => '$$self{BitM} & 0x1000' },
+ 856 => { Name => 'BeamCenterY', Format => 'int32u', Condition => '$$self{BitM} & 0x2000' },
+ 860 => {
+ Name => 'CFEGFlashTimeStamp',
+ Format => 'int64u',
+ Condition => '$$self{BitM} & 0x4000',
+ Groups => { 2 => 'Time' },
+ ValueConv => 'ConvertUnixTime($val / 1e6, 1, 6)',
+ PrintConv => '$self->ConvertDateTime($val)',
+ },
+ 868 => { Name => 'PhasePlatePosition',Format => 'int32u', Condition => '$$self{BitM} & 0x8000' },
+ 872 => { Name => 'ObjectiveAperture', Format=>'string[16]',Condition => '$$self{BitM} & 0x10000' },
+);
+
+#------------------------------------------------------------------------------
+# Extract metadata from a MRC image
+# Inputs: 0) ExifTool object reference, 1) dirInfo reference
+# Returns: 1 on success, 0 if this wasn't a valid MRC file
+sub ProcessMRC($$)
+{
+ my ($et, $dirInfo) = @_;
+ my $raf = $$dirInfo{RAF};
+ my ($buff, $tagTablePtr, $i);
+
+ # verify this is a valid MRC file
+ return 0 unless $raf->Read($buff, 1024) == 1024;
+ # validate axes, "MAP" file type and machine stamp
+ return 0 unless $buff =~ /^.{64}[\x01\x02\x03]\0\0\0[\x01\x02\x03]\0\0\0[\x01\x02\x03]\0\0\0.{132}MAP[\0 ](\x44\x44|\x44\x41|\x11\x11)\0\0/s;
+
+ $et->SetFileType();
+ SetByteOrder('II');
+ my %dirInfo = (
+ DataPt => \$buff,
+ DirStart => 0,
+ DirLen => length($buff),
+ );
+ $tagTablePtr = GetTagTable('Image::ExifTool::MRC::Main');
+ $et->ProcessDirectory(\%dirInfo, $tagTablePtr);
+
+ # (I don't have any samples with extended headers for testing, so these are not yet decoded)
+ if ($$et{ExtendedHeaderSize} and $$et{ExtendedHeaderType} =~ /^FEI[12]/) {
+ unless ($raf->Read($buff,4)==4 and $raf->Seek(-4,1)) { # read metadata size
+ $et->Warn('Error reading extended header');
+ return 1;
+ }
+ my $size = Get32u(\$buff, 0);
+ if ($size * $$et{ImageDepth} > $$et{ExtendedHeaderSize}) {
+ $et->Warn('Corrupted extended header');
+ return 1;
+ }
+ $dirInfo{DirLen} = $size;
+ $tagTablePtr = GetTagTable('Image::ExifTool::MRC::FEI12');
+ for ($i=0; ;) {
+ $dirInfo{DataPos} = $raf->Tell();
+ $raf->Read($buff, $size) == $size or $et->Warn("Error reading extended header $i"), last;
+ $et->ProcessDirectory(\%dirInfo, $tagTablePtr);
+ last if ++$i >= $$et{ImageDepth};
+ unless ($$et{OPTIONS}{ExtractEmbedded}) {
+ $et->Warn('Use the ExtractEmbedded option to read metadata for all frames',1);
+ last;
+ }
+ $$et{DOC_NUM} = ++$$et{DOC_COUNT};
+ }
+ delete $$et{DOC_NUM};
+ }
+
+ return 1;
+}
+
+1; # end
+
+__END__
+
+=head1 NAME
+
+Image::ExifTool::MRC - Read MRC meta information
+
+=head1 SYNOPSIS
+
+This module is used by Image::ExifTool
+
+=head1 DESCRIPTION
+
+This module contains definitions required by Image::ExifTool to read
+metadata from Medical Research Council (MRC) images.
+
+=head1 AUTHOR
+
+Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
+
+This library is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=head1 REFERENCES
+
+=over 4
+
+=item L<https://www.ccpem.ac.uk/mrc_format/mrc2014.php>
+
+=item L<http://legacy.ccp4.ac.uk/html/library.html>
+
+=item L<https://github.com/ccpem/mrcfile/blob/master/mrcfile/dtypes.py>
+
+=back
+
+=head1 SEE ALSO
+
+L<Image::ExifTool::TagNames/MRC Tags>,
+L<Image::ExifTool(3pm)|Image::ExifTool>
+
+=cut
+
diff --git a/lib/Image/ExifTool/Microsoft.pm b/lib/Image/ExifTool/Microsoft.pm
index 5de05129..abd43d87 100644
--- a/lib/Image/ExifTool/Microsoft.pm
+++ b/lib/Image/ExifTool/Microsoft.pm
@@ -17,7 +17,7 @@ use vars qw($VERSION);
use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::XMP;
-$VERSION = '1.22';
+$VERSION = '1.23';
sub ProcessXtra($$$);
sub WriteXtra($$$);
@@ -989,11 +989,11 @@ sub WriteXtra($$$)
last; # (it was a cheap goto)
}
if ($done{$tag}) {
+ $changed = 1;
# write changed values
my $buff = WriteXtraValue($et, $$newTags{$tag}, \@newVals);
if (length $buff) {
$newData .= Set32u(8+length($tag)+length($buff)) . Set32u(length($tag)) . $tag . $buff;
- $changed = 1;
}
} else {
# nothing changed; just copy over
diff --git a/lib/Image/ExifTool/Nikon.pm b/lib/Image/ExifTool/Nikon.pm
index f4b3aa7a..834d4890 100644
--- a/lib/Image/ExifTool/Nikon.pm
+++ b/lib/Image/ExifTool/Nikon.pm
@@ -62,7 +62,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::Exif;
use Image::ExifTool::GPS;
-$VERSION = '3.94';
+$VERSION = '3.95';
sub LensIDConv($$$);
sub ProcessNikonAVI($$$);
@@ -563,7 +563,7 @@ sub GetAFPointGrid($$;$);
'F0 3F 2D 8A 2C 40 DF 0E' => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD (B008)',
'E0 40 2D 98 2C 41 DF 4E' => 'Tamron 18-400mm f/3.5-6.3 Di II VC HLD (B028)', # (removed AF designation, ref 37)
'07 40 2F 44 2C 34 03 02' => 'Tamron AF 19-35mm f/3.5-4.5 (A10)',
- '07 40 30 45 2D 35 03 02' => 'Tamron AF 19-35mm f/3.5-4.5 (A10)',
+ '07 40 30 45 2D 35 03 02.1' => 'Tamron AF 19-35mm f/3.5-4.5 (A10)',
'00 49 30 48 22 2B 00 02' => 'Tamron SP AF 20-40mm f/2.7-3.5 (166D)',
'0E 4A 31 48 23 2D 0E 02' => 'Tamron SP AF 20-40mm f/2.7-3.5 (166D)',
'FE 48 37 5C 24 24 DF 0E' => 'Tamron SP 24-70mm f/2.8 Di VC USD (A007)', #24
@@ -656,6 +656,7 @@ sub GetAFPointGrid($$;$);
'00 54 48 48 18 18 00 00' => 'Voigtlander Ultron 40mm F2 SLII Aspherical',
'00 54 55 55 0C 0C 00 00' => 'Voigtlander Nokton 58mm F1.4 SLII',
'00 40 64 64 2C 2C 00 00' => 'Voigtlander APO-Lanthar 90mm F3.5 SLII Close Focus',
+ '07 40 30 45 2D 35 03 02.2' => 'Voigtlander Ultragon 19-35mm F3.5-4.5 VMV', #NJ
#
'00 40 2D 2D 2C 2C 00 00' => 'Carl Zeiss Distagon T* 3.5/18 ZF.2',
'00 48 27 27 24 24 00 00' => 'Carl Zeiss Distagon T* 2.8/15 ZF.2', #MykytaKozlov
diff --git a/lib/Image/ExifTool/NikonSettings.pm b/lib/Image/ExifTool/NikonSettings.pm
index 69f6fde3..f2194e80 100644
--- a/lib/Image/ExifTool/NikonSettings.pm
+++ b/lib/Image/ExifTool/NikonSettings.pm
@@ -17,7 +17,7 @@ use strict;
use vars qw($VERSION);
use Image::ExifTool qw(:DataAccess :Utils);
-$VERSION = '1.02';
+$VERSION = '1.03';
sub ProcessNikonSettings($$$);
@@ -1919,6 +1919,15 @@ my %infoD6 = (
10 => 'Auto (Animals)',
},
},
+ 0x170 => { Name => 'PreferSubSelectorCenter', PrintConv => \%offOn }, # CSf13 (D6 firmware v1.2.0)
+ 0x174 => { # CSa17-d (D6 firmware v1.2.0)
+ Name => 'FocusPointSelectionSpeed',
+ PrintConv => {
+ 1 => 'Normal',
+ 2 => 'High',
+ 3 => 'Very High',
+ },
+ },
);
#------------------------------------------------------------------------------
diff --git a/lib/Image/ExifTool/QuickTime.pm b/lib/Image/ExifTool/QuickTime.pm
index 89464d70..f09418ee 100644
--- a/lib/Image/ExifTool/QuickTime.pm
+++ b/lib/Image/ExifTool/QuickTime.pm
@@ -47,7 +47,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::Exif;
use Image::ExifTool::GPS;
-$VERSION = '2.62';
+$VERSION = '2.63';
sub ProcessMOV($$;$);
sub ProcessKeys($$$);
@@ -1581,36 +1581,29 @@ my %eeBox2 = (
coll => { Name => 'CollectionName', %langText3gp }, #17
rtng => {
Name => 'Rating',
+ Writable => 'undef',
+ Avoid => 1,
# (4-byte flags, 4-char entity, 4-char criteria, 2-byte lang, string)
- RawConv => q{
- return '<err>' unless length $val >= 14;
- my $str = 'Entity=' . substr($val,4,4) . ' Criteria=' . substr($val,8,4);
- $str =~ tr/\0-\x1f\x7f-\xff//d; # remove unprintable characters
- my $lang = Image::ExifTool::QuickTime::UnpackLang(Get16u(\$val, 12));
- $lang = $lang ? "($lang) " : '';
- $val = substr($val, 14);
- $val = $self->Decode($val, 'UCS2') if $val =~ /^\xfe\xff/;
- return $lang . $str . ' ' . $val;
- },
+ IText => 14, # (14 bytes before string)
+ Notes => 'string in the form "Entity=XXXX Criteria=XXXX XXXXX", used in 3gp videos',
+ ValueConv => '$val=~s/^(.{4})(.{4})/Entity=$1 Criteria=$2 /i; $val',
+ ValueConvInv => '$val=~s/Entity=(.{4}) Criteria=(.{4}) ?/$1$2/i; $val',
},
clsf => {
Name => 'Classification',
+ Writable => 'undef',
+ Avoid => 1,
# (4-byte flags, 4-char entity, 2-byte index, 2-byte lang, string)
- RawConv => q{
- return '<err>' unless length $val >= 12;
- my $str = 'Entity=' . substr($val,4,4) . ' Index=' . Get16u(\$val,8);
- $str =~ tr/\0-\x1f\x7f-\xff//d; # remove unprintable characters
- my $lang = Image::ExifTool::QuickTime::UnpackLang(Get16u(\$val, 10));
- $lang = $lang ? "($lang) " : '';
- $val = substr($val, 12);
- $val = $self->Decode($val, 'UCS2') if $val =~ /^\xfe\xff/;
- return $lang . $str . ' ' . $val;
- },
+ IText => 12,
+ Notes => 'string in the form "Entity=XXXX Index=### XXXXX", used in 3gp videos',
+ ValueConv => '$val=~s/^(.{4})(.{2})/"Entity=$1 Index=".unpack("n",$2)." "/ie; $val',
+ ValueConvInv => '$val=~s/Entity=(.{4}) Index=(\d+) ?/$1.pack("n",$2)/ie; $val',
},
kywd => {
Name => 'Keywords',
# (4 byte flags, 2-byte lang, 1-byte count, count x pascal strings, ref 17)
- # (but I have also seen a simple string written by iPhone)
+ # (but I have also seen a simple string written by iPhone, so don't make writable yet)
+ Notes => "not writable because Apple doesn't follow the 3gp specification",
RawConv => q{
my $sep = $self->Options('ListSep');
return join($sep, split /\0+/, $val) unless $val =~ /^\0/; # (iPhone)
@@ -1635,20 +1628,24 @@ my %eeBox2 = (
loci => {
Name => 'LocationInformation',
Groups => { 2 => 'Location' },
+ Writable => 'undef',
+ IText => 6,
+ Avoid => 1,
+ NoDecode => 1, # (we'll decode the data ourself)
+ Notes => q{
+ string in the form "XXXXX Role=XXX Lat=XXX Lon=XXX Alt=XXX Body=XXX
+ Notes=XXX", used in 3gp videos
+ },
# (4-byte flags, 2-byte lang, location string, 1-byte role, 4-byte fixed longitude,
# 4-byte fixed latitude, 4-byte fixed altitude, body string, notes string)
RawConv => q{
- return '<err>' unless length $val >= 6;
- my $lang = Image::ExifTool::QuickTime::UnpackLang(Get16u(\$val, 4));
- $lang = $lang ? "($lang) " : '';
- $val = substr($val, 6);
my $str;
if ($val =~ /^\xfe\xff/) {
$val =~ s/^(\xfe\xff(.{2})*?)\0\0//s or return '<err>';
$str = $self->Decode($1, 'UCS2');
} else {
$val =~ s/^(.*?)\0//s or return '<err>';
- $str = $1;
+ $str = $self->Decode($1, 'UTF8');
}
$str = '(none)' unless length $str;
return '<err>' if length $val < 13;
@@ -1663,27 +1660,52 @@ my %eeBox2 = (
if ($val =~ s/^(\xfe\xff(.{2})*?)\0\0//s) {
$str .= ' Body=' . $self->Decode($1, 'UCS2');
} elsif ($val =~ s/^(.*?)\0//s) {
- $str .= " Body=$1";
+ $str .= ' Body=' . $self->Decode($1, 'UTF8');
}
if ($val =~ s/^(\xfe\xff(.{2})*?)\0\0//s) {
$str .= ' Notes=' . $self->Decode($1, 'UCS2');
} elsif ($val =~ s/^(.*?)\0//s) {
- $str .= " Notes=$1";
+ $str .= ' Notes=' . $self->Decode($1, 'UTF8');
}
- return $lang . $str;
+ return $str;
+ },
+ RawConvInv => q{
+ my ($role, $lat, $lon, $alt, $body, $note);
+ $lat = $1 if $val =~ s/ Lat=([-+]?[.\d]+)//i;
+ $lon = $1 if $val =~ s/ Lon=([-+]?[.\d]+)//i;
+ $alt = $1 if $val =~ s/ Alt=([-+]?[.\d]+)//i;
+ $note = $val =~ s/ Notes=(.*)//i ? $1 : '';
+ $body = $val =~ s/ Body=(.*)//i ? $1 : '';
+ $role = $val =~ s/ Role=(.*)//i ? $1 : '';
+ $val = '' if $val eq '(none)';
+ $role = {shooting=>0,real=>1,fictional=>2}->{lc $role} || 0;
+ return $self->Encode($val, 'UTF8') . "\0" . Set8u($role) .
+ SetFixed32s(defined $lon ? $lon : 999) .
+ SetFixed32s(defined $lat ? $lat : 999) .
+ SetFixed32s(defined $alt ? $alt : 0) .
+ $self->Encode($body) . "\0" .
+ $self->Encode($note) . "\0";
},
},
yrrc => {
Name => 'Year',
+ Writable => 'undef',
Groups => { 2 => 'Time' },
- RawConv => 'length($val) >= 6 ? Get16u(\$val,4) : "<err>"',
+ Avoid => 1,
+ Notes => 'used in 3gp videos',
+ ValueConv => 'length($val) >= 6 ? unpack("x4n",$val) : "<err>"',
+ ValueConvInv => 'pack("Nn",0,$val)',
},
urat => { #17
Name => 'UserRating',
- RawConv => q{
+ Writable => 'undef',
+ Notes => 'used in 3gp videos',
+ Avoid => 1,
+ ValueConv => q{
return '<err>' unless length $val >= 8;
- return Get8u(\$val, 7);
+ unpack('x7C', $val);
},
+ ValueConvInv => 'pack("N2",0,$val)',
},
# tsel - TrackSelection (ref 17)
# Apple tags (ref 16[dead] -- see ref 25 instead)
@@ -9394,9 +9416,9 @@ ItemID: foreach $id (keys %$items) {
}
for (;;) {
my ($len, $lang);
- if ($$tagInfo{IText} and $$tagInfo{IText} == 6) {
- last if $pos + 6 > $size;
- $pos += 4;
+ if ($$tagInfo{IText} and $$tagInfo{IText} >= 6) {
+ last if $pos + $$tagInfo{IText} > $size;
+ $pos += $$tagInfo{IText} - 2;
$lang = unpack("x${pos}n", $val);
$pos += 2;
$len = $size - $pos;
@@ -9416,7 +9438,7 @@ ItemID: foreach $id (keys %$items) {
# ignore any empty entries (or null padding) after the first
next if not $len and $pos;
my $str = substr($val, $pos, $len);
- my $langInfo;
+ my ($langInfo, $enc);
if (($lang < 0x400 or $lang == 0x7fff) and $str !~ /^\xfe\xff/) {
# this is a Macintosh language code
# a language code of 0 is Macintosh english, so treat as default
@@ -9433,15 +9455,22 @@ ItemID: foreach $id (keys %$items) {
}
# the spec says only "Macintosh text encoding", but
# allow this to be configured by the user
- $str = $et->Decode($str, $charsetQuickTime);
+ $enc = $charsetQuickTime;
} else {
# convert language code to ASCII (ignore read-only bit)
$lang = UnpackLang($lang);
# may be either UTF-8 or UTF-16BE
- my $enc = $str=~s/^\xfe\xff// ? 'UTF16' : 'UTF8';
+ $enc = $str=~s/^\xfe\xff// ? 'UTF16' : 'UTF8';
+ }
+ unless ($$tagInfo{NoDecode}) {
$str = $et->Decode($str, $enc);
+ $str =~ s/\0+$//; # remove any trailing nulls (eg. 3gp tags)
+ }
+ if ($$tagInfo{IText} and $$tagInfo{IText} > 6) {
+ my $n = $$tagInfo{IText} - 6;
+ # add back extra bytes (eg. 'rtng' box)
+ $str = substr($val, $pos-$n-2, $n) . $str;
}
- $str =~ s/\0+$//; # remove any trailing nulls (eg. 3gp tags)
$langInfo = GetLangInfoQT($et, $tagInfo, $lang) if $lang;
$et->FoundTag($langInfo || $tagInfo, $str);
$pos += $len;
diff --git a/lib/Image/ExifTool/QuickTimeStream.pl b/lib/Image/ExifTool/QuickTimeStream.pl
index 417c6c3d..0d3ebb8a 100644
--- a/lib/Image/ExifTool/QuickTimeStream.pl
+++ b/lib/Image/ExifTool/QuickTimeStream.pl
@@ -2274,37 +2274,59 @@ sub ProcessNMEA($$$)
{
my ($et, $dirInfo, $tagTbl) = @_;
my $dataPt = $$dirInfo{DataPt};
- my $rtnVal;
- # parse only RMC sentence (with leading timestamp) for now
- while ($$dataPt =~ /(?:\[(\d+)\])?\$[A-Z]{2}RMC,(\d{2})(\d{2})(\d+(\.\d*)?),A?,(\d+\.\d+),([NS]),(\d+\.\d+),([EW]),(\d*\.?\d*),(\d*\.?\d*),(\d{2})(\d{2})(\d+)/g) {
- $rtnVal = 1;
- my $tc = $1; # milliseconds since 1970 (local time)
- my ($lat,$latRef,$lon,$lonRef) = ($6,$7,$8,$9);
- my $yr = $14 + ($14 >= 70 ? 1900 : 2000);
- my ($mon,$day,$hr,$min,$sec) = ($13,$12,$2,$3,$4);
- my ($spd, $trk);
- $spd = $10 * $knotsToKph if length $10;
- $trk = $11 if length $11;
- # lat/long are in DDDMM.MMMM format
- my $deg = int($lat / 100);
- $lat = $deg + ($lat - $deg * 100) / 60;
- $deg = int($lon / 100);
- $lon = $deg + ($lon - $deg * 100) / 60;
- $sec = '0' . $sec unless $sec =~ /^\d{2}/; # pad integer part of seconds to 2 digits
- my $time = sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%sZ',$yr,$mon,$day,$hr,$min,$sec);
- my $sampleTime;
- $sampleTime = ($tc - $$et{StartTime}) / 1000 if $tc and $$et{StartTime};
- FoundSomething($et, $tagTbl, $sampleTime);
- $et->HandleTag($tagTbl, GPSDateTime => $time);
- $et->HandleTag($tagTbl, GPSLatitude => $lat * ($latRef eq 'S' ? -1 : 1));
- $et->HandleTag($tagTbl, GPSLongitude => $lon * ($lonRef eq 'W' ? -1 : 1));
- if (defined $spd) {
- $et->HandleTag($tagTbl, GPSSpeed => $spd);
- $et->HandleTag($tagTbl, GPSSpeedRef => 'K');
+ my ($rtnVal, %fix);
+ # parse only RMC and GGA sentence [with leading timecode] for now
+ for (;;) {
+ my ($tc, $type, $tim);
+ if ($$dataPt =~ /(?:\[(\d+)\])?\$[A-Z]{2}(RMC|GGA),(\d{2}\d{2}\d+(\.\d*)?),/g) {
+ ($tc, $type, $tim) = ($1, $2, $3);
}
- if (defined $trk) {
- $et->HandleTag($tagTbl, GPSTrack => $trk);
- $et->HandleTag($tagTbl, GPSTrackRef => 'T');
+ # write out last fix now if complete
+ # (use the GPS timestamps because they may be different for the same timecode)
+ if ($fix{tim} and (not $tim or $fix{tim} != $tim)) {
+ if ($fix{dat} and defined $fix{lat} and defined $fix{lon}) {
+ my $sampleTime;
+ $sampleTime = ($fix{tc} - $$et{StartTime}) / 1000 if $fix{tc} and $$et{StartTime};
+ FoundSomething($et, $tagTbl, $sampleTime);
+ $et->HandleTag($tagTbl, GPSDateTime => $fix{dat});
+ $et->HandleTag($tagTbl, GPSLatitude => $fix{lat});
+ $et->HandleTag($tagTbl, GPSLongitude => $fix{lon});
+ if (defined $fix{spd}) {
+ $et->HandleTag($tagTbl, GPSSpeed => $fix{spd} * $knotsToKph);
+ $et->HandleTag($tagTbl, GPSSpeedRef => 'K');
+ }
+ if (defined $fix{trk}) {
+ $et->HandleTag($tagTbl, GPSTrack => $fix{trk});
+ $et->HandleTag($tagTbl, GPSTrackRef => 'T');
+ }
+ $et->HandleTag($tagTbl, GPSAltitude => $fix{alt}) if defined $fix{alt};
+ $et->HandleTag($tagTbl, GPSSatellites => $fix{nsats}+0) if defined $fix{nsats};
+ $et->HandleTag($tagTbl, GPSDOP => $fix{hdop}) if defined $fix{hdop};
+ }
+ undef %fix;
+ }
+ $fix{tim} = $tim or last;
+ my $pos = pos($$dataPt);
+ pos($$dataPt) = $pos - length($tim) - 1; # rewind to re-parse time
+ # (parsing of NMEA strings copied from Geotag.pm)
+ if ($type eq 'RMC' and
+ $$dataPt =~ /\G(\d{2})(\d{2})(\d+(\.\d*)?),A?,(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),(\d*\.?\d*),(\d*\.?\d*),(\d{2})(\d{2})(\d+)/g)
+ {
+ my $year = $15 + ($15 >= 70 ? 1900 : 2000);
+ $fix{tc} = $tc; # use timecode of RMC sentence
+ $fix{dat} = sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%sZ',$year,$14,$13,$1,$2,$3);
+ $fix{lat} = (($5 || 0) + $6/60) * ($7 eq 'N' ? 1 : -1);
+ $fix{lon} = (($8 || 0) + $9/60) * ($10 eq 'E' ? 1 : -1);
+ $fix{spd} = $11 if length $11;
+ $fix{trk} = $12 if length $12;
+ } elsif ($type eq 'GGA' and
+ $$dataPt =~ /\G(\d{2})(\d{2})(\d+(\.\d*)?),(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),[1-6]?,(\d+)?,(\.\d+|\d+\.?\d*)?,(-?\d+\.?\d*)?,M?/g)
+ {
+ $fix{lat} = (($5 || 0) + $6/60) * ($7 eq 'N' ? 1 : -1);
+ $fix{lon} = (($8 || 0) + $9/60) * ($10 eq 'E' ? 1 : -1);
+ @fix{qw(nsats hdop alt)} = ($11,$12,$13);
+ } else {
+ pos($$dataPt) = $pos; # continue searching from our last match
}
}
delete $$et{DOC_NUM};
diff --git a/lib/Image/ExifTool/RIFF.pm b/lib/Image/ExifTool/RIFF.pm
index 8b0169bd..3f040f45 100644
--- a/lib/Image/ExifTool/RIFF.pm
+++ b/lib/Image/ExifTool/RIFF.pm
@@ -21,6 +21,7 @@
# 13) http://tech.ebu.ch/docs/tech/tech3285.pdf
# 14) https://developers.google.com/speed/webp/docs/riff_container
# 15) https://tech.ebu.ch/docs/tech/tech3306-2009.pdf
+# 16) https://sites.google.com/site/musicgapi/technical-documents/wav-file-format
#------------------------------------------------------------------------------
package Image::ExifTool::RIFF;
@@ -29,7 +30,7 @@ use strict;
use vars qw($VERSION);
use Image::ExifTool qw(:DataAccess :Utils);
-$VERSION = '1.57';
+$VERSION = '1.58';
sub ConvertTimecode($);
sub ProcessSGLT($$$);
@@ -354,9 +355,35 @@ my %code2charset = (
SubDirectory => { TagTable => 'Image::ExifTool::RIFF::DS64' },
},
list => 'ListType', #15
- labl => { #15
- Name => 'Label',
- SubDirectory => { TagTable => 'Image::ExifTool::RIFF::Label' },
+ labl => { #16 (in 'adtl' chunk)
+ Name => 'CuePointLabel',
+ Priority => 0, # (so they are stored in sequence)
+ ValueConv => 'my $str=substr($val,4); $str=~s/\0+$//; unpack("V",$val) . " " . $str',
+ },
+ note => { #16 (in 'adtl' chunk)
+ Name => 'CuePointNote',
+ Priority => 0, # (so they are stored in sequence)
+ ValueConv => 'my $str=substr($val,4); $str=~s/\0+$//; unpack("V",$val) . " " . $str',
+ },
+ ltxt => { #16 (in 'adtl' chunk)
+ Name => 'LabeledText',
+ Notes => 'CuePointID Length Purpose Country Language Dialect Codepage Text',
+ Priority => 0, # (so they are stored in sequence)
+ ValueConv => q{
+ my @a = unpack('VVa4vvvv', $val);
+ $a[2] = "'$a[2]'";
+ my $txt = substr($val, 18);
+ $txt =~ s/\0+$//; # remove null terminator
+ return join(' ', @a, $txt);
+ },
+ },
+ smpl => { #16
+ Name => 'Sampler',
+ SubDirectory => { TagTable => 'Image::ExifTool::RIFF::Sampler' },
+ },
+ inst => { #16
+ Name => 'Instrument',
+ SubDirectory => { TagTable => 'Image::ExifTool::RIFF::Instrument' },
},
LIST_INFO => {
Name => 'Info',
@@ -396,6 +423,10 @@ my %code2charset = (
ProcessProc => \&Image::ExifTool::RIFF::ProcessChunks,
},
},
+ LIST_adtl => { #PH (ref 16, forum12387)
+ Name => 'AssociatedDataList',
+ SubDirectory => { TagTable => 'Image::ExifTool::RIFF::Main' },
+ },
# seen LIST_JUNK
JUNK => [
{
@@ -466,10 +497,15 @@ my %code2charset = (
Name => 'NumberOfSamples',
RawConv => 'Get32u(\$val, 0)',
},
- 'cue ' => {
+ 'cue '=> {
Name => 'CuePoints',
Binary => 1,
+ Notes => q{
+ config_files/cutepointlist.config from full distribution will decode this
+ and generate a list of cue points with labels
+ },
},
+ plst => { Name => 'Playlist', Binary => 1 }, #16
afsp => { },
IDIT => {
Name => 'DateTimeOriginal',
@@ -704,16 +740,52 @@ my %code2charset = (
# very unlikely, support for these is not yet implemented)
);
-# cue point labels (ref 15)
-%Image::ExifTool::RIFF::Label = (
+# Sampler chunk (ref 16)
+%Image::ExifTool::RIFF::Sampler = (
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
GROUPS => { 2 => 'Audio' },
FORMAT => 'int32u',
- 0 => 'LabelID',
- 1 => {
- Name => 'LabelText',
- Format => 'string[$size-4]',
+ 0 => 'Manufacturer',
+ 1 => 'Product',
+ 2 => 'SamplePeriod',
+ 3 => 'MIDIUnityNote',
+ 4 => 'MIDIPitchFraction',
+ 5 => {
+ Name => 'SMPTEFormat',
+ PrintConv => {
+ 0 => 'none',
+ 24 => '24 fps',
+ 25 => '25 fps',
+ 29 => '29 fps',
+ 30 => '30 fps',
+ },
},
+ 6 => {
+ Name => 'SMPTEOffset',
+ Notes => 'HH:MM:SS:FF',
+ ValueConv => q{
+ my $str = sprintf('%.8x', $val);
+ $str =~ s/(..)(..)(..)(..)/$1:$2:$3:$4/;
+ return $str;
+ },
+ },
+ 7 => 'NumSampleLoops',
+ 8 => 'SamplerDataLen',
+ 9 => { Name => 'SamplerData', Format => 'undef[$size-40]', Binary => 1 },
+);
+
+# Instrument chunk (ref 16)
+%Image::ExifTool::RIFF::Instrument = (
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
+ GROUPS => { 2 => 'Audio' },
+ FORMAT => 'int8s',
+ 0 => 'UnshiftedNote',
+ 1 => 'FineTune',
+ 2 => 'Gain',
+ 3 => 'LowNote',
+ 4 => 'HighNote',
+ 5 => 'LowVelocity',
+ 6 => 'HighVelocity',
);
# Sub chunks of INFO LIST chunk
diff --git a/lib/Image/ExifTool/Sony.pm b/lib/Image/ExifTool/Sony.pm
index 0962b88c..9c2baf79 100644
--- a/lib/Image/ExifTool/Sony.pm
+++ b/lib/Image/ExifTool/Sony.pm
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::Exif;
use Image::ExifTool::Minolta;
-$VERSION = '3.40';
+$VERSION = '3.41';
sub ProcessSRF($$$);
sub ProcessSR2($$$);
@@ -148,6 +148,7 @@ sub PrintInvLensSpec($;$$);
32859 => 'Sony FE 20mm F1.8 G', #IB/JR
32860 => 'Sony FE 12-24mm F2.8 GM', #JR/IB
32862 => 'Sony FE 50mm F1.2 GM', #IB/JR
+ 32863 => 'Sony FE 14mm F1.8 GM', #IB
32864 => 'Sony FE 28-60mm F4-5.6', #JR
32865 => 'Sony FE 35mm F1.4 GM', #IB/JR
32866 => 'Sony FE 24mm F2.8 G', #IB
@@ -1552,6 +1553,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
Name => 'FocusFrameSize',
Format => 'int16u',
Count => '3',
+ Notes => 'width and height of FocusFrame, centered on FocusLocation',
PrintConv => q{
my @a = split ' ', $val;
return $a[2] ? sprintf('%3dx%3d', $a[0], $a[1]) : 'n/a';
@@ -6127,6 +6129,7 @@ my %pictureProfile2010 = (
33 => 'Gamma HLG2 (PP10)', #14
34 => 'Gamma HLG3', #IB
37 => 'FL',
+ 38 => 'VV2',
39 => 'IN',
40 => 'SH',
},
diff --git a/lib/Image/ExifTool/TagLookup.pm b/lib/Image/ExifTool/TagLookup.pm
index 767d349d..d8c400cb 100644
--- a/lib/Image/ExifTool/TagLookup.pm
+++ b/lib/Image/ExifTool/TagLookup.pm
@@ -1456,6 +1456,7 @@ my %tagLookup = (
'clarity' => { 225 => 0x35, 226 => 0x3d, 411 => 0x2036, 468 => 'Clarity', 470 => 'Clarity' },
'clarity2012' => { 468 => 'Clarity2012', 470 => 'Clarity2012' },
'claritycontrol' => { 346 => 0x96 },
+ 'classification' => { 371 => 'clsf' },
'classifystate' => { 129 => 0xe1 },
'clearretouch' => { 311 => 0x7c },
'clearretouchvalue' => { 311 => 0xa3 },
@@ -3639,6 +3640,7 @@ my %tagLookup = (
'locationcreatedsublocation' => { 480 => [\'LocationCreated','LocationCreatedSublocation'] },
'locationcreatedworldregion' => { 480 => [\'LocationCreated','LocationCreatedWorldRegion'] },
'locationdate' => { 365 => 'location.date' },
+ 'locationinformation' => { 371 => 'loci' },
'locationinfoversion' => { 221 => 0x0 },
'locationname' => { 365 => 'location.name', 385 => 0x31 },
'locationnote' => { 365 => 'location.note' },
@@ -4878,7 +4880,7 @@ my %tagLookup = (
'rads' => { 371 => 'rads' },
'rangefinder' => { 276 => '4.1', 277 => '5.1', 278 => '5.1' },
'rasterizedcaption' => { 129 => 0x7d },
- 'rating' => { 117 => 0x4746, 125 => 0x1431, 357 => 0xdf, 363 => 'rtng', 411 => 0x2002, 463 => 'rating', 472 => 'rating', 480 => 'Rating', 484 => 'rating', 492 => 'Rating' },
+ 'rating' => { 117 => 0x4746, 125 => 0x1431, 357 => 0xdf, 363 => 'rtng', 371 => 'rtng', 411 => 0x2002, 463 => 'rating', 472 => 'rating', 480 => 'Rating', 484 => 'rating', 492 => 'Rating' },
'ratingpercent' => { 117 => 0x4749, 175 => 'Rating', 363 => 'rate', 492 => 'RatingPercent' },
'ratingregion' => { 480 => [\'Rating','RatingRatingRegion'] },
'ratingregioncity' => { 480 => [\'Rating','RatingRatingRegionCity'] },
@@ -6003,7 +6005,7 @@ my %tagLookup = (
'userfields' => { 461 => 'UserFields' },
'userlabel' => { 372 => 0x2b, 373 => 0x5a, 374 => 0x68 },
'userprofile' => { 306 => 0x302, 310 => 0x34c, 313 => 0x3038 },
- 'userrating' => { 365 => 'rating.user' },
+ 'userrating' => { 365 => 'rating.user', 371 => 'urat' },
'usmlenselectronicmf' => { 2 => 0x7, 81 => 0x7, 82 => 0x501 },
'uspsnumber' => { 484 => 'uspsNumber' },
'utmeasting' => { 165 => 'Easting' },
@@ -6405,7 +6407,7 @@ my %tagLookup = (
'ycbcrcoefficients' => { 117 => 0x211, 490 => 'YCbCrCoefficients' },
'ycbcrpositioning' => { 117 => 0x213, 490 => 'YCbCrPositioning' },
'ycbcrsubsampling' => { 117 => 0x212, 490 => 'YCbCrSubSampling' },
- 'year' => { 363 => 'yrrc', 365 => 'year' },
+ 'year' => { 363 => 'yrrc', 365 => 'year', 371 => 'yrrc' },
'yearcreated' => { 137 => 0x10, 146 => 0xc },
'yellowhsl' => { 101 => 0x20912 },
'yield' => { 486 => 'yield' },
@@ -6621,6 +6623,7 @@ my %tagExists = (
'aspectratioy' => 1,
'assistantsname' => 1,
'assistantsphone' => 1,
+ 'associateddatalist' => 1,
'associatedimagefile' => 1,
'association' => 1,
'assumeddisplaysize' => 1,
@@ -7163,7 +7166,6 @@ my %tagExists = (
'cip3side' => 1,
'circleofconfusion' => 1,
'class' => 1,
- 'classification' => 1,
'cleanaperture' => 1,
'cleanaperturedimensions' => 1,
'cleanapertureheight' => 1,
@@ -7448,6 +7450,8 @@ my %tagExists = (
'ctmd' => 1,
'cubemapproj' => 1,
'cuepoint' => 1,
+ 'cuepointlabel' => 1,
+ 'cuepointnote' => 1,
'cuepoints' => 1,
'cuesheet' => 1,
'currentbitrate' => 1,
@@ -8048,6 +8052,7 @@ my %tagExists = (
'filterserialnumber' => 1,
'finalflushsequence' => 1,
'finalframeblocks' => 1,
+ 'finetune' => 1,
'finishedfileprocessingrequest' => 1,
'finishipaversion' => 1,
'finishipfversion' => 1,
@@ -8132,6 +8137,7 @@ my %tagExists = (
'focuspeakinglevel' => 1,
'focuspointbrightness' => 1,
'focuspointpersistence' => 1,
+ 'focuspointselectionspeed' => 1,
'focuspos' => 1,
'focussettings' => 1,
'folder' => 1,
@@ -8391,6 +8397,8 @@ my %tagExists = (
'highisomode' => 1,
'highlightdata' => 1,
'highlightendpoints' => 1,
+ 'highnote' => 1,
+ 'highvelocity' => 1,
'hintformat' => 1,
'hintheader' => 1,
'hintinfo' => 1,
@@ -8772,8 +8780,7 @@ my %tagExists = (
'label1' => 1,
'label2' => 1,
'label3' => 1,
- 'labelid' => 1,
- 'labeltext' => 1,
+ 'labeledtext' => 1,
'lamebitrate' => 1,
'lameheader' => 1,
'lamelowpassfilter' => 1,
@@ -8948,7 +8955,6 @@ my %tagExists = (
'localeindicator' => 1,
'localpositionned' => 1,
'locationinfo' => 1,
- 'locationinformation' => 1,
'lockedpropertylist' => 1,
'locks' => 1,
'loglintable' => 1,
@@ -8973,6 +8979,8 @@ my %tagExists = (
'lookuptable' => 1,
'lotus' => 1,
'lowlightaf' => 1,
+ 'lownote' => 1,
+ 'lowvelocity' => 1,
'lr' => 1,
'lslv' => 1,
'lucasjunk' => 1,
@@ -9266,7 +9274,9 @@ my %tagExists = (
'middlename' => 1,
'midicontrol' => 1,
'midicontrolversion' => 1,
+ 'midipitchfraction' => 1,
'midisong' => 1,
+ 'midiunitynote' => 1,
'mie' => 1,
'mileage' => 1,
'mimeencoding' => 1,
@@ -9470,6 +9480,7 @@ my %tagExists = (
'numproperties' => 1,
'numrules' => 1,
'numsampleframes' => 1,
+ 'numsampleloops' => 1,
'numslices' => 1,
'numstreams' => 1,
'numtemporallayers' => 1,
@@ -9811,6 +9822,7 @@ my %tagExists = (
'playbackflickup' => 1,
'playbackflickuprating' => 1,
'playcounter' => 1,
+ 'playlist' => 1,
'playlistdelay' => 1,
'playlistindex' => 1,
'plus' => 1,
@@ -9841,6 +9853,7 @@ my %tagExists = (
'preferredrate' => 1,
'preferredsubfamily' => 1,
'preferredvolume' => 1,
+ 'prefersubselectorcenter' => 1,
'preroll' => 1,
'presentationformat' => 1,
'presentationtarget' => 1,
@@ -10280,7 +10293,11 @@ my %tagExists = (
'sampleformat' => 1,
'samplegroupdescription' => 1,
'samplepaddingbits' => 1,
+ 'sampleperiod' => 1,
+ 'sampler' => 1,
'samplerate2' => 1,
+ 'samplerdata' => 1,
+ 'samplerdatalen' => 1,
'samplesize' => 1,
'samplesizes' => 1,
'sampletable' => 1,
@@ -10514,6 +10531,8 @@ my %tagExists = (
'slideshow' => 1,
'smaxsamplevalue' => 1,
'sminsamplevalue' => 1,
+ 'smpteformat' => 1,
+ 'smpteoffset' => 1,
'snapshotid' => 1,
'snapshotname' => 1,
'soctemperature' => 1,
@@ -10993,6 +11012,7 @@ my %tagExists = (
'unknowntemperature1' => 1,
'unknowntemperature2' => 1,
'unsharpdata' => 1,
+ 'unshiftednote' => 1,
'untitled0' => 1,
'untitled1' => 1,
'untitled2' => 1,
diff --git a/lib/Image/ExifTool/TagNames.pod b/lib/Image/ExifTool/TagNames.pod
index f1e52e1c..a012f776 100644
--- a/lib/Image/ExifTool/TagNames.pod
+++ b/lib/Image/ExifTool/TagNames.pod
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
=head1 TAG TABLES
The tables listed below give the names of all tags recognized by ExifTool.
-They contain a total of 24118 tags, with 15614 unique tag names.
+They contain a total of 24273 tags, with 15738 unique tag names.
B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
@@ -6101,6 +6101,8 @@ Unknown only to reduce the volume of the normal output.
0x016b LimitAF-AreaModeSelWideLPeople? no
0x016c LimitAF-AreaModeSelWideLAnimals? no
0x016e AFAreaMode no
+ 0x0170 PreferSubSelectorCenter no
+ 0x0174 FocusPointSelectionSpeed no
=head2 Canon Tags
@@ -24426,6 +24428,155 @@ files.
48 PrimaryFileGUID no
64 FileGUID no
+=head2 MRC Tags
+
+Tags extracted from Medical Research Council (MRC) format imaging files.
+See L<https://www.ccpem.ac.uk/mrc_format/mrc2014.php> for the specification.
+
+ Index4 Tag Name Writable
+ ------ -------- --------
+ 0 ImageWidth no
+ 1 ImageHeight no
+ 2 ImageDepth no
+ 3 ImageMode no
+ 4 StartPoint no
+ 7 GridSize no
+ 10 CellWidth no
+ 11 CellHeight no
+ 12 CellDepth no
+ 13 CellAlpha no
+ 14 CellBeta no
+ 15 CellGamma no
+ 16 ImageWidthAxis no
+ 17 ImageHeightAxis no
+ 18 ImageDepthAxis no
+ 19 DensityMin no
+ 20 DensityMax no
+ 21 DensityMean no
+ 22 SpaceGroupNumber no
+ 23 ExtendedHeaderSize no
+ 26 ExtendedHeaderType no
+ 27 MRCVersion no
+ 49 Origin no
+ 53 MachineStamp no
+ 54 RMSDeviation no
+ 55 NumberOfLabels no
+ 56 Label0 no
+ 76 Label1 no
+ 96 Label2 no
+ 116 Label3 no
+ 136 Label4 no
+ 156 Label5 no
+ 176 Label6 no
+ 196 Label7 no
+ 216 Label8 no
+ 236 Label9 no
+
+=head3 MRC FEI12 Tags
+
+Tags extracted from FEI1 and FEI2 extended headers.
+
+ Index1 Tag Name Writable
+ ------ -------- --------
+ 0 MetadataSize no
+ 4 MetadataVersion no
+ 8 Bitmask1 no
+ 12 TimeStamp no
+ 20 MicroscopeType no
+ 36 MicroscopeID no
+ 52 Application no
+ 68 AppVersion no
+ 84 HighTension no
+ 92 Dose no
+ 100 AlphaTilt no
+ 108 BetaTilt no
+ 116 XStage no
+ 124 YStage no
+ 132 ZStage no
+ 140 TiltAxisAngle no
+ 148 DualAxisRot no
+ 156 PixelSizeX no
+ 164 PixelSizeY no
+ 220 Defocus no
+ 228 STEMDefocus no
+ 236 AppliedDefocus no
+ 244 InstrumentMode no
+ 248 ProjectionMode no
+ 252 ObjectiveLens no
+ 268 HighMagnificationMode no
+ 284 ProbeMode no
+ 288 EFTEMOn no
+ 289 Magnification no
+ 297 Bitmask2 no
+ 301 CameraLength no
+ 309 SpotIndex no
+ 313 IlluminationArea no
+ 321 Intensity no
+ 329 ConvergenceAngle no
+ 337 IlluminationMode no
+ 353 WideConvergenceAngleRange no
+ 354 SlitInserted no
+ 355 SlitWidth no
+ 363 AccelVoltOffset no
+ 371 DriftTubeVolt no
+ 379 EnergyShift no
+ 387 ShiftOffsetX no
+ 395 ShiftOffsetY no
+ 403 ShiftX no
+ 411 ShiftY no
+ 419 IntegrationTime no
+ 427 BinningWidth no
+ 431 BinningHeight no
+ 435 CameraName no
+ 451 ReadoutAreaLeft no
+ 455 ReadoutAreaTop no
+ 459 ReadoutAreaRight no
+ 463 ReadoutAreaBottom no
+ 467 CetaNoiseReduct no
+ 468 CetaFramesSummed no
+ 472 DirectDetElectronCounting no
+ 473 DirectDetAlignFrames no
+ 490 Bitmask3 no
+ 518 PhasePlate no
+ 519 STEMDetectorName no
+ 535 Gain no
+ 543 Offset no
+ 571 DwellTime no
+ 579 FrameTime no
+ 587 ScanSizeLeft no
+ 591 ScanSizeTop no
+ 595 ScanSizeRight no
+ 599 ScanSizeBottom no
+ 603 FullScanFOV_X no
+ 611 FullScanFOV_Y no
+ 619 Element no
+ 635 EnergyIntervalLower no
+ 643 EnergyIntervalHigher no
+ 651 Method no
+ 655 IsDoseFraction no
+ 656 FractionNumber no
+ 660 StartFrame no
+ 664 EndFrame no
+ 668 InputStackFilename no
+ 748 Bitmask4 no
+ 752 AlphaTiltMin no
+ 760 AlphaTiltMax no
+ 768 ScanRotation no
+ 776 DiffractionPatternRotation no
+ 784 ImageRotation no
+ 792 ScanModeEnumeration no
+ 796 AcquisitionTimeStamp no
+ 804 DetectorCommercialName no
+ 820 StartTiltAngle no
+ 828 EndTiltAngle no
+ 836 TiltPerImage no
+ 844 TitlSpeed no
+ 852 BeamCenterX no
+ 856 BeamCenterY no
+ 860 CFEGFlashTimeStamp no
+ 868 PhasePlatePosition no
+ 872 ObjectiveAperture no
+
=head2 MIFF Tags
The MIFF (Magick Image File Format) format allows aribrary tag names to be
@@ -27030,7 +27181,7 @@ the config file.
'chpl' ChapterList no
'clfn' ClipFileName string
'clid' ClipID string
- 'clsf' Classification no
+ 'clsf' Classification undef/
'cmid' CameraID string
'cmnm' Model string/
'coll' CollectionName string/
@@ -27048,7 +27199,7 @@ the config file.
'infu' InfoURL string
'kgtt' TrackType string
'kywd' Keywords no
- 'loci' LocationInformation no
+ 'loci' LocationInformation undef/
'lrcu' LyricsURI string
'lvlm' LevelMeter? rational64s
'manu' Make no
@@ -27063,7 +27214,7 @@ the config file.
'rads' Rads? rational64s
'reel' ReelName string
'roll' Roll rational64s/
- 'rtng' Rating no
+ 'rtng' Rating undef/
'scen' Scene string
'scrn' OlympusPreview Olympus scrn
'shot' ShotName string
@@ -27076,12 +27227,12 @@ the config file.
ThumbnailPNG string
UnknownThumbnail string
'titl' Title string/
- 'urat' UserRating no
+ 'urat' UserRating undef/
'uuid' GarminSoftware string
UUID-Unknown? no
'vndr' Vendor string
'vrot' AccelerometerData no
- 'yrrc' Year no
+ 'yrrc' Year undef/
"\xa9ART" Artist string
"\xa9TIM" StartTimecode string
"\xa9TSC" StartTimeScale string
@@ -29889,6 +30040,7 @@ sub-documents, but the Duration is calculated for the full video.
'LIST_INF0' Info RIFF Info
'LIST_INFO' Info RIFF Info
'LIST_Tdat' Tdat RIFF Tdat
+ 'LIST_adtl' AssociatedDataList RIFF
'LIST_exif' Exif RIFF Exif
'LIST_hdrl' Hdrl RIFF Hdrl
'LIST_hydt' PentaxData Pentax AVI
@@ -29911,9 +30063,14 @@ sub-documents, but the Duration is calculated for the full video.
'gps0' GPSTrack QuickTime Stream
'gsen' GSensor QuickTime Stream
'iXML' IXML XMP XML
- 'labl' Label RIFF Label
+ 'inst' Instrument RIFF Instrument
+ 'labl' CuePointLabel no
'list' ListType no
+ 'ltxt' LabeledText no
+ 'note' CuePointNote no
'olym' Olym Olympus WAV
+ 'plst' Playlist no
+ 'smpl' Sampler RIFF Sampler
'tx_USER' UserText RIFF UserText
'tx_Unknown' Text no
@@ -30210,12 +30367,32 @@ L<https://tech.ebu.ch/docs/tech/tech3306-2009.pdf> for the specification.
1 DataSize64 no
2 NumberOfSamples64 no
-=head3 RIFF Label Tags
+=head3 RIFF Instrument Tags
+
+ Index1 Tag Name Writable
+ ------ -------- --------
+ 0 UnshiftedNote no
+ 1 FineTune no
+ 2 Gain no
+ 3 LowNote no
+ 4 HighNote no
+ 5 LowVelocity no
+ 6 HighVelocity no
+
+=head3 RIFF Sampler Tags
Index4 Tag Name Writable
------ -------- --------
- 0 LabelID no
- 1 LabelText no
+ 0 Manufacturer no
+ 1 Product no
+ 2 SamplePeriod no
+ 3 MIDIUnityNote no
+ 4 MIDIPitchFraction no
+ 5 SMPTEFormat no
+ 6 SMPTEOffset no
+ 7 NumSampleLoops no
+ 8 SamplerDataLen no
+ 9 SamplerData no
=head3 RIFF UserText Tags
diff --git a/lib/Image/ExifTool/WriteQuickTime.pl b/lib/Image/ExifTool/WriteQuickTime.pl
index 87c575ef..a325552e 100644
--- a/lib/Image/ExifTool/WriteQuickTime.pl
+++ b/lib/Image/ExifTool/WriteQuickTime.pl
@@ -1232,10 +1232,14 @@ sub WriteQuickTime($$$)
} elsif ($format) {
$val = ReadValue(\$buff, 0, $format, undef, $size);
} elsif (($tag =~ /^\xa9/ or $$tagInfo{IText}) and $size >= ($$tagInfo{IText} || 4)) {
- if ($$tagInfo{IText} and $$tagInfo{IText} == 6) {
- $lang = unpack('x4n', $buff);
- $len = $size - 6;
- $val = substr($buff, 6, $len);
+ my $hdr;
+ if ($$tagInfo{IText} and $$tagInfo{IText} >= 6) {
+ my $iText = $$tagInfo{IText};
+ my $pos = $iText - 2;
+ $lang = unpack("x${pos}n", $buff);
+ $hdr = substr($buff,4,$iText-6);
+ $len = $size - $iText;
+ $val = substr($buff, $iText, $len);
} else {
($len, $lang) = unpack('nn', $buff);
$len -= 4 if 4 + $len > $size; # (see QuickTime.pm for explanation)
@@ -1243,14 +1247,18 @@ sub WriteQuickTime($$$)
$val = substr($buff, 4, $len);
}
$lang or $lang = $undLang; # treat both 0 and 'und' as 'und'
+ my $enc;
if ($lang < 0x400 and $val !~ /^\xfe\xff/) {
$charsetQuickTime = $et->Options('CharsetQuickTime');
- $val = $et->Decode($val, $charsetQuickTime);
+ $enc = $charsetQuickTime;
} else {
- my $enc = $val=~s/^\xfe\xff// ? 'UTF16' : 'UTF8';
+ $enc = $val=~s/^\xfe\xff// ? 'UTF16' : 'UTF8';
+ }
+ unless ($$tagInfo{NoDecode}) {
$val = $et->Decode($val, $enc);
+ $val =~ s/\0+$//; # remove trailing nulls if they exist
}
- $val =~ s/\0+$//; # remove trailing nulls if they exist
+ $val = $hdr . $val if defined $hdr;
my $langCode = UnpackLang($lang, 1);
$langInfo = GetLangInfo($tagInfo, $langCode);
$nvHash = $et->GetNewValueHash($langInfo);
@@ -1267,6 +1275,9 @@ sub WriteQuickTime($$$)
}
} else {
$val = $buff;
+ if ($tag =~ /^\xa9/ or $$tagInfo{IText}) {
+ $et->Warn("Corrupted $$tagInfo{Name} value");
+ }
}
if ($nvHash and defined $val) {
if ($et->IsOverwriting($nvHash, $val)) {
@@ -1279,12 +1290,23 @@ sub WriteQuickTime($$$)
$et->VerboseValue("+ $grp:$$langInfo{Name}", $newData);
# add back necessary header and encode as necessary
if (defined $lang) {
- $newData = $et->Encode($newData, $lang < 0x400 ? $charsetQuickTime : 'UTF8');
+ my $iText = $$tagInfo{IText} || 0;
+ my $hdr;
+ if ($iText > 6) {
+ $newData .= ' 'x($iText-6) if length($newData) < $iText-6;
+ $hdr = substr($newData, 0, $iText-6);
+ $newData = substr($newData, $iText-6);
+ }
+ unless ($$tagInfo{NoDecode}) {
+ $newData = $et->Encode($newData, $lang < 0x400 ? $charsetQuickTime : 'UTF8');
+ }
my $wLang = $lang eq $undLang ? 0 : $lang;
- if ($$tagInfo{IText} and $$tagInfo{IText} == 6) {
+ if ($iText < 6) {
+ $newData = pack('nn', length($newData), $wLang) . $newData;
+ } elsif ($iText == 6) {
$newData = pack('Nn', 0, $wLang) . $newData . "\0";
} else {
- $newData = pack('nn', length($newData), $wLang) . $newData;
+ $newData = "\0\0\0\0" . $hdr . pack('n', $wLang) . $newData . "\0";
}
} elsif (not $format or $format =~ /^string/ and
not $$tagInfo{Binary} and not $$tagInfo{ValueConv})
@@ -1443,9 +1465,12 @@ sub WriteQuickTime($$$)
my $grp = $et->GetGroup($tagInfo,1);
$et->Warn("Can't use country code for $grp:$$tagInfo{Name}");
next;
- } elsif ($$tagInfo{IText} and $$tagInfo{IText} == 6) {
+ } elsif ($$tagInfo{IText} and $$tagInfo{IText} >= 6) {
# add 6-byte langText header and trailing null
- $newVal = pack('Nn',0,$lang) . $newVal . "\0";
+ # (with extra junk before language code if IText > 6)
+ my $n = $$tagInfo{IText} - 6;
+ $newVal .= ' ' x $n if length($newVal) < $n;
+ $newVal = "\0\0\0\0" . substr($newVal,0,$n) . pack('n',0,$lang) . substr($newVal,$n) . "\0";
} else {
# add IText header
$newVal = pack('nn',length($newVal),$lang) . $newVal;
diff --git a/lib/Image/ExifTool/WriteXMP.pl b/lib/Image/ExifTool/WriteXMP.pl
index 2fee0b33..23694612 100644
--- a/lib/Image/ExifTool/WriteXMP.pl
+++ b/lib/Image/ExifTool/WriteXMP.pl
@@ -506,7 +506,7 @@ sub ConformPathToNamespace($$)
my $prop;
foreach $prop (@propList) {
my ($ns, $tag) = $prop =~ /(.+?):(.*)/;
- next if $$nsUsed{$ns};
+ next if not defined $ns or $$nsUsed{$ns};
my $uri = $nsURI{$ns};
unless ($uri) {
warn "No URI for namespace prefix $ns!\n";
@@ -1417,7 +1417,11 @@ sub WriteXMP($$;$)
my $uri = $nsUsed{$1};
unless ($uri) {
$uri = $nsURI{$1}; # we must have added a namespace
- $uri or $xmpErr = "Undefined XMP namespace: $1", next;
+ unless ($uri) {
+ # (namespace may be empty if trying to write empty XMP structure, forum12384)
+ $xmpErr = "Undefined XMP namespace: $1" if length $uri;
+ next;
+ }
}
$nsNew{$1} = $uri;
# need a new description if any new namespaces
diff --git a/lib/Image/ExifTool/XMP.pm b/lib/Image/ExifTool/XMP.pm
index 2fcced23..970151ec 100644
--- a/lib/Image/ExifTool/XMP.pm
+++ b/lib/Image/ExifTool/XMP.pm
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
use Image::ExifTool::GPS;
require Exporter;
-$VERSION = '3.40';
+$VERSION = '3.41';
@ISA = qw(Exporter);
@EXPORT_OK = qw(EscapeXML UnescapeXML);
@@ -71,6 +71,13 @@ sub ConvertRational($);
sub ConvertRationalList($);
sub WriteGSpherical($$$);
+# standard path locations for XMP in major file types
+my %stdPath = (
+ JPEG => 'JPEG-APP1-XMP',
+ TIFF => 'TIFF-IFD0-XMP',
+ PSD => 'PSD-XMP',
+);
+
# lookup for translating to ExifTool namespaces (and family 1 group names)
%stdXlatNS = (
# shorten ugly namespace prefixes
@@ -3844,6 +3851,7 @@ sub ProcessXMP($$;$)
my ($buff, $fmt, $hasXMP, $isXML, $isRDF, $isSVG);
my $rtnVal = 0;
my $bom = 0;
+ my $path = $et->MetadataPath();
# namespaces and prefixes currently in effect while parsing the file,
# and lookup to translate brain-dead-Microsoft-Photo-software prefixes
@@ -3861,11 +3869,7 @@ sub ProcessXMP($$;$)
(($$dirInfo{DirName} || '') eq 'XMP' or $$et{FILE_TYPE} eq 'XMP'))
{
$$et{XmpValidate} = { } if $$et{OPTIONS}{Validate};
- my $path = $et->MetadataPath();
- my $nonStd;
- if ($$et{FILE_TYPE} =~ /^(JPEG|TIFF|PSD)$/ and $path !~ /^(JPEG-APP1-XMP|TIFF-IFD0-XMP|PSD-XMP)$/) {
- $nonStd = 1;
- }
+ my $nonStd = ($stdPath{$$et{FILE_TYPE}} and $path ne $stdPath{$$et{FILE_TYPE}});
if ($nonStd and $Image::ExifTool::MWG::strict) {
$et->Warn("Ignored non-standard XMP at $path");
return 1;
@@ -4125,6 +4129,13 @@ sub ProcessXMP($$;$)
}
defined $fmt or $et->Warn('XMP character encoding error');
}
+ # warn if standard XMP is missing xpacket wrapper
+ if ($$et{XMP_NO_XPACKET} and $$et{OPTIONS}{Validate} and
+ $stdPath{$$et{FILE_TYPE}} and $path eq $stdPath{$$et{FILE_TYPE}} and
+ not $$dirInfo{IsExtended} and not $$et{DOC_NUM})
+ {
+ $et->Warn('XMP is missing xpacket wrapper', 1);
+ }
if ($fmt) {
# trim if necessary to avoid converting non-UTF data
if ($dirStart or $dirEnd != length($$dataPt)) {
diff --git a/perl-Image-ExifTool.spec b/perl-Image-ExifTool.spec
index 2c9491e4..aefadd01 100644
--- a/perl-Image-ExifTool.spec
+++ b/perl-Image-ExifTool.spec
@@ -1,6 +1,6 @@
Summary: perl module for image data extraction
Name: perl-Image-ExifTool
-Version: 12.24
+Version: 12.25
Release: 1
License: Artistic/GPL
Group: Development/Libraries/Perl
@@ -22,47 +22,47 @@ supported by ExifTool (r = read, w = write, c = create):
File Types
------------+-------------+-------------+-------------+------------
- 360 r/w | DPX r | ITC r | O r | RAR r
- 3FR r | DR4 r/w/c | J2C r | ODP r | RAW r/w
- 3G2 r/w | DSS r | JNG r/w | ODS r | RIFF r
- 3GP r/w | DV r | JP2 r/w | ODT r | RSRC r
- A r | DVB r/w | JPEG r/w | OFR r | RTF r
- AA r | DVR-MS r | JSON r | OGG r | RW2 r/w
- AAE r | DYLIB r | JXL r | OGV r | RWL r/w
- AAX r/w | EIP r | K25 r | ONP r | RWZ r
- ACR r | EPS r/w | KDC r | OPUS r | RM r
- AFM r | EPUB r | KEY r | ORF r/w | SEQ r
- AI r/w | ERF r/w | LA r | ORI r/w | SKETCH r
- AIFF r | EXE r | LFP r | OTF r | SO r
- APE r | EXIF r/w/c | LNK r | PAC r | SR2 r/w
- ARQ r/w | EXR r | LRV r/w | PAGES r | SRF r
- ARW r/w | EXV r/w/c | M2TS r | PBM r/w | SRW r/w
- ASF r | F4A/V r/w | M4A/V r/w | PCD r | SVG r
- AVI r | FFF r/w | MACOS r | PCX r | SWF r
- AVIF r/w | FITS r | MAX r | PDB r | THM r/w
- AZW r | FLA r | MEF r/w | PDF r/w | TIFF r/w
- BMP r | FLAC r | MIE r/w/c | PEF r/w | TORRENT r
- BPG r | FLIF r/w | MIFF r | PFA r | TTC r
- BTF r | FLV r | MKA r | PFB r | TTF r
- CHM r | FPF r | MKS r | PFM r | TXT r
- COS r | FPX r | MKV r | PGF r | VCF r
- CR2 r/w | GIF r/w | MNG r/w | PGM r/w | VRD r/w/c
- CR3 r/w | GPR r/w | MOBI r | PLIST r | VSD r
- CRM r/w | GZ r | MODD r | PICT r | WAV r
- CRW r/w | HDP r/w | MOI r | PMP r | WDP r/w
- CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBP r
- CSV r | HEIC r/w | MOV r/w | PPM r/w | WEBM r
- CZI r | HEIF r/w | MP3 r | PPT r | WMA r
- DCM r | HTML r | MP4 r/w | PPTX r | WMV r
- DCP r/w | ICC r/w/c | MPC r | PS r/w | WTV r
- DCR r | ICS r | MPG r | PSB r/w | WV r
- DFONT r | IDML r | MPO r/w | PSD r/w | X3F r/w
- DIVX r | IIQ r/w | MQV r/w | PSP r | XCF r
- DJVU r | IND r/w | MRW r/w | QTIF r/w | XLS r
- DLL r | INSP r/w | MXF r | R3D r | XLSX r
- DNG r/w | INSV r | NEF r/w | RA r | XMP r/w/c
- DOC r | INX r | NRW r/w | RAF r/w | ZIP r
- DOCX r | ISO r | NUMBERS r | RAM r |
+ 360 r/w | DPX r | ITC r | NUMBERS r | RAM r
+ 3FR r | DR4 r/w/c | J2C r | O r | RAR r
+ 3G2 r/w | DSS r | JNG r/w | ODP r | RAW r/w
+ 3GP r/w | DV r | JP2 r/w | ODS r | RIFF r
+ A r | DVB r/w | JPEG r/w | ODT r | RSRC r
+ AA r | DVR-MS r | JSON r | OFR r | RTF r
+ AAE r | DYLIB r | JXL r | OGG r | RW2 r/w
+ AAX r/w | EIP r | K25 r | OGV r | RWL r/w
+ ACR r | EPS r/w | KDC r | ONP r | RWZ r
+ AFM r | EPUB r | KEY r | OPUS r | RM r
+ AI r/w | ERF r/w | LA r | ORF r/w | SEQ r
+ AIFF r | EXE r | LFP r | ORI r/w | SKETCH r
+ APE r | EXIF r/w/c | LNK r | OTF r | SO r
+ ARQ r/w | EXR r | LRV r/w | PAC r | SR2 r/w
+ ARW r/w | EXV r/w/c | M2TS r | PAGES r | SRF r
+ ASF r | F4A/V r/w | M4A/V r/w | PBM r/w | SRW r/w
+ AVI r | FFF r/w | MACOS r | PCD r | SVG r
+ AVIF r/w | FITS r | MAX r | PCX r | SWF r
+ AZW r | FLA r | MEF r/w | PDB r | THM r/w
+ BMP r | FLAC r | MIE r/w/c | PDF r/w | TIFF r/w
+ BPG r | FLIF r/w | MIFF r | PEF r/w | TORRENT r
+ BTF r | FLV r | MKA r | PFA r | TTC r
+ CHM r | FPF r | MKS r | PFB r | TTF r
+ COS r | FPX r | MKV r | PFM r | TXT r
+ CR2 r/w | GIF r/w | MNG r/w | PGF r | VCF r
+ CR3 r/w | GPR r/w | MOBI r | PGM r/w | VRD r/w/c
+ CRM r/w | GZ r | MODD r | PLIST r | VSD r
+ CRW r/w | HDP r/w | MOI r | PICT r | WAV r
+ CS1 r/w | HDR r | MOS r/w | PMP r | WDP r/w
+ CSV r | HEIC r/w | MOV r/w | PNG r/w | WEBP r
+ CZI r | HEIF r/w | MP3 r | PPM r/w | WEBM r
+ DCM r | HTML r | MP4 r/w | PPT r | WMA r
+ DCP r/w | ICC r/w/c | MPC r | PPTX r | WMV r
+ DCR r | ICS r | MPG r | PS r/w | WTV r
+ DFONT r | IDML r | MPO r/w | PSB r/w | WV r
+ DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
+ DJVU r | IND r/w | MRC r | PSP r | XCF r
+ DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
+ DNG r/w | INSV r | MXF r | R3D r | XLSX r
+ DOC r | INX r | NEF r/w | RA r | XMP r/w/c
+ DOCX r | ISO r | NRW r/w | RAF r/w | ZIP r
Meta Information
----------------------+----------------------+---------------------
diff --git a/pp_build_exe.args b/pp_build_exe.args
index b0faaf04..ff955f5a 100644
--- a/pp_build_exe.args
+++ b/pp_build_exe.args
@@ -21,10 +21,10 @@
# 10) Copy zip archive to web servers.
# 11) Update zip file version in link and text of html/index.html.
#------------------------------------------------------------------------------
--T exiftool-12.23
-#--info=FileVersion=12.2.3.0
-#--info=ProductVersion=12.2.3.0
-##"--info=Build Date=2021:04:01 14:01:49-04:00"
+-T exiftool-12.25
+#--info=FileVersion=12.2.5.0
+#--info=ProductVersion=12.2.5.0
+##"--info=Build Date=2021:04:22 14:33:15-04:00"
##"--info=Bundled Perl Version=ActivePerl 5.24.0"
##"--info=LegalCopyright=Copyright (c) 2003-2021, Phil Harvey"
##"--info=ProductName=ExifTool"
@@ -181,6 +181,7 @@
-M Image::ExifTool::MPC
-M Image::ExifTool::MPEG
-M Image::ExifTool::MPF
+-M Image::ExifTool::MRC
-M Image::ExifTool::MWG
-M Image::ExifTool::MXF
-M Image::ExifTool::Nikon
diff --git a/t/JXL.t b/t/JXL.t
new file mode 100644
index 00000000..1ab3ad6d
--- /dev/null
+++ b/t/JXL.t
@@ -0,0 +1,50 @@
+# Before "make install", this script should be runnable with "make test".
+# After "make install" it should work as "perl t/Jpeg2000.t".
+
+BEGIN {
+ $| = 1; print "1..3\n"; $Image::ExifTool::configFile = '';
+ require './t/TestLib.pm'; t::TestLib->import();
+}
+END {print "not ok 1\n" unless $loaded;}
+
+# test 1: Load the module(s)
+use Image::ExifTool 'ImageInfo';
+use Image::ExifTool::Jpeg2000;
+$loaded = 1;
+print "ok 1\n";
+
+my $testname = 'JXL';
+my $testnum = 1;
+
+# test 2: Extract information from JXL.jxl
+{
+ ++$testnum;
+ my $exifTool = new Image::ExifTool;
+ my $info = $exifTool->ImageInfo('t/images/JXL.jxl', '-system:all');
+ print 'not ' unless check($exifTool, $info, $testname, $testnum);
+ print "ok $testnum\n";
+}
+
+# test 3: Write some new information
+{
+ ++$testnum;
+ my $exifTool = new Image::ExifTool;
+ my $testfile = "t/${testname}_${testnum}_failed.jxl";
+ unlink $testfile;
+ my @writeInfo = (
+ [ 'XMP:Subject' => 'test subject' ],
+ [ 'EXIF:Artist' => 'test artist' ],
+ );
+ $exifTool->Options(IgnoreMinorErrors => 1);
+ $exifTool->SetNewValue(@$_) foreach @writeInfo;
+ my $ok = writeInfo($exifTool, 't/images/JXL.jxl', $testfile, undef, 1);
+ my $info = $exifTool->ImageInfo($testfile, '-system:all');
+ if (check($exifTool, $info, $testname, $testnum) and $ok) {
+ unlink $testfile;
+ } else {
+ print 'not ';
+ }
+ print "ok $testnum\n";
+}
+
+# end
diff --git a/t/JXL_2.out b/t/JXL_2.out
new file mode 100644
index 00000000..130a9970
--- /dev/null
+++ b/t/JXL_2.out
@@ -0,0 +1,8 @@
+[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 12.25
+[File, File, Other] FileType - File Type: JXL Codestream
+[File, File, Other] FileTypeExtension - File Type Extension: jxl
+[File, File, Other] MIMEType - MIME Type: image/jxl
+[File, File, Image] ImageWidth - Image Width: 200
+[File, File, Image] ImageHeight - Image Height: 130
+[Composite, Composite, Image] Exif-ImageSize - Image Size: 200x130
+[Composite, Composite, Image] Exif-Megapixels - Megapixels: 0.026
diff --git a/t/JXL_3.out b/t/JXL_3.out
new file mode 100644
index 00000000..6b905fcb
--- /dev/null
+++ b/t/JXL_3.out
@@ -0,0 +1,19 @@
+[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 12.25
+[File, File, Other] FileType - File Type: JXL
+[File, File, Other] FileTypeExtension - File Type Extension: jxl
+[File, File, Other] MIMEType - MIME Type: image/jxl
+[File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM)
+[File, File, Image] ImageWidth - Image Width: 200
+[File, File, Image] ImageHeight - Image Height: 130
+[Jpeg2000, Jpeg2000, Video] 0 - Major Brand: JPEG XL Image (.JXL)
+[Jpeg2000, Jpeg2000, Video] 1 - Minor Version: 0.0.0
+[Jpeg2000, Jpeg2000, Video] 2 - Compatible Brands: jxl
+[EXIF, IFD0, Image] 282 - X Resolution: 72
+[EXIF, IFD0, Image] 283 - Y Resolution: 72
+[EXIF, IFD0, Image] 296 - Resolution Unit: inches
+[EXIF, IFD0, Author] 315 - Artist: test artist
+[EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered
+[XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 12.25
+[XMP, XMP-dc, Image] subject - Subject: test subject
+[Composite, Composite, Image] Exif-ImageSize - Image Size: 200x130
+[Composite, Composite, Image] Exif-Megapixels - Megapixels: 0.026
diff --git a/t/MRC.t b/t/MRC.t
new file mode 100644
index 00000000..330c70f6
--- /dev/null
+++ b/t/MRC.t
@@ -0,0 +1,30 @@
+# Before "make install", this script should be runnable with "make test".
+# After "make install" it should work as "perl t/MRC.t".
+
+BEGIN {
+ $| = 1; print "1..2\n"; $Image::ExifTool::configFile = '';
+ require './t/TestLib.pm'; t::TestLib->import();
+}
+END {print "not ok 1\n" unless $loaded;}
+
+# test 1: Load the module(s)
+use Image::ExifTool 'ImageInfo';
+use Image::ExifTool::MRC;
+$loaded = 1;
+print "ok 1\n";
+
+my $testname = 'MRC';
+my $testnum = 1;
+
+# test 2: Extract information from MRC.mrc
+{
+ ++$testnum;
+ my $exifTool = new Image::ExifTool;
+ $exifTool->Options(ExtractEmbedded => 1);
+ my $info = $exifTool->ImageInfo('t/images/MRC.mrc');
+ print 'not ' unless check($exifTool, $info, $testname, $testnum, undef, 3);
+ print "ok $testnum\n";
+}
+
+
+# end
diff --git a/t/MRC_2.out b/t/MRC_2.out
new file mode 100644
index 00000000..61df9cd0
--- /dev/null
+++ b/t/MRC_2.out
@@ -0,0 +1,157 @@
+[ExifTool, ExifTool, ExifTool, Main] ExifToolVersion - ExifTool Version Number: 12.25
+[File, System, Other, Main] FileName - File Name: MRC.mrc
+[File, System, Other, Main] Directory - Directory: t/images
+[File, System, Other, Main] FileSize - File Size: 2.5 KiB
+[File, System, Time, Main] FileModifyDate - File Modification Date/Time: 2021:04:22 09:31:39-04:00
+[File, System, Time, Main] FileAccessDate - File Access Date/Time: 2021:04:22 09:49:10-04:00
+[File, System, Time, Main] FileInodeChangeDate - File Inode Change Date/Time: 2021:04:22 09:42:59-04:00
+[File, System, Other, Main] FilePermissions - File Permissions: -rw-r--r--
+[File, File, Other, Main] FileType - File Type: MRC
+[File, File, Other, Main] FileTypeExtension - File Type Extension: mrc
+[File, File, Other, Main] MIMEType - MIME Type: image/x-mrc
+[File, File, Image, Main] 0 - Image Width: 4096
+[File, File, Image, Main] 1 - Image Height: 4096
+[File, File, Image, Main] 2 - Image Depth: 2
+[File, File, Image, Main] 3 - Image Mode: 16-bit unsigned integer
+[File, File, Image, Main] 4 - Start Point: 0 0 0
+[File, File, Image, Main] 7 - Grid Size: 4096 4096 2
+[File, File, Image, Main] 10 - Cell Width: 15289.4248046875
+[File, File, Image, Main] 11 - Cell Height: 15289.4248046875
+[File, File, Image, Main] 12 - Cell Depth: 0
+[File, File, Image, Main] 13 - Cell Alpha: 90
+[File, File, Image, Main] 14 - Cell Beta: 90
+[File, File, Image, Main] 15 - Cell Gamma: 90
+[File, File, Image, Main] 16 - Image Width Axis: X
+[File, File, Image, Main] 17 - Image Height Axis: Y
+[File, File, Image, Main] 18 - Image Depth Axis: Z
+[File, File, Image, Main] 19 - Density Min: 1958
+[File, File, Image, Main] 20 - Density Max: 5662
+[File, File, Image, Main] 21 - Density Mean: 3155.2578125
+[File, File, Image, Main] 22 - Space Group Number: 0
+[File, File, Image, Main] 23 - Extended Header Size: 1536
+[File, File, Image, Main] 26 - Extended Header Type: FEI1
+[File, File, Image, Main] 27 - MRC Version: 20140
+[File, File, Image, Main] 49 - Origin: 0 0 0
+[File, File, Image, Main] 53 - Machine Stamp: 0x44 0x44 0x00 0x00
+[File, File, Image, Main] 54 - RMS Deviation: -1
+[File, File, Image, Main] 55 - Number Of Labels: 0
+[File, File, Image, Main] 0 - Metadata Size: 768
+[File, File, Image, Main] 4 - Metadata Version: 0
+[File, File, Image, Main] 8 - Bitmask 1: 0xffffffff
+[File, File, Time, Main] 12 - Time Stamp: 2020:10:21 13:54:27
+[File, File, Image, Main] 20 - Microscope Type: TALOS-D5197
+[File, File, Image, Main] 36 - Microscope ID: 6419
+[File, File, Image, Main] 52 - Application: Tomography
+[File, File, Image, Main] 68 - App Version: 4.10.0.65
+[File, File, Image, Main] 84 - High Tension: 200000
+[File, File, Image, Main] 92 - Dose: 3.51360899930879e+20
+[File, File, Image, Main] 100 - Alpha Tilt: -64.0024700625157
+[File, File, Image, Main] 108 - Beta Tilt: 0
+[File, File, Image, Main] 116 - X Stage: -8.8173405e-05
+[File, File, Image, Main] 124 - Y Stage: -2.8139594e-05
+[File, File, Image, Main] 132 - Z Stage: 3.536763e-05
+[File, File, Image, Main] 140 - Tilt Axis Angle: -0.847676487969243
+[File, File, Image, Main] 148 - Dual Axis Rot: 0
+[File, File, Image, Main] 156 - Pixel Size X: 3.73276964893421e-10
+[File, File, Image, Main] 164 - Pixel Size Y: 3.73276964893421e-10
+[File, File, Image, Main] 220 - Defocus: -1.5e-06
+[File, File, Image, Main] 228 - STEM Defocus: -1.5e-06
+[File, File, Image, Main] 236 - Applied Defocus: -1.5e-06
+[File, File, Image, Main] 244 - Instrument Mode: TEM
+[File, File, Image, Main] 248 - Projection Mode: Imaging
+[File, File, Image, Main] 252 - Objective Lens: HM
+[File, File, Image, Main] 268 - High Magnification Mode: SA
+[File, File, Image, Main] 284 - Probe Mode: Nano
+[File, File, Image, Main] 288 - EFTEM On: No
+[File, File, Image, Main] 289 - Magnification: 28000
+[File, File, Image, Main] 297 - Bitmask 2: 0x0cfff01f
+[File, File, Image, Main] 301 - Camera Length: 0
+[File, File, Image, Main] 309 - Spot Index: 7
+[File, File, Image, Main] 313 - Illumination Area: 0.473917752802174
+[File, File, Image, Main] 321 - Intensity: 0.473917752802174
+[File, File, Image, Main] 329 - Convergence Angle: 0
+[File, File, Image, Main] 387 - Shift Offset X: 0
+[File, File, Image, Main] 395 - Shift Offset Y: 0
+[File, File, Image, Main] 403 - Shift X: -0.00204008771106601
+[File, File, Image, Main] 411 - Shift Y: 0.009031618013978
+[File, File, Image, Main] 419 - Integration Time: 0.299076
+[File, File, Image, Main] 427 - Binning Width: 1
+[File, File, Image, Main] 431 - Binning Height: 1
+[File, File, Image, Main] 435 - Camera Name: BM-Falcon
+[File, File, Image, Main] 451 - Readout Area Left: 0
+[File, File, Image, Main] 455 - Readout Area Top: 0
+[File, File, Image, Main] 459 - Readout Area Right: 4096
+[File, File, Image, Main] 463 - Readout Area Bottom: 4096
+[File, File, Image, Main] 472 - Direct Det Electron Counting: No
+[File, File, Image, Main] 473 - Direct Det Align Frames: No
+[File, File, Image, Main] 490 - Bitmask 3: 0x007e8040
+[File, File, Image, Main] 518 - Phase Plate: Yes
+[File, File, Image, Main] 571 - Dwell Time: 0
+[File, File, Image, Main] 587 - Scan Size Left: 0
+[File, File, Image, Main] 591 - Scan Size Top: 0
+[File, File, Image, Main] 595 - Scan Size Right: 0
+[File, File, Image, Main] 599 - Scan Size Bottom: 0
+[File, File, Image, Main] 603 - Full Scan FOV X: 0.473917752802174
+[File, File, Image, Main] 611 - Full Scan FOV Y: 0.473917752802174
+[File, File, Image, Main] 748 - Bitmask 4: 0x00000000
+[File, File, Image, Doc1] 0 - Metadata Size: 768
+[File, File, Image, Doc1] 4 - Metadata Version: 0
+[File, File, Image, Doc1] 8 - Bitmask 1: 0xffffffff
+[File, File, Time, Doc1] 12 - Time Stamp: 2020:10:21 13:55:19
+[File, File, Image, Doc1] 20 - Microscope Type: TALOS-D5197
+[File, File, Image, Doc1] 36 - Microscope ID: 6419
+[File, File, Image, Doc1] 52 - Application: Tomography
+[File, File, Image, Doc1] 68 - App Version: 4.10.0.65
+[File, File, Image, Doc1] 84 - High Tension: 200000
+[File, File, Image, Doc1] 92 - Dose: 3.56817464869021e+20
+[File, File, Image, Doc1] 100 - Alpha Tilt: -62.0036705832692
+[File, File, Image, Doc1] 108 - Beta Tilt: 0
+[File, File, Image, Doc1] 116 - X Stage: -8.8182495e-05
+[File, File, Image, Doc1] 124 - Y Stage: -2.8140608e-05
+[File, File, Image, Doc1] 132 - Z Stage: 3.536763e-05
+[File, File, Image, Doc1] 140 - Tilt Axis Angle: -0.847676487969243
+[File, File, Image, Doc1] 148 - Dual Axis Rot: 0
+[File, File, Image, Doc1] 156 - Pixel Size X: 3.73276964893421e-10
+[File, File, Image, Doc1] 164 - Pixel Size Y: 3.73276964893421e-10
+[File, File, Image, Doc1] 220 - Defocus: -2.81146426624101e-06
+[File, File, Image, Doc1] 228 - STEM Defocus: -2.81146426624101e-06
+[File, File, Image, Doc1] 236 - Applied Defocus: -1.5e-06
+[File, File, Image, Doc1] 244 - Instrument Mode: TEM
+[File, File, Image, Doc1] 248 - Projection Mode: Imaging
+[File, File, Image, Doc1] 252 - Objective Lens: HM
+[File, File, Image, Doc1] 268 - High Magnification Mode: SA
+[File, File, Image, Doc1] 284 - Probe Mode: Nano
+[File, File, Image, Doc1] 288 - EFTEM On: No
+[File, File, Image, Doc1] 289 - Magnification: 28000
+[File, File, Image, Doc1] 297 - Bitmask 2: 0x0cfff01f
+[File, File, Image, Doc1] 301 - Camera Length: 0
+[File, File, Image, Doc1] 309 - Spot Index: 7
+[File, File, Image, Doc1] 313 - Illumination Area: 0.473917752802174
+[File, File, Image, Doc1] 321 - Intensity: 0.473917752802174
+[File, File, Image, Doc1] 329 - Convergence Angle: 0
+[File, File, Image, Doc1] 387 - Shift Offset X: 0
+[File, File, Image, Doc1] 395 - Shift Offset Y: 0
+[File, File, Image, Doc1] 403 - Shift X: -0.00886260531842709
+[File, File, Image, Doc1] 411 - Shift Y: 0.00178224826231599
+[File, File, Image, Doc1] 419 - Integration Time: 0.299076
+[File, File, Image, Doc1] 427 - Binning Width: 1
+[File, File, Image, Doc1] 431 - Binning Height: 1
+[File, File, Image, Doc1] 435 - Camera Name: BM-Falcon
+[File, File, Image, Doc1] 451 - Readout Area Left: 0
+[File, File, Image, Doc1] 455 - Readout Area Top: 0
+[File, File, Image, Doc1] 459 - Readout Area Right: 4096
+[File, File, Image, Doc1] 463 - Readout Area Bottom: 4096
+[File, File, Image, Doc1] 472 - Direct Det Electron Counting: No
+[File, File, Image, Doc1] 473 - Direct Det Align Frames: No
+[File, File, Image, Doc1] 490 - Bitmask 3: 0x007e8040
+[File, File, Image, Doc1] 518 - Phase Plate: Yes
+[File, File, Image, Doc1] 571 - Dwell Time: 0
+[File, File, Image, Doc1] 587 - Scan Size Left: 0
+[File, File, Image, Doc1] 591 - Scan Size Top: 0
+[File, File, Image, Doc1] 595 - Scan Size Right: 0
+[File, File, Image, Doc1] 599 - Scan Size Bottom: 0
+[File, File, Image, Doc1] 603 - Full Scan FOV X: 0.473917752802174
+[File, File, Image, Doc1] 611 - Full Scan FOV Y: 0.473917752802174
+[File, File, Image, Doc1] 748 - Bitmask 4: 0x00000000
+[Composite, Composite, Image, Main] Exif-ImageSize - Image Size: 4096x4096
+[Composite, Composite, Image, Main] Exif-Megapixels - Megapixels: 16.8
diff --git a/t/QuickTime.t b/t/QuickTime.t
index ac11aac2..a23e1d9b 100644
--- a/t/QuickTime.t
+++ b/t/QuickTime.t
@@ -2,7 +2,7 @@
# After "make install" it should work as "perl t/QuickTime.t".
BEGIN {
- $| = 1; print "1..16\n"; $Image::ExifTool::configFile = '';
+ $| = 1; print "1..17\n"; $Image::ExifTool::configFile = '';
require './t/TestLib.pm'; t::TestLib->import();
}
END {print "not ok 1\n" unless $loaded;}
@@ -216,19 +216,24 @@ my $testnum = 1;
# test 16: Write some Microsoft Xtra tags
{
++$testnum;
- my $exifTool = new Image::ExifTool;
- $exifTool->SetNewValue('Microsoft:Director' => 'dir1');
- $exifTool->SetNewValue('Microsoft:Director' => 'dir2');
- $exifTool->SetNewValue('Microsoft:SharedUserRating' => 75);
- my $testfile = "t/${testname}_${testnum}_failed.mov";
- unlink $testfile;
- my $rtnVal = $exifTool->WriteInfo('t/images/QuickTime.mov', $testfile);
- my $info = $exifTool->ImageInfo($testfile, 'Microsoft:all');
- if (check($exifTool, $info, $testname, $testnum)) {
- unlink $testfile;
- } else {
- print 'not ';
- }
+ my @writeInfo = (
+ ['Microsoft:Director' => 'dir1'],
+ ['Microsoft:Director' => 'dir2'],
+ ['Microsoft:SharedUserRating' => 75],
+ );
+ my @extract = ('Microsoft:all');
+ print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/QuickTime.mov', \@extract);
+ print "ok $testnum\n";
+}
+
+# test 17: Write some 3gp tags
+{
+ ++$testnum;
+ my @writeInfo = (
+ ['UserData:LocationInformation' => 'test comment role=Shooting lat=1.2 lon=-2.3 alt=100 body=earth notes=a note'],
+ ['UserData:Rating' => 'entity=ABCD criteria=1234 a rating'],
+ );
+ print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/QuickTime.mov', 1);
print "ok $testnum\n";
}
diff --git a/t/QuickTime_17.out b/t/QuickTime_17.out
new file mode 100644
index 00000000..064587c6
--- /dev/null
+++ b/t/QuickTime_17.out
@@ -0,0 +1,2 @@
+[QuickTime, UserData, Location] loci - Location Information: test comment Role=shooting Lat=1.20000 Lon=-2.30000 Alt=100.00 Body=earth Notes=a note
+[QuickTime, UserData, Video] rtng - Rating: Entity=ABCD Criteria=1234 a rating
diff --git a/t/images/JXL.jxl b/t/images/JXL.jxl
new file mode 100644
index 00000000..26b9f41d
--- /dev/null
+++ b/t/images/JXL.jxl
@@ -0,0 +1,2 @@
+
+<dummy jxl data> \ No newline at end of file
diff --git a/t/images/MRC.mrc b/t/images/MRC.mrc
new file mode 100644
index 00000000..1795ee2f
--- /dev/null
+++ b/t/images/MRC.mrc
Binary files differ
diff --git a/windows_exiftool b/windows_exiftool
index a90dae76..54e7bc8c 100755
--- a/windows_exiftool
+++ b/windows_exiftool
@@ -10,7 +10,7 @@
use strict;
require 5.004;
-my $version = '12.24';
+my $version = '12.25';
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
my $exeDir;
@@ -4480,47 +4480,47 @@ DESCRIPTION
File Types
------------+-------------+-------------+-------------+------------
- 360 r/w | DPX r | ITC r | O r | RAR r
- 3FR r | DR4 r/w/c | J2C r | ODP r | RAW r/w
- 3G2 r/w | DSS r | JNG r/w | ODS r | RIFF r
- 3GP r/w | DV r | JP2 r/w | ODT r | RSRC r
- A r | DVB r/w | JPEG r/w | OFR r | RTF r
- AA r | DVR-MS r | JSON r | OGG r | RW2 r/w
- AAE r | DYLIB r | JXL r | OGV r | RWL r/w
- AAX r/w | EIP r | K25 r | ONP r | RWZ r
- ACR r | EPS r/w | KDC r | OPUS r | RM r
- AFM r | EPUB r | KEY r | ORF r/w | SEQ r
- AI r/w | ERF r/w | LA r | ORI r/w | SKETCH r
- AIFF r | EXE r | LFP r | OTF r | SO r
- APE r | EXIF r/w/c | LNK r | PAC r | SR2 r/w
- ARQ r/w | EXR r | LRV r/w | PAGES r | SRF r
- ARW r/w | EXV r/w/c | M2TS r | PBM r/w | SRW r/w
- ASF r | F4A/V r/w | M4A/V r/w | PCD r | SVG r
- AVI r | FFF r/w | MACOS r | PCX r | SWF r
- AVIF r/w | FITS r | MAX r | PDB r | THM r/w
- AZW r | FLA r | MEF r/w | PDF r/w | TIFF r/w
- BMP r | FLAC r | MIE r/w/c | PEF r/w | TORRENT r
- BPG r | FLIF r/w | MIFF r | PFA r | TTC r
- BTF r | FLV r | MKA r | PFB r | TTF r
- CHM r | FPF r | MKS r | PFM r | TXT r
- COS r | FPX r | MKV r | PGF r | VCF r
- CR2 r/w | GIF r/w | MNG r/w | PGM r/w | VRD r/w/c
- CR3 r/w | GPR r/w | MOBI r | PLIST r | VSD r
- CRM r/w | GZ r | MODD r | PICT r | WAV r
- CRW r/w | HDP r/w | MOI r | PMP r | WDP r/w
- CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBP r
- CSV r | HEIC r/w | MOV r/w | PPM r/w | WEBM r
- CZI r | HEIF r/w | MP3 r | PPT r | WMA r
- DCM r | HTML r | MP4 r/w | PPTX r | WMV r
- DCP r/w | ICC r/w/c | MPC r | PS r/w | WTV r
- DCR r | ICS r | MPG r | PSB r/w | WV r
- DFONT r | IDML r | MPO r/w | PSD r/w | X3F r/w
- DIVX r | IIQ r/w | MQV r/w | PSP r | XCF r
- DJVU r | IND r/w | MRW r/w | QTIF r/w | XLS r
- DLL r | INSP r/w | MXF r | R3D r | XLSX r
- DNG r/w | INSV r | NEF r/w | RA r | XMP r/w/c
- DOC r | INX r | NRW r/w | RAF r/w | ZIP r
- DOCX r | ISO r | NUMBERS r | RAM r |
+ 360 r/w | DPX r | ITC r | NUMBERS r | RAM r
+ 3FR r | DR4 r/w/c | J2C r | O r | RAR r
+ 3G2 r/w | DSS r | JNG r/w | ODP r | RAW r/w
+ 3GP r/w | DV r | JP2 r/w | ODS r | RIFF r
+ A r | DVB r/w | JPEG r/w | ODT r | RSRC r
+ AA r | DVR-MS r | JSON r | OFR r | RTF r
+ AAE r | DYLIB r | JXL r | OGG r | RW2 r/w
+ AAX r/w | EIP r | K25 r | OGV r | RWL r/w
+ ACR r | EPS r/w | KDC r | ONP r | RWZ r
+ AFM r | EPUB r | KEY r | OPUS r | RM r
+ AI r/w | ERF r/w | LA r | ORF r/w | SEQ r
+ AIFF r | EXE r | LFP r | ORI r/w | SKETCH r
+ APE r | EXIF r/w/c | LNK r | OTF r | SO r
+ ARQ r/w | EXR r | LRV r/w | PAC r | SR2 r/w
+ ARW r/w | EXV r/w/c | M2TS r | PAGES r | SRF r
+ ASF r | F4A/V r/w | M4A/V r/w | PBM r/w | SRW r/w
+ AVI r | FFF r/w | MACOS r | PCD r | SVG r
+ AVIF r/w | FITS r | MAX r | PCX r | SWF r
+ AZW r | FLA r | MEF r/w | PDB r | THM r/w
+ BMP r | FLAC r | MIE r/w/c | PDF r/w | TIFF r/w
+ BPG r | FLIF r/w | MIFF r | PEF r/w | TORRENT r
+ BTF r | FLV r | MKA r | PFA r | TTC r
+ CHM r | FPF r | MKS r | PFB r | TTF r
+ COS r | FPX r | MKV r | PFM r | TXT r
+ CR2 r/w | GIF r/w | MNG r/w | PGF r | VCF r
+ CR3 r/w | GPR r/w | MOBI r | PGM r/w | VRD r/w/c
+ CRM r/w | GZ r | MODD r | PLIST r | VSD r
+ CRW r/w | HDP r/w | MOI r | PICT r | WAV r
+ CS1 r/w | HDR r | MOS r/w | PMP r | WDP r/w
+ CSV r | HEIC r/w | MOV r/w | PNG r/w | WEBP r
+ CZI r | HEIF r/w | MP3 r | PPM r/w | WEBM r
+ DCM r | HTML r | MP4 r/w | PPT r | WMA r
+ DCP r/w | ICC r/w/c | MPC r | PPTX r | WMV r
+ DCR r | ICS r | MPG r | PS r/w | WTV r
+ DFONT r | IDML r | MPO r/w | PSB r/w | WV r
+ DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
+ DJVU r | IND r/w | MRC r | PSP r | XCF r
+ DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
+ DNG r/w | INSV r | MXF r | R3D r | XLSX r
+ DOC r | INX r | NEF r/w | RA r | XMP r/w/c
+ DOCX r | ISO r | NRW r/w | RAF r/w | ZIP r
Meta Information
----------------------+----------------------+---------------------
@@ -5417,7 +5417,7 @@ OPTIONS
produces output like this:
- -- Generated by ExifTool 12.24 --
+ -- Generated by ExifTool 12.25 --
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