exiftool_vendored 11.86.0 → 11.88.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/Changes +38 -16
- data/bin/MANIFEST +3 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +34 -33
- data/bin/config_files/acdsee.config +1 -3
- data/bin/config_files/depthmap.config +56 -0
- data/bin/config_files/example.config +2 -0
- data/bin/config_files/gps2utm.config +1 -1
- data/bin/config_files/tiff_version.config +1 -1
- data/bin/exiftool +56 -39
- data/bin/fmt_files/gpx_wpt.fmt +1 -1
- data/bin/lib/Image/ExifTool.pm +32 -7
- data/bin/lib/Image/ExifTool.pod +53 -52
- data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/Apple.pm +1 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +3 -3
- data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
- data/bin/lib/Image/ExifTool/DNG.pm +1 -1
- data/bin/lib/Image/ExifTool/Exif.pm +3 -3
- data/bin/lib/Image/ExifTool/FITS.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIR.pm +5 -5
- data/bin/lib/Image/ExifTool/Flash.pm +1 -1
- data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
- data/bin/lib/Image/ExifTool/Font.pm +2 -2
- data/bin/lib/Image/ExifTool/FujiFilm.pm +23 -7
- data/bin/lib/Image/ExifTool/GIF.pm +1 -1
- data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
- data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
- data/bin/lib/Image/ExifTool/MIE.pm +1 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +1 -1
- data/bin/lib/Image/ExifTool/NikonCustom.pm +2 -2
- data/bin/lib/Image/ExifTool/Olympus.pm +4 -2
- data/bin/lib/Image/ExifTool/PDF.pm +2 -2
- data/bin/lib/Image/ExifTool/PNG.pm +10 -5
- data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +3 -3
- data/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +9 -4
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
- data/bin/lib/Image/ExifTool/README +51 -51
- data/bin/lib/Image/ExifTool/RIFF.pm +2 -2
- data/bin/lib/Image/ExifTool/RTF.pm +1 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
- data/bin/lib/Image/ExifTool/Sony.pm +1 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +1725 -1617
- data/bin/lib/Image/ExifTool/TagNames.pod +307 -9
- data/bin/lib/Image/ExifTool/Text.pm +59 -10
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +27 -12
- data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +25 -7
- data/bin/lib/Image/ExifTool/XMP.pm +6 -1
- data/bin/lib/Image/ExifTool/XMP2.pl +213 -1
- data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
- data/bin/perl-Image-ExifTool.spec +30 -30
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
data/bin/fmt_files/gpx_wpt.fmt
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
#
|
|
9
9
|
# Requires: ExifTool version 10.49 or later
|
|
10
10
|
#
|
|
11
|
-
#
|
|
11
|
+
# Revisions: 2010/03/13 - Peter Grimm created
|
|
12
12
|
# 2018/01/04 - PH Added IF to be sure position exists
|
|
13
13
|
# 2018/01/06 - PH Use DateFmt function instead of -d option
|
|
14
14
|
# 2019/10/24 - PH Preserve sub-seconds in GPSDateTime value
|
data/bin/lib/Image/ExifTool.pm
CHANGED
|
@@ -28,7 +28,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
|
|
|
28
28
|
%mimeType $swapBytes $swapWords $currentByteOrder %unpackStd
|
|
29
29
|
%jpegMarker %specialTags %fileTypeLookup $testLen);
|
|
30
30
|
|
|
31
|
-
$VERSION = '11.
|
|
31
|
+
$VERSION = '11.88';
|
|
32
32
|
$RELEASE = '';
|
|
33
33
|
@ISA = qw(Exporter);
|
|
34
34
|
%EXPORT_TAGS = (
|
|
@@ -251,6 +251,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
|
251
251
|
CRM => ['MOV', 'Canon RAW Movie'],
|
|
252
252
|
CRW => ['CRW', 'Canon RAW format'],
|
|
253
253
|
CS1 => ['PSD', 'Sinar CaptureShop 1-Shot RAW'],
|
|
254
|
+
CSV => ['TXT', 'Comma-Separated Values'],
|
|
254
255
|
DC3 => 'DICM',
|
|
255
256
|
DCM => 'DICM',
|
|
256
257
|
DCP => ['TIFF', 'DNG Camera Profile'],
|
|
@@ -577,6 +578,7 @@ my %fileDescription = (
|
|
|
577
578
|
CR3 => 'image/x-canon-cr3',
|
|
578
579
|
CRM => 'video/x-canon-crm',
|
|
579
580
|
CRW => 'image/x-canon-crw',
|
|
581
|
+
CSV => 'text/csv',
|
|
580
582
|
DCP => 'application/octet-stream', #PH (NC)
|
|
581
583
|
DCR => 'image/x-kodak-dcr',
|
|
582
584
|
DCX => 'image/dcx',
|
|
@@ -1043,7 +1045,7 @@ my %systemTagsNotes = (
|
|
|
1043
1045
|
# accept either scalar or scalar reference
|
|
1044
1046
|
RawConv => '$self->ValidateImage(ref $val ? $val : \$val, $tag)',
|
|
1045
1047
|
# we allow preview image to be set to '', but we don't want a zero-length value
|
|
1046
|
-
# in the IFD, so set it
|
|
1048
|
+
# in the IFD, so set it temporarily to 'none'. Note that the length is <= 4,
|
|
1047
1049
|
# so this value will fit in the IFD so the preview fixup won't be generated.
|
|
1048
1050
|
ValueConvInv => '$val eq "" and $val="none"; $val',
|
|
1049
1051
|
);
|
|
@@ -1711,7 +1713,13 @@ my %systemTagsNotes = (
|
|
|
1711
1713
|
multiple values may be separated with commas, eg. C<-ForceWrite=exif,xmp>
|
|
1712
1714
|
},
|
|
1713
1715
|
},
|
|
1714
|
-
EmbeddedVideo => { Groups => { 2 => 'Video' } },
|
|
1716
|
+
EmbeddedVideo => { Groups => { 0 => 'Trailer', 2 => 'Video' } },
|
|
1717
|
+
Trailer => {
|
|
1718
|
+
Groups => { 0 => 'Trailer' },
|
|
1719
|
+
Notes => 'the full JPEG trailer data block. Extracted only if specifically requested',
|
|
1720
|
+
Writable => 1,
|
|
1721
|
+
Protected => 1,
|
|
1722
|
+
},
|
|
1715
1723
|
);
|
|
1716
1724
|
|
|
1717
1725
|
# YCbCrSubSampling values (used by JPEG SOF, EXIF and XMP)
|
|
@@ -3250,7 +3258,7 @@ sub GetDescription($$)
|
|
|
3250
3258
|
# Returns: Scalar context: group name (for family 0 if not otherwise specified)
|
|
3251
3259
|
# List context: group name if family specified, otherwise list of
|
|
3252
3260
|
# group names for each family. Returns '' for undefined tag.
|
|
3253
|
-
# Notes:
|
|
3261
|
+
# Notes: Multiple families may be specified with ':' in family argument (eg. '1:2')
|
|
3254
3262
|
sub GetGroup($$;$)
|
|
3255
3263
|
{
|
|
3256
3264
|
local $_;
|
|
@@ -5604,7 +5612,10 @@ sub GetUnixTime($;$)
|
|
|
5604
5612
|
}
|
|
5605
5613
|
$tm[1] -= 1; # convert month
|
|
5606
5614
|
@tm = reverse @tm; # change to order required by timelocal()
|
|
5607
|
-
|
|
5615
|
+
my $val = $isLocal ? TimeLocal(@tm) : Time::Local::timegm(@tm) - $tzSec;
|
|
5616
|
+
# handle fractional seconds
|
|
5617
|
+
$val += $1 if $tzStr and $tzStr =~ /^(\.\d+)/;
|
|
5618
|
+
return $val;
|
|
5608
5619
|
}
|
|
5609
5620
|
|
|
5610
5621
|
#------------------------------------------------------------------------------
|
|
@@ -6093,6 +6104,20 @@ sub ProcessJPEG($$)
|
|
|
6093
6104
|
} else {
|
|
6094
6105
|
$self->Warn('Missing JPEG SOS');
|
|
6095
6106
|
}
|
|
6107
|
+
if ($$self{REQ_TAG_LOOKUP}{trailer}) {
|
|
6108
|
+
# read entire trailer into memory
|
|
6109
|
+
if ($raf->Seek(0,2)) {
|
|
6110
|
+
my $len = $raf->Tell() - $pos;
|
|
6111
|
+
if ($len) {
|
|
6112
|
+
my $buff;
|
|
6113
|
+
$raf->Seek($pos, 0);
|
|
6114
|
+
$self->FoundTag(Trailer => \$buff) if $raf->Read($buff,$len) == $len;
|
|
6115
|
+
$raf->Seek($pos, 0);
|
|
6116
|
+
}
|
|
6117
|
+
} else {
|
|
6118
|
+
$self->Warn('Error seeking in file');
|
|
6119
|
+
}
|
|
6120
|
+
}
|
|
6096
6121
|
# we are here because we are looking for trailer information
|
|
6097
6122
|
if ($wantTrailer) {
|
|
6098
6123
|
my $start = $$self{PreviewImageStart};
|
|
@@ -6213,7 +6238,7 @@ sub ProcessJPEG($$)
|
|
|
6213
6238
|
next if $trailInfo or $wantTrailer or $verbose > 2 or $htmlDump;
|
|
6214
6239
|
}
|
|
6215
6240
|
# must scan to EOI if Validate or JpegCompressionFactor used
|
|
6216
|
-
next if $$options{Validate} or $calcImageLen;
|
|
6241
|
+
next if $$options{Validate} or $calcImageLen or $$self{REQ_TAG_LOOKUP}{trailer};
|
|
6217
6242
|
# nothing interesting to parse after start of scan (SOS)
|
|
6218
6243
|
$success = 1;
|
|
6219
6244
|
last; # all done parsing file
|
|
@@ -7081,7 +7106,7 @@ sub DoProcessTIFF($$;$)
|
|
|
7081
7106
|
# don't process file if FastScan == 3
|
|
7082
7107
|
return 1 if not $outfile and $$self{OPTIONS}{FastScan} and $$self{OPTIONS}{FastScan} == 3;
|
|
7083
7108
|
}
|
|
7084
|
-
# (
|
|
7109
|
+
# (accommodate CR3 images which have a TIFF directory with ExifIFD at the top level)
|
|
7085
7110
|
my $ifdName = ($$dirInfo{DirName} and $$dirInfo{DirName} =~ /^(ExifIFD|GPS)$/) ? $1 : 'IFD0';
|
|
7086
7111
|
if (not $tagTablePtr or $$tagTablePtr{GROUPS}{0} eq 'EXIF') {
|
|
7087
7112
|
$self->FoundTag('ExifByteOrder', $byteOrder) unless $outfile;
|
data/bin/lib/Image/ExifTool.pod
CHANGED
|
@@ -65,34 +65,35 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
65
65
|
|
|
66
66
|
File Types
|
|
67
67
|
------------+-------------+-------------+-------------+------------
|
|
68
|
-
3FR r |
|
|
69
|
-
3G2 r/w |
|
|
70
|
-
3GP r/w |
|
|
71
|
-
A r |
|
|
72
|
-
AA r |
|
|
73
|
-
AAE r |
|
|
74
|
-
AAX r/w |
|
|
75
|
-
ACR r |
|
|
76
|
-
AFM r |
|
|
77
|
-
AI r/w |
|
|
78
|
-
AIFF r |
|
|
79
|
-
APE r |
|
|
80
|
-
ARQ r/w |
|
|
81
|
-
ARW r/w |
|
|
82
|
-
ASF r |
|
|
83
|
-
AVI r |
|
|
84
|
-
AVIF r/w |
|
|
85
|
-
AZW r |
|
|
86
|
-
BMP r |
|
|
87
|
-
BPG r |
|
|
88
|
-
BTF r |
|
|
89
|
-
CHM r |
|
|
90
|
-
COS r |
|
|
91
|
-
CR2 r/w |
|
|
92
|
-
CR3 r/w |
|
|
93
|
-
CRM r/w |
|
|
94
|
-
CRW r/w |
|
|
95
|
-
CS1 r/w |
|
|
68
|
+
3FR r | DR4 r/w/c | ITC r | ODP r | RIFF r
|
|
69
|
+
3G2 r/w | DSS r | J2C r | ODS r | RSRC r
|
|
70
|
+
3GP r/w | DV r | JNG r/w | ODT r | RTF r
|
|
71
|
+
A r | DVB r/w | JP2 r/w | OFR r | RW2 r/w
|
|
72
|
+
AA r | DVR-MS r | JPEG r/w | OGG r | RWL r/w
|
|
73
|
+
AAE r | DYLIB r | JSON r | OGV r | RWZ r
|
|
74
|
+
AAX r/w | EIP r | K25 r | OPUS r | RM r
|
|
75
|
+
ACR r | EPS r/w | KDC r | ORF r/w | SEQ r
|
|
76
|
+
AFM r | EPUB r | KEY r | OTF r | SKETCH r
|
|
77
|
+
AI r/w | ERF r/w | LA r | PAC r | SO r
|
|
78
|
+
AIFF r | EXE r | LFP r | PAGES r | SR2 r/w
|
|
79
|
+
APE r | EXIF r/w/c | LNK r | PBM r/w | SRF r
|
|
80
|
+
ARQ r/w | EXR r | LRV r/w | PCD r | SRW r/w
|
|
81
|
+
ARW r/w | EXV r/w/c | M2TS r | PCX r | SVG r
|
|
82
|
+
ASF r | F4A/V r/w | M4A/V r/w | PDB r | SWF r
|
|
83
|
+
AVI r | FFF r/w | MAX r | PDF r/w | THM r/w
|
|
84
|
+
AVIF r/w | FITS r | MEF r/w | PEF r/w | TIFF r/w
|
|
85
|
+
AZW r | FLA r | MIE r/w/c | PFA r | TORRENT r
|
|
86
|
+
BMP r | FLAC r | MIFF r | PFB r | TTC r
|
|
87
|
+
BPG r | FLIF r/w | MKA r | PFM r | TTF r
|
|
88
|
+
BTF r | FLV r | MKS r | PGF r | TXT r
|
|
89
|
+
CHM r | FPF r | MKV r | PGM r/w | VCF r
|
|
90
|
+
COS r | FPX r | MNG r/w | PLIST r | VRD r/w/c
|
|
91
|
+
CR2 r/w | GIF r/w | MOBI r | PICT r | VSD r
|
|
92
|
+
CR3 r/w | GPR r/w | MODD r | PMP r | WAV r
|
|
93
|
+
CRM r/w | GZ r | MOI r | PNG r/w | WDP r/w
|
|
94
|
+
CRW r/w | HDP r/w | MOS r/w | PPM r/w | WEBP r
|
|
95
|
+
CS1 r/w | HDR r | MOV r/w | PPT r | WEBM r
|
|
96
|
+
CSV r | HEIC r/w | MP3 r | PPTX r | WMA r
|
|
96
97
|
DCM r | HEIF r/w | MP4 r/w | PS r/w | WMV r
|
|
97
98
|
DCP r/w | HTML r | MPC r | PSB r/w | WTV r
|
|
98
99
|
DCR r | ICC r/w/c | MPG r | PSD r/w | WV r
|
|
@@ -104,7 +105,6 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
104
105
|
DOC r | INSV r | NRW r/w | RAM r | ZIP r
|
|
105
106
|
DOCX r | INX r | NUMBERS r | RAR r |
|
|
106
107
|
DPX r | ISO r | O r | RAW r/w |
|
|
107
|
-
DR4 r/w/c | ITC r | ODP r | RIFF r |
|
|
108
108
|
|
|
109
109
|
Meta Information
|
|
110
110
|
----------------------+----------------------+---------------------
|
|
@@ -636,15 +636,16 @@ after the first comment in GIF images, and at the audio/video data of
|
|
|
636
636
|
RIFF-format files (AVI, WAV, etc), so any trailing metadata (eg. XMP written
|
|
637
637
|
by some utilities) may be missed. Also disables input buffering for some
|
|
638
638
|
types of files to reduce memory usage when reading from a non-seekable
|
|
639
|
-
stream
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
is
|
|
639
|
+
stream, and bypasses CRC validation for speed when writing PNG files. When
|
|
640
|
+
combined with the ScanForXMP option, prevents scanning for XMP in recognized
|
|
641
|
+
file types. With a value of 2, ExifTool will also avoid extracting any EXIF
|
|
642
|
+
MakerNote information, and will stop parsing at the IDAT chunk of PNG
|
|
643
|
+
images. (By the PNG specification, metadata is allowed after IDAT, but
|
|
644
|
+
ExifTool always writes it before because some utilities will ignore it
|
|
645
|
+
otherwise.) When set to 3 or 4, only pseudo system tags and FileType are
|
|
646
|
+
generated. For 3, the file header is read to provide an educated guess at
|
|
647
|
+
FileType. For 4, the file is not read at all and FileType is determined
|
|
648
|
+
based on the file's extension. Default is undef.
|
|
648
649
|
|
|
649
650
|
=item Filter
|
|
650
651
|
|
|
@@ -2050,9 +2051,9 @@ timed metadata in videos.
|
|
|
2050
2051
|
Family 4 provides a method for differentiating tags when multiple tags exist
|
|
2051
2052
|
with the same name in the same location. The primary instance of a tag (the
|
|
2052
2053
|
tag extracted when the Duplicates option is disabled and no group is
|
|
2053
|
-
specified) has no family 4 group name, but additional instances have
|
|
2054
|
-
|
|
2055
|
-
|
|
2054
|
+
specified) has no family 4 group name, but additional instances have family
|
|
2055
|
+
4 group names of 'Copy1', 'Copy2', 'Copy3', etc. For convenience, the
|
|
2056
|
+
primary tag may also be accessed using a group name of 'Copy0'.
|
|
2056
2057
|
|
|
2057
2058
|
Family 5 is experimental, and gives the complete path for the metadata in
|
|
2058
2059
|
the file. Generated only if the L</SavePath> option is used when
|
|
@@ -2270,17 +2271,17 @@ Real, Real-CONT, Real-MDPR, Real-PROP, Real-RA3, Real-RA4, Real-RA5,
|
|
|
2270
2271
|
Real-RJMD, Reconyx, Red, Ricoh, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#,
|
|
2271
2272
|
SVG, Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD,
|
|
2272
2273
|
System, Theora, Torrent, Track#, UserData, VCalendar, VCard, Version0,
|
|
2273
|
-
Vorbis, WTV, XML, XMP, XMP-DICOM, XMP-
|
|
2274
|
-
XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP,
|
|
2275
|
-
XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album, XMP-apple-fi,
|
|
2276
|
-
XMP-cc, XMP-cell, XMP-creatorAtom, XMP-crs, XMP-dc, XMP-dex,
|
|
2277
|
-
XMP-drone-dji, XMP-dwc, XMP-exif, XMP-exifEX,
|
|
2278
|
-
XMP-extensis, XMP-fpv, XMP-getty, XMP-ics,
|
|
2279
|
-
XMP-
|
|
2280
|
-
XMP-
|
|
2281
|
-
XMP-
|
|
2282
|
-
XMP-
|
|
2283
|
-
XMP-xmpRights, XMP-xmpTPg, ZIP
|
|
2274
|
+
Vorbis, WTV, XML, XMP, XMP-DICOM, XMP-Device, XMP-GAudio, XMP-GDepth,
|
|
2275
|
+
XMP-GFocus, XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP,
|
|
2276
|
+
XMP-MP1, XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album, XMP-apple-fi,
|
|
2277
|
+
XMP-aux, XMP-cc, XMP-cell, XMP-creatorAtom, XMP-crs, XMP-dc, XMP-dex,
|
|
2278
|
+
XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-exif, XMP-exifEX,
|
|
2279
|
+
XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-ics,
|
|
2280
|
+
XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro, XMP-microsoft,
|
|
2281
|
+
XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-pdf, XMP-pdfx, XMP-photomech,
|
|
2282
|
+
XMP-photoshop, XMP-plus, XMP-pmi, XMP-prism, XMP-prl, XMP-prm, XMP-pur,
|
|
2283
|
+
XMP-rdf, XMP-swf, XMP-tiff, XMP-x, XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpMM,
|
|
2284
|
+
XMP-xmpNote, XMP-xmpPLUS, XMP-xmpRights, XMP-xmpTPg, ZIP
|
|
2284
2285
|
|
|
2285
2286
|
=item Family 2 (Category):
|
|
2286
2287
|
|
|
@@ -202,7 +202,7 @@ sub ProcessAIFF($$)
|
|
|
202
202
|
$et->SetFileType('DJVU');
|
|
203
203
|
return 1 if $fast3;
|
|
204
204
|
$tagTablePtr = GetTagTable('Image::ExifTool::DjVu::Main');
|
|
205
|
-
#
|
|
205
|
+
# modify FileType to indicate a multi-page document
|
|
206
206
|
$$et{VALUE}{FileType} .= " (multi-page)" if $buf2 eq 'DJVM';
|
|
207
207
|
$type = 'DjVu';
|
|
208
208
|
} else {
|
|
@@ -68,7 +68,7 @@ $VERSION = '1.04';
|
|
|
68
68
|
},
|
|
69
69
|
# 0x000c - rational64s[2]: eg) "0.1640625 0.19921875"
|
|
70
70
|
# 0x000d - int32s: 0,1,6,20,24,32,40
|
|
71
|
-
# 0x000e - int32s: 0,1,4,12 (
|
|
71
|
+
# 0x000e - int32s: 0,1,4,12 (Orientation? 0=landscape? 4=portrait? ref 1)
|
|
72
72
|
# 0x000f - int32s: 2,3
|
|
73
73
|
# 0x0010 - int32s: 1
|
|
74
74
|
0x0011 => {
|
|
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
|
|
|
35
35
|
use Image::ExifTool::Validate;
|
|
36
36
|
use Image::ExifTool::MacOS;
|
|
37
37
|
|
|
38
|
-
$VERSION = '3.
|
|
38
|
+
$VERSION = '3.34';
|
|
39
39
|
@ISA = qw(Exporter);
|
|
40
40
|
|
|
41
41
|
sub NumbersFirst($$);
|
|
@@ -1170,7 +1170,7 @@ TagID: foreach $tagID (@keys) {
|
|
|
1170
1170
|
my $n = scalar @values;
|
|
1171
1171
|
my ($bits, $i, $v);
|
|
1172
1172
|
foreach (@pk) {
|
|
1173
|
-
next if $_ eq '';
|
|
1173
|
+
next if $_ eq '' and $$printConv{$_} eq '';
|
|
1174
1174
|
$_ eq 'BITMASK' and $bits = $$printConv{$_}, next;
|
|
1175
1175
|
$_ eq 'OTHER' and next;
|
|
1176
1176
|
my $index;
|
|
@@ -1474,7 +1474,7 @@ TagID: foreach $tagID (@keys) {
|
|
|
1474
1474
|
my $tag;
|
|
1475
1475
|
foreach $tag (sort keys %$struct) {
|
|
1476
1476
|
my $tagInfo = $$struct{$tag};
|
|
1477
|
-
next unless ref $tagInfo eq 'HASH';
|
|
1477
|
+
next unless ref $tagInfo eq 'HASH' and $tag ne 'NAMESPACE';
|
|
1478
1478
|
my $writable = $$tagInfo{Writable};
|
|
1479
1479
|
my @vals;
|
|
1480
1480
|
unless ($writable) {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
# 2018/03/13 - PH Update to DPP 4.8.20
|
|
14
14
|
#
|
|
15
15
|
# References: 1) Bogdan private communication (Canon DPP v3.4.1.1)
|
|
16
|
-
# 2) Gert Kello private
|
|
16
|
+
# 2) Gert Kello private communication (DPP 3.8)
|
|
17
17
|
#------------------------------------------------------------------------------
|
|
18
18
|
|
|
19
19
|
package Image::ExifTool::CanonVRD;
|
|
@@ -616,7 +616,7 @@ sub ProcessAdobeIFD($$$)
|
|
|
616
616
|
|
|
617
617
|
# parse the mutilated IFD. This is similar to a TIFF IFD, except:
|
|
618
618
|
# - data follows directly after Count entry in IFD
|
|
619
|
-
# - byte order of IFD
|
|
619
|
+
# - byte order of IFD entries is always big-endian, but byte order of data changes
|
|
620
620
|
SetByteOrder('MM'); # IFD structure is always big-endian
|
|
621
621
|
my $entries = Get16u($dataPt, $pos + 2);
|
|
622
622
|
$et->VerboseDir($dirInfo, $entries);
|
|
@@ -437,7 +437,7 @@ my %opcodeInfo = (
|
|
|
437
437
|
Writable => 'int32u',
|
|
438
438
|
WriteGroup => 'IFD0',
|
|
439
439
|
# Note: priority 0 tags automatically have their priority increased for the
|
|
440
|
-
# priority
|
|
440
|
+
# priority directory (the directory with a SubfileType of "Full-resolution image")
|
|
441
441
|
Priority => 0,
|
|
442
442
|
},
|
|
443
443
|
0x101 => {
|
|
@@ -3284,7 +3284,7 @@ my %opcodeInfo = (
|
|
|
3284
3284
|
Groups => { 1 => 'SR2' },
|
|
3285
3285
|
Flags => 'SubIFD',
|
|
3286
3286
|
Format => 'int32u',
|
|
3287
|
-
# some
|
|
3287
|
+
# some utilities have problems unless this is int8u format:
|
|
3288
3288
|
# - Adobe Camera Raw 5.3 gives an error
|
|
3289
3289
|
# - Apple Preview 10.5.8 gets the wrong white balance
|
|
3290
3290
|
FixFormat => 'int8u', # (stupid Sony)
|
|
@@ -4068,7 +4068,7 @@ my %opcodeInfo = (
|
|
|
4068
4068
|
|
|
4069
4069
|
# tags in the range 0xfde8-0xfe58 have been observed in PS7 files
|
|
4070
4070
|
# generated from RAW images. They are all strings with the
|
|
4071
|
-
# tag name at the start of the string. To
|
|
4071
|
+
# tag name at the start of the string. To accommodate these types
|
|
4072
4072
|
# of tags, all tags with values above 0xf000 are handled specially
|
|
4073
4073
|
# by ProcessExif().
|
|
4074
4074
|
0xfde8 => {
|
|
@@ -73,7 +73,7 @@ sub ProcessFITS($$)
|
|
|
73
73
|
# add to tag table if necessary
|
|
74
74
|
unless ($$tagTablePtr{$tag}) {
|
|
75
75
|
my $name = ucfirst lc $tag; # make tag name lower case with leading capital
|
|
76
|
-
$name =~ s/_(.)/\U$1/g; # remove all '_' and capitalize
|
|
76
|
+
$name =~ s/_(.)/\U$1/g; # remove all '_' and capitalize subsequent letter
|
|
77
77
|
AddTagToTable($tagTablePtr, $tag, { Name => $name });
|
|
78
78
|
}
|
|
79
79
|
}
|
|
@@ -64,7 +64,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
|
|
|
64
64
|
Name => 'ImageTemperatureMax',
|
|
65
65
|
%temperatureInfo,
|
|
66
66
|
Notes => q{
|
|
67
|
-
these temperatures may be in
|
|
67
|
+
these temperatures may be in Celsius, Kelvin or Fahrenheit, but there is no
|
|
68
68
|
way to tell which
|
|
69
69
|
},
|
|
70
70
|
},
|
|
@@ -754,7 +754,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
|
|
|
754
754
|
96 => {
|
|
755
755
|
Name => 'Reading1Value',
|
|
756
756
|
Format => 'double',
|
|
757
|
-
# convert Kelvin ->
|
|
757
|
+
# convert Kelvin -> Celsius and kg/kg -> g/kg
|
|
758
758
|
ValueConv => q{
|
|
759
759
|
return $val - 273.15 if $$self{Reading1Units} == 0x0d and $$self{Reading1Description} != 11;
|
|
760
760
|
return $val *= 1000 if $$self{Reading1Units} == 0x24;
|
|
@@ -794,7 +794,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
|
|
|
794
794
|
196 => {
|
|
795
795
|
Name => 'Reading2Value',
|
|
796
796
|
Format => 'double',
|
|
797
|
-
# convert Kelvin ->
|
|
797
|
+
# convert Kelvin -> Celsius and kg/kg -> g/kg
|
|
798
798
|
ValueConv => q{
|
|
799
799
|
return $val - 273.15 if $$self{Reading2Units} == 0x0d and $$self{Reading2Description} != 11;
|
|
800
800
|
return $val *= 1000 if $$self{Reading2Units} == 0x24;
|
|
@@ -833,7 +833,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
|
|
|
833
833
|
296 => {
|
|
834
834
|
Name => 'Reading3Value',
|
|
835
835
|
Format => 'double',
|
|
836
|
-
# convert Kelvin ->
|
|
836
|
+
# convert Kelvin -> Celsius and kg/kg -> g/kg
|
|
837
837
|
ValueConv => q{
|
|
838
838
|
return $val - 273.15 if $$self{Reading3Units} == 0x0d and $$self{Reading3Description} != 11;
|
|
839
839
|
return $val *= 1000 if $$self{Reading3Units} == 0x24;
|
|
@@ -873,7 +873,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
|
|
|
873
873
|
396 => {
|
|
874
874
|
Name => 'Reading4Value',
|
|
875
875
|
Format => 'double',
|
|
876
|
-
# convert Kelvin ->
|
|
876
|
+
# convert Kelvin -> Celsius and kg/kg -> g/kg
|
|
877
877
|
ValueConv => q{
|
|
878
878
|
return $val - 273.15 if $$self{Reading4Units} == 0x0d and $$self{Reading4Description} != 11;
|
|
879
879
|
return $val *= 1000 if $$self{Reading4Units} == 0x24;
|
|
@@ -418,7 +418,7 @@ Record: for ($rec=0; ; ++$rec) {
|
|
|
418
418
|
my $num = Get32u($dataPt, $pos);
|
|
419
419
|
$$dirInfo{Pos} = $pos + 4;
|
|
420
420
|
my ($i, @vals);
|
|
421
|
-
# add array index to
|
|
421
|
+
# add array index to compound tag name
|
|
422
422
|
my $structName = $$dirInfo{StructName};
|
|
423
423
|
for ($i=0; $i<$num; ++$i) {
|
|
424
424
|
$$dirInfo{StructName} = $structName . $i if defined $structName;
|
|
@@ -2224,7 +2224,7 @@ sub ProcessFPX($$)
|
|
|
2224
2224
|
my $rSib = Get32u(\$dir, $pos + 0x48); # right sibling
|
|
2225
2225
|
my $chld = Get32u(\$dir, $pos + 0x4c); # child directory
|
|
2226
2226
|
|
|
2227
|
-
# save information about object
|
|
2227
|
+
# save information about object hierarchy
|
|
2228
2228
|
my ($obj, $sub);
|
|
2229
2229
|
$obj = $hier{$index} or $obj = $hier{$index} = { };
|
|
2230
2230
|
$$obj{Left} = $lSib unless $lSib == FREE_SECT;
|
|
@@ -80,7 +80,7 @@ my %ttCharset = (
|
|
|
80
80
|
%ttLang = (
|
|
81
81
|
# Macintosh language codes (also used by QuickTime.pm)
|
|
82
82
|
# oddities:
|
|
83
|
-
# 49 -
|
|
83
|
+
# 49 - Cyrillic version 83 - Roman
|
|
84
84
|
# 50 - Arabic version 84 - Arabic
|
|
85
85
|
# 146 - with dot above
|
|
86
86
|
Macintosh => {
|
|
@@ -117,7 +117,7 @@ my %ttCharset = (
|
|
|
117
117
|
# 0x048c - no ISO equivalent
|
|
118
118
|
# 0x081a/0x83c - sr-SP
|
|
119
119
|
# 0x0c0a - modern?
|
|
120
|
-
# 0x2409 -
|
|
120
|
+
# 0x2409 - Carribbean country code not found in ISO 3166-1
|
|
121
121
|
Windows => {
|
|
122
122
|
0x0401 => 'ar-SA', 0x0438 => 'fo', 0x0481 => 'mi', 0x1409 => 'en-NZ',
|
|
123
123
|
0x0402 => 'bg', 0x0439 => 'hi', 0x0482 => 'oc', 0x140a => 'es-CR',
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# Description: Read/write FujiFilm maker notes and RAF images
|
|
5
5
|
#
|
|
6
6
|
# Revisions: 11/25/2003 - P. Harvey Created
|
|
7
|
-
# 11/14/2007 - PH Added
|
|
7
|
+
# 11/14/2007 - PH Added ability to write RAF images
|
|
8
8
|
#
|
|
9
9
|
# References: 1) http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html
|
|
10
10
|
# 2) http://homepage3.nifty.com/kamisaka/makernote/makernote_fuji.htm (2007/09/11)
|
|
@@ -31,7 +31,7 @@ use vars qw($VERSION);
|
|
|
31
31
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
32
32
|
use Image::ExifTool::Exif;
|
|
33
33
|
|
|
34
|
-
$VERSION = '1.
|
|
34
|
+
$VERSION = '1.77';
|
|
35
35
|
|
|
36
36
|
sub ProcessFujiDir($$$);
|
|
37
37
|
sub ProcessFaceRec($$$);
|
|
@@ -374,6 +374,7 @@ my %faceCategories = (
|
|
|
374
374
|
0x1a => 'Portrait 2', #PH (NC, T500, maybe "Smile & Shoot"?)
|
|
375
375
|
0x1b => 'Dog Face Detection', #7
|
|
376
376
|
0x1c => 'Cat Face Detection', #7
|
|
377
|
+
0x30 => 'HDR', #forum10799
|
|
377
378
|
0x40 => 'Advanced Filter',
|
|
378
379
|
0x100 => 'Aperture-priority AE',
|
|
379
380
|
0x200 => 'Shutter speed priority AE',
|
|
@@ -465,6 +466,7 @@ my %faceCategories = (
|
|
|
465
466
|
PrintConv => '$val > 0 ? "+$val" : $val',
|
|
466
467
|
PrintConvInv => '$val + 0',
|
|
467
468
|
},
|
|
469
|
+
# 0x104b - BWAdjustment for Green->Magenta (forum10800)
|
|
468
470
|
0x104d => { #forum9634
|
|
469
471
|
Name => 'CropMode',
|
|
470
472
|
Writable => 'int16u',
|
|
@@ -514,9 +516,9 @@ my %faceCategories = (
|
|
|
514
516
|
SubDirectory => { TagTable => 'Image::ExifTool::FujiFilm::DriveSettings' },
|
|
515
517
|
},
|
|
516
518
|
# (0x1150-0x1152 exist only for Pro Low-light and Pro Focus PictureModes)
|
|
517
|
-
# 0x1150 - Pro Low-light - val=1; Pro Focus - val=2 (ref 7)
|
|
518
|
-
# 0x1151 - Pro Low-light - val=4 (number of pictures taken?); Pro Focus - val=2,3 (ref 7)
|
|
519
|
-
# 0x1152 - Pro Low-light - val=1,3,4 (stacked pictures used?); Pro Focus - val=1,2 (ref 7)
|
|
519
|
+
# 0x1150 - Pro Low-light - val=1; Pro Focus - val=2 (ref 7); HDR - val=128 (forum10799)
|
|
520
|
+
# 0x1151 - Pro Low-light - val=4 (number of pictures taken?); Pro Focus - val=2,3 (ref 7); HDR - val=3 (forum10799)
|
|
521
|
+
# 0x1152 - Pro Low-light - val=1,3,4 (stacked pictures used?); Pro Focus - val=1,2 (ref 7); HDR - val=3 (forum10799)
|
|
520
522
|
0x1153 => { #forum7668
|
|
521
523
|
Name => 'PanoramaAngle',
|
|
522
524
|
Writable => 'int16u',
|
|
@@ -625,7 +627,7 @@ my %faceCategories = (
|
|
|
625
627
|
Writable => 'int16u',
|
|
626
628
|
PrintHex => 1,
|
|
627
629
|
PrintConv => {
|
|
628
|
-
0x000 => 'Auto
|
|
630
|
+
0x000 => 'Auto',
|
|
629
631
|
0x001 => 'Manual', #(ref http://forum.photome.de/viewtopic.php?f=2&t=353)
|
|
630
632
|
0x100 => 'Standard (100%)',
|
|
631
633
|
0x200 => 'Wide1 (230%)',
|
|
@@ -636,6 +638,7 @@ my %faceCategories = (
|
|
|
636
638
|
0x1403 => { #2 (only valid for manual DR, ref 6)
|
|
637
639
|
Name => 'DevelopmentDynamicRange',
|
|
638
640
|
Writable => 'int16u',
|
|
641
|
+
# (shows 200, 400 or 800 for HDR200,HDR400,HDR800, ref forum10799)
|
|
639
642
|
},
|
|
640
643
|
0x1404 => { #2
|
|
641
644
|
Name => 'MinFocalLength',
|
|
@@ -662,6 +665,15 @@ my %faceCategories = (
|
|
|
662
665
|
PrintConv => '"$val%"',
|
|
663
666
|
PrintConvInv => '$val=~s/\s*\%$//; $val',
|
|
664
667
|
},
|
|
668
|
+
0x104e => { #forum10800 (X-Pro3)
|
|
669
|
+
Name => 'ColorChromeFXBlue',
|
|
670
|
+
Writable => 'int32s',
|
|
671
|
+
PrintConv => {
|
|
672
|
+
0 => 'Off',
|
|
673
|
+
32 => 'Weak', # (NC)
|
|
674
|
+
64 => 'Strong',
|
|
675
|
+
},
|
|
676
|
+
},
|
|
665
677
|
0x1422 => { #8
|
|
666
678
|
Name => 'ImageStabilization',
|
|
667
679
|
Writable => 'int16u',
|
|
@@ -721,7 +733,11 @@ my %faceCategories = (
|
|
|
721
733
|
0x1444 => { #12 (X-T3, only exists if DRangePriority is 'Auto')
|
|
722
734
|
Name => 'DRangePriorityAuto',
|
|
723
735
|
Writable => 'int16u',
|
|
724
|
-
PrintConv => {
|
|
736
|
+
PrintConv => {
|
|
737
|
+
1 => 'Weak',
|
|
738
|
+
2 => 'Strong',
|
|
739
|
+
3 => 'Plus', #forum10799
|
|
740
|
+
},
|
|
725
741
|
},
|
|
726
742
|
0x1445 => { #12 (X-T3, only exists if DRangePriority is 'Fixed')
|
|
727
743
|
Name => 'DRangePriorityFixed',
|