exiftool_vendored 11.86.0 → 11.88.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of exiftool_vendored might be problematic. Click here for more details.
- 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',
|