exiftool_vendored 12.73.0 → 12.75.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 +41 -2
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +46 -45
- data/bin/exiftool +97 -83
- data/bin/lib/File/RandomAccess.pm +31 -5
- data/bin/lib/File/RandomAccess.pod +4 -4
- data/bin/lib/Image/ExifTool/7Z.pm +3 -3
- data/bin/lib/Image/ExifTool/AFCP.pm +2 -2
- data/bin/lib/Image/ExifTool/BZZ.pm +2 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -7
- data/bin/lib/Image/ExifTool/Canon.pm +6 -5
- data/bin/lib/Image/ExifTool/CanonVRD.pm +2 -2
- data/bin/lib/Image/ExifTool/DICOM.pm +2 -2
- data/bin/lib/Image/ExifTool/DNG.pm +4 -4
- data/bin/lib/Image/ExifTool/Exif.pm +3 -2
- data/bin/lib/Image/ExifTool/FLIR.pm +2 -2
- data/bin/lib/Image/ExifTool/Fixup.pm +3 -3
- data/bin/lib/Image/ExifTool/FlashPix.pm +3 -3
- data/bin/lib/Image/ExifTool/FujiFilm.pm +8 -3
- data/bin/lib/Image/ExifTool/Geotag.pm +3 -3
- data/bin/lib/Image/ExifTool/HtmlDump.pm +2 -2
- data/bin/lib/Image/ExifTool/ID3.pm +2 -2
- data/bin/lib/Image/ExifTool/Import.pm +5 -5
- data/bin/lib/Image/ExifTool/JSON.pm +2 -2
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +51 -12
- data/bin/lib/Image/ExifTool/MIE.pm +3 -3
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +3 -1
- data/bin/lib/Image/ExifTool/NikonCustom.pm +3 -3
- data/bin/lib/Image/ExifTool/Ogg.pm +2 -2
- data/bin/lib/Image/ExifTool/PDF.pm +54 -4
- data/bin/lib/Image/ExifTool/PLIST.pm +3 -3
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +3 -3
- data/bin/lib/Image/ExifTool/PhaseOne.pm +2 -2
- data/bin/lib/Image/ExifTool/Photoshop.pm +3 -3
- data/bin/lib/Image/ExifTool/PostScript.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +41 -107
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +8 -6
- data/bin/lib/Image/ExifTool/RSRC.pm +2 -2
- data/bin/lib/Image/ExifTool/Samsung.pm +4 -4
- data/bin/lib/Image/ExifTool/Shift.pl +1 -2
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +3 -3
- data/bin/lib/Image/ExifTool/Sony.pm +3 -3
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +8 -5
- data/bin/lib/Image/ExifTool/TagNames.pod +36 -5
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteExif.pl +26 -23
- data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteXMP.pl +4 -2
- data/bin/lib/Image/ExifTool/Writer.pl +68 -44
- data/bin/lib/Image/ExifTool/XMP.pm +2 -1
- data/bin/lib/Image/ExifTool/XMP2.pl +9 -0
- data/bin/lib/Image/ExifTool/ZIP.pm +6 -6
- data/bin/lib/Image/ExifTool.pm +42 -26
- data/bin/lib/Image/ExifTool.pod +76 -71
- data/bin/perl-Image-ExifTool.spec +45 -44
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9dda9b74fae35f2dc1e3675ee735a6ef747654f5ab0e92b4ceb64c6dca7d95c1
|
4
|
+
data.tar.gz: c6154176d70ab63db1d4c65a2e872a8c727d1545fccc2bf4197998faa295dc7f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0f3e4fcc88c78448d07f09d73e2e36b025accb4a85d2b425a9eb537c9fabd7792cc2525f41928b82f9688a33ceef08da4996a515bc87258347484e93e93fdec
|
7
|
+
data.tar.gz: 48b0871192b51764f64cdcbb3b69b0f10f752223a68d60a8f364e984542328a339618f49dce5716af91ba13afbfad06cd93e99a1e7fc1f1220b2752f71ab887f
|
data/bin/Changes
CHANGED
@@ -4,9 +4,47 @@ ExifTool Version History
|
|
4
4
|
|
5
5
|
RSS feed: https://exiftool.org/rss.xml
|
6
6
|
|
7
|
-
Note: The most recent production release is Version 12.
|
7
|
+
Note: The most recent production release is Version 12.75. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
Jan. 30, 2024 - Version 12.75 (production release)
|
11
|
+
|
12
|
+
- CORRUPTION WARNING: Fixed bug introduced in 12.45 which could result in
|
13
|
+
corrupted Sony ARW images from some newer models when writing if lossless
|
14
|
+
compression was used
|
15
|
+
- Added ability to read C2PA JUMBF metadata from PDF and SVG files
|
16
|
+
- Added ability to extract JUMBF metadata as a block
|
17
|
+
- Added read support for C2PA (JUMBF-format) files
|
18
|
+
- Removed "date before 1970" warning entirely since 64-bit systems should be
|
19
|
+
able to handle dates in this range
|
20
|
+
- Improved Canon FocusMode decoding
|
21
|
+
- Fixed bug introducd in 12.74 which could cause "Undefined subroutine"
|
22
|
+
runtime error when reading MIE files
|
23
|
+
|
24
|
+
Jan. 23, 2024 - Version 12.74
|
25
|
+
|
26
|
+
- Added a couple of new Nikon lenses (thanks Chris)
|
27
|
+
- Added write support for a few new QuickTime Keys tags
|
28
|
+
- Decode ShutterCount for Canon EOS R5 (thanks John Moyer)
|
29
|
+
- Improved error messages in the case of file read errors
|
30
|
+
- Enhanced tag name strings (eg. -if and -p option arguments) to allow values
|
31
|
+
of multiple matching tags to be concatenated when a group name of "All" is
|
32
|
+
specified
|
33
|
+
- Enhanced -p option to add -p- feature which avoids adding trailing newline
|
34
|
+
- Changed warning from "Shift results in negative time" to "Shift results in
|
35
|
+
date before 1970"
|
36
|
+
- Patched calculation of GPSDateTime for the timed metadata in Track3 of
|
37
|
+
Garmin videos so the API QuickTimeUTC option is no longer required
|
38
|
+
- Fixed conversion error when writing QuickTime:GoogleTrackDuration
|
39
|
+
- Fixed misidentification of non-TIFF-format files containing DNGVersion tag
|
40
|
+
- Fixed bug where Avoid-ed XMP structures could be created when writing
|
41
|
+
another same-named structure
|
42
|
+
- Internal Changes:
|
43
|
+
- Changed form of all new() calls to accommodate backward
|
44
|
+
incompatibilities in recent versions of Perl
|
45
|
+
- Changed order of InsertTagValues() arguments
|
46
|
+
- DateFmt() now returns value of formatted date/time string
|
47
|
+
|
10
48
|
Jan. 10, 2024 - Version 12.73
|
11
49
|
|
12
50
|
- Added write support for Leica XMP-xmpDSA tags
|
@@ -22,7 +60,8 @@ Jan. 10, 2024 - Version 12.73
|
|
22
60
|
decoding
|
23
61
|
- Fixed writing of date/time tags in XMP-xmpMM:Pantry structure
|
24
62
|
- API Changes:
|
25
|
-
- Added LimitLongValues option
|
63
|
+
- Added LimitLongValues option to provide control over tags which
|
64
|
+
previously had a hard-coded length limit
|
26
65
|
|
27
66
|
Dec. 29, 2023 - Version 12.72
|
28
67
|
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
@@ -14,49 +14,50 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
14
14
|
|
15
15
|
File Types
|
16
16
|
------------+-------------+-------------+-------------+------------
|
17
|
-
360 r/w | DOCX r |
|
18
|
-
3FR r | DPX r |
|
19
|
-
3G2 r/w | DR4 r/w/c |
|
20
|
-
3GP r/w | DSS r |
|
21
|
-
7Z r | DV r |
|
22
|
-
A r | DVB r/w |
|
23
|
-
AA r | DVR-MS r |
|
24
|
-
AAC r | DYLIB r |
|
25
|
-
AAE r | EIP r |
|
26
|
-
AAX r/w | EPS r/w |
|
27
|
-
ACR r | EPUB r |
|
28
|
-
AFM r | ERF r/w |
|
29
|
-
AI r/w | EXE r |
|
30
|
-
AIFF r | EXIF r/w/c |
|
31
|
-
APE r | EXR r |
|
32
|
-
ARQ r/w | EXV r/w/c |
|
33
|
-
ARW r/w | F4A/V r/w |
|
34
|
-
ASF r | FFF r/w |
|
35
|
-
AVI r | FITS r |
|
36
|
-
AVIF r/w | FLA r |
|
37
|
-
AZW r | FLAC r |
|
38
|
-
BMP r | FLIF r/w |
|
39
|
-
BPG r | FLV r |
|
40
|
-
BTF r | FPF r |
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
17
|
+
360 r/w | DOCX r | ITC r | O r | RSRC r
|
18
|
+
3FR r | DPX r | J2C r | ODP r | RTF r
|
19
|
+
3G2 r/w | DR4 r/w/c | JNG r/w | ODS r | RW2 r/w
|
20
|
+
3GP r/w | DSS r | JP2 r/w | ODT r | RWL r/w
|
21
|
+
7Z r | DV r | JPEG r/w | OFR r | RWZ r
|
22
|
+
A r | DVB r/w | JSON r | OGG r | RM r
|
23
|
+
AA r | DVR-MS r | JXL r | OGV r | SEQ r
|
24
|
+
AAC r | DYLIB r | K25 r | ONP r | SKETCH r
|
25
|
+
AAE r | EIP r | KDC r | OPUS r | SO r
|
26
|
+
AAX r/w | EPS r/w | KEY r | ORF r/w | SR2 r/w
|
27
|
+
ACR r | EPUB r | LA r | ORI r/w | SRF r
|
28
|
+
AFM r | ERF r/w | LFP r | OTF r | SRW r/w
|
29
|
+
AI r/w | EXE r | LIF r | PAC r | SVG r
|
30
|
+
AIFF r | EXIF r/w/c | LNK r | PAGES r | SWF r
|
31
|
+
APE r | EXR r | LRV r/w | PBM r/w | THM r/w
|
32
|
+
ARQ r/w | EXV r/w/c | M2TS r | PCD r | TIFF r/w
|
33
|
+
ARW r/w | F4A/V r/w | M4A/V r/w | PCX r | TORRENT r
|
34
|
+
ASF r | FFF r/w | MACOS r | PDB r | TTC r
|
35
|
+
AVI r | FITS r | MAX r | PDF r/w | TTF r
|
36
|
+
AVIF r/w | FLA r | MEF r/w | PEF r/w | TXT r
|
37
|
+
AZW r | FLAC r | MIE r/w/c | PFA r | VCF r
|
38
|
+
BMP r | FLIF r/w | MIFF r | PFB r | VNT r
|
39
|
+
BPG r | FLV r | MKA r | PFM r | VRD r/w/c
|
40
|
+
BTF r | FPF r | MKS r | PGF r | VSD r
|
41
|
+
C2PA r | FPX r | MKV r | PGM r/w | WAV r
|
42
|
+
CHM r | GIF r/w | MNG r/w | PLIST r | WDP r/w
|
43
|
+
COS r | GLV r/w | MOBI r | PICT r | WEBP r/w
|
44
|
+
CR2 r/w | GPR r/w | MODD r | PMP r | WEBM r
|
45
|
+
CR3 r/w | GZ r | MOI r | PNG r/w | WMA r
|
46
|
+
CRM r/w | HDP r/w | MOS r/w | PPM r/w | WMV r
|
47
|
+
CRW r/w | HDR r | MOV r/w | PPT r | WPG r
|
48
|
+
CS1 r/w | HEIC r/w | MP3 r | PPTX r | WTV r
|
49
|
+
CSV r | HEIF r/w | MP4 r/w | PS r/w | WV r
|
50
|
+
CUR r | HTML r | MPC r | PSB r/w | X3F r/w
|
51
|
+
CZI r | ICC r/w/c | MPG r | PSD r/w | XCF r
|
52
|
+
DCM r | ICO r | MPO r/w | PSP r | XISF r
|
53
|
+
DCP r/w | ICS r | MQV r/w | QTIF r/w | XLS r
|
54
|
+
DCR r | IDML r | MRC r | R3D r | XLSX r
|
55
|
+
DFONT r | IIQ r/w | MRW r/w | RA r | XMP r/w/c
|
56
|
+
DIVX r | IND r/w | MXF r | RAF r/w | ZIP r
|
57
|
+
DJVU r | INSP r/w | NEF r/w | RAM r |
|
58
|
+
DLL r | INSV r | NKSC r/w | RAR r |
|
59
|
+
DNG r/w | INX r | NRW r/w | RAW r/w |
|
60
|
+
DOC r | ISO r | NUMBERS r | RIFF r |
|
60
61
|
|
61
62
|
Meta Information
|
62
63
|
----------------------+----------------------+---------------------
|
@@ -108,8 +109,8 @@ your home directory, then you would type the following commands in a
|
|
108
109
|
terminal window to extract and run ExifTool:
|
109
110
|
|
110
111
|
cd ~/Desktop
|
111
|
-
gzip -dc Image-ExifTool-12.
|
112
|
-
cd Image-ExifTool-12.
|
112
|
+
gzip -dc Image-ExifTool-12.75.tar.gz | tar -xf -
|
113
|
+
cd Image-ExifTool-12.75
|
113
114
|
./exiftool t/images/ExifTool.jpg
|
114
115
|
|
115
116
|
Note: These commands extract meta information from one of the test images.
|
data/bin/exiftool
CHANGED
@@ -11,7 +11,7 @@ use strict;
|
|
11
11
|
use warnings;
|
12
12
|
require 5.004;
|
13
13
|
|
14
|
-
my $version = '12.
|
14
|
+
my $version = '12.75';
|
15
15
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
17
17
|
my $exePath;
|
@@ -70,7 +70,7 @@ sub PreserveTime();
|
|
70
70
|
sub AbsPath($);
|
71
71
|
sub MyConvertFileName($$);
|
72
72
|
sub SuggestedExtension($$$);
|
73
|
-
sub LoadPrintFormat(
|
73
|
+
sub LoadPrintFormat($;$);
|
74
74
|
sub FilenameSPrintf($;$@);
|
75
75
|
sub NextUnusedFilename($;$);
|
76
76
|
sub CreateDirectory($);
|
@@ -271,7 +271,7 @@ my %optArgs = (
|
|
271
271
|
'-lang' => 0, # (optional arg; cannot begin with "-")
|
272
272
|
'-listitem' => 1,
|
273
273
|
'-o' => 1, '-out' => 1,
|
274
|
-
'-p' => 1, '-printformat' => 1,
|
274
|
+
'-p' => 1, '-printformat' => 1, '-p-' => 1, '-printformat-' => 1,
|
275
275
|
'-P' => 0,
|
276
276
|
'-password' => 1,
|
277
277
|
'-require' => 1,
|
@@ -573,7 +573,7 @@ if ($^O eq 'MSWin32' and eval { require File::Glob }) {
|
|
573
573
|
$doGlob = 1;
|
574
574
|
}
|
575
575
|
|
576
|
-
$mt =
|
576
|
+
$mt = Image::ExifTool->new; # create ExifTool object
|
577
577
|
|
578
578
|
# don't extract duplicates by default unless set by UserDefined::Options
|
579
579
|
$mt->Options(Duplicates => 0) unless %Image::ExifTool::UserDefined::Options
|
@@ -1133,10 +1133,10 @@ for (;;) {
|
|
1133
1133
|
}
|
1134
1134
|
/^overwrite_original$/i and $overwriteOrig = 1, next;
|
1135
1135
|
/^overwrite_original_in_place$/i and $overwriteOrig = 2, next;
|
1136
|
-
if (/^p$/ or
|
1136
|
+
if (/^p(-?)$/ or /^printformat(-?)$/i) {
|
1137
1137
|
my $fmt = shift;
|
1138
1138
|
if ($pass) {
|
1139
|
-
LoadPrintFormat($fmt);
|
1139
|
+
LoadPrintFormat($fmt, $1);
|
1140
1140
|
# load MWG module now if necessary
|
1141
1141
|
if (not $useMWG and grep /^mwg:/i, @requestTags) {
|
1142
1142
|
$useMWG = 1;
|
@@ -1145,7 +1145,7 @@ for (;;) {
|
|
1145
1145
|
}
|
1146
1146
|
} else {
|
1147
1147
|
# defer to next pass so the filename charset is available
|
1148
|
-
push @nextPass,
|
1148
|
+
push @nextPass, "-$_", $fmt;
|
1149
1149
|
}
|
1150
1150
|
next;
|
1151
1151
|
}
|
@@ -1792,7 +1792,7 @@ if (not $altEnc and $mt->Options('Lang') ne 'en' and eval { require Encode }) {
|
|
1792
1792
|
if (@fileOrder) {
|
1793
1793
|
my @allFiles;
|
1794
1794
|
ProcessFiles($mt, \@allFiles);
|
1795
|
-
my $sortTool =
|
1795
|
+
my $sortTool = Image::ExifTool->new;
|
1796
1796
|
$sortTool->Options(FastScan => $fileOrderFast) if $fileOrderFast;
|
1797
1797
|
$sortTool->Options(PrintConv => $mt->Options('PrintConv'));
|
1798
1798
|
$sortTool->Options(Duplicates => 0);
|
@@ -2080,7 +2080,7 @@ sub GetImageInfo($$)
|
|
2080
2080
|
@foundTags = ('*', @tags) if @tags;
|
2081
2081
|
$info = $et->ImageInfo(Infile($pipe,$isWriting), \@foundTags, $opts);
|
2082
2082
|
foreach $condition (@condition) {
|
2083
|
-
my $cond = $et->InsertTagValues(\@foundTags,
|
2083
|
+
my $cond = $et->InsertTagValues($condition, \@foundTags, \%info);
|
2084
2084
|
{
|
2085
2085
|
# set package so eval'd functions are in Image::ExifTool namespace
|
2086
2086
|
package Image::ExifTool;
|
@@ -2281,7 +2281,7 @@ sub GetImageInfo($$)
|
|
2281
2281
|
my @lines;
|
2282
2282
|
my $opt = $type eq 'IF' ? 'Silent' : 'Warn'; # silence "IF" warnings
|
2283
2283
|
foreach (@$prf) {
|
2284
|
-
my $line = $et->InsertTagValues(\@foundTags, $
|
2284
|
+
my $line = $et->InsertTagValues($_, \@foundTags, $opt, $grp, $cache);
|
2285
2285
|
if ($type eq 'IF') {
|
2286
2286
|
$skipBody = 1 unless defined $line;
|
2287
2287
|
} elsif (defined $line) {
|
@@ -2714,7 +2714,7 @@ TAG: foreach $tag (@foundTags) {
|
|
2714
2714
|
} elsif ($fixLen == 1) {
|
2715
2715
|
$padLen -= length Encode::decode_utf8($desc);
|
2716
2716
|
} else {
|
2717
|
-
my $gcstr = eval {
|
2717
|
+
my $gcstr = eval { Unicode::GCString->new(Encode::decode_utf8($desc)) };
|
2718
2718
|
if ($gcstr) {
|
2719
2719
|
$padLen -= $gcstr->columns;
|
2720
2720
|
} else {
|
@@ -3640,7 +3640,7 @@ sub Infile($;$)
|
|
3640
3640
|
if ($rafStdin) {
|
3641
3641
|
$rafStdin->Seek(0); # rewind
|
3642
3642
|
} elsif (open RAF_STDIN, '-') {
|
3643
|
-
$rafStdin =
|
3643
|
+
$rafStdin = File::RandomAccess->new(\*RAF_STDIN);
|
3644
3644
|
$rafStdin->BinMode();
|
3645
3645
|
}
|
3646
3646
|
return $rafStdin if $rafStdin;
|
@@ -4109,6 +4109,10 @@ sub SuggestedExtension($$$)
|
|
4109
4109
|
$ext = 'pict';
|
4110
4110
|
} elsif ($$valPt =~ /^\xff\x0a|\0\0\0\x0cJXL \x0d\x0a......ftypjxl/s) {
|
4111
4111
|
$ext = 'jxl';
|
4112
|
+
} elsif ($$valPt =~ /^.{4}jumb\0.{3}jumdc2pa/s) {
|
4113
|
+
$ext = 'c2pa';
|
4114
|
+
} elsif ($tag eq 'JUMBF') {
|
4115
|
+
$ext = 'jumbf';
|
4112
4116
|
} else {
|
4113
4117
|
$ext = 'dat';
|
4114
4118
|
}
|
@@ -4117,12 +4121,12 @@ sub SuggestedExtension($$$)
|
|
4117
4121
|
|
4118
4122
|
#------------------------------------------------------------------------------
|
4119
4123
|
# Load print format file
|
4120
|
-
# Inputs: 0) file name
|
4124
|
+
# Inputs: 0) file name, 1) flag to avoid adding newline to input argument
|
4121
4125
|
# - saves lines of file to %printFmt list
|
4122
4126
|
# - adds tag names to @tags list
|
4123
|
-
sub LoadPrintFormat(
|
4127
|
+
sub LoadPrintFormat($;$)
|
4124
4128
|
{
|
4125
|
-
my $arg =
|
4129
|
+
my ($arg, $noNL) = @_;
|
4126
4130
|
if (not defined $arg) {
|
4127
4131
|
Error "Must specify file or expression for -p option\n";
|
4128
4132
|
} elsif ($arg !~ /\n/ and -f $arg and $mt->Open(\*FMT_FILE, $arg)) {
|
@@ -4131,7 +4135,8 @@ sub LoadPrintFormat($)
|
|
4131
4135
|
}
|
4132
4136
|
close(FMT_FILE);
|
4133
4137
|
} else {
|
4134
|
-
|
4138
|
+
$arg .= "\n" unless $noNL;
|
4139
|
+
AddPrintFormat($arg);
|
4135
4140
|
}
|
4136
4141
|
}
|
4137
4142
|
|
@@ -4295,7 +4300,7 @@ sub CreateDirectory($)
|
|
4295
4300
|
return 0;
|
4296
4301
|
}
|
4297
4302
|
unless ($k32CreateDir) {
|
4298
|
-
$k32CreateDir =
|
4303
|
+
$k32CreateDir = Win32::API->new('KERNEL32', 'CreateDirectoryW', 'PP', 'I');
|
4299
4304
|
}
|
4300
4305
|
$success = $k32CreateDir->Call($d2, 0) if $k32CreateDir;
|
4301
4306
|
} else {
|
@@ -4644,49 +4649,50 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
4644
4649
|
|
4645
4650
|
File Types
|
4646
4651
|
------------+-------------+-------------+-------------+------------
|
4647
|
-
360 r/w | DOCX r |
|
4648
|
-
3FR r | DPX r |
|
4649
|
-
3G2 r/w | DR4 r/w/c |
|
4650
|
-
3GP r/w | DSS r |
|
4651
|
-
7Z r | DV r |
|
4652
|
-
A r | DVB r/w |
|
4653
|
-
AA r | DVR-MS r |
|
4654
|
-
AAC r | DYLIB r |
|
4655
|
-
AAE r | EIP r |
|
4656
|
-
AAX r/w | EPS r/w |
|
4657
|
-
ACR r | EPUB r |
|
4658
|
-
AFM r | ERF r/w |
|
4659
|
-
AI r/w | EXE r |
|
4660
|
-
AIFF r | EXIF r/w/c |
|
4661
|
-
APE r | EXR r |
|
4662
|
-
ARQ r/w | EXV r/w/c |
|
4663
|
-
ARW r/w | F4A/V r/w |
|
4664
|
-
ASF r | FFF r/w |
|
4665
|
-
AVI r | FITS r |
|
4666
|
-
AVIF r/w | FLA r |
|
4667
|
-
AZW r | FLAC r |
|
4668
|
-
BMP r | FLIF r/w |
|
4669
|
-
BPG r | FLV r |
|
4670
|
-
BTF r | FPF r |
|
4671
|
-
|
4672
|
-
|
4673
|
-
|
4674
|
-
|
4675
|
-
|
4676
|
-
|
4677
|
-
|
4678
|
-
|
4679
|
-
|
4680
|
-
|
4681
|
-
|
4682
|
-
|
4683
|
-
|
4684
|
-
|
4685
|
-
|
4686
|
-
|
4687
|
-
|
4688
|
-
|
4689
|
-
|
4652
|
+
360 r/w | DOCX r | ITC r | O r | RSRC r
|
4653
|
+
3FR r | DPX r | J2C r | ODP r | RTF r
|
4654
|
+
3G2 r/w | DR4 r/w/c | JNG r/w | ODS r | RW2 r/w
|
4655
|
+
3GP r/w | DSS r | JP2 r/w | ODT r | RWL r/w
|
4656
|
+
7Z r | DV r | JPEG r/w | OFR r | RWZ r
|
4657
|
+
A r | DVB r/w | JSON r | OGG r | RM r
|
4658
|
+
AA r | DVR-MS r | JXL r | OGV r | SEQ r
|
4659
|
+
AAC r | DYLIB r | K25 r | ONP r | SKETCH r
|
4660
|
+
AAE r | EIP r | KDC r | OPUS r | SO r
|
4661
|
+
AAX r/w | EPS r/w | KEY r | ORF r/w | SR2 r/w
|
4662
|
+
ACR r | EPUB r | LA r | ORI r/w | SRF r
|
4663
|
+
AFM r | ERF r/w | LFP r | OTF r | SRW r/w
|
4664
|
+
AI r/w | EXE r | LIF r | PAC r | SVG r
|
4665
|
+
AIFF r | EXIF r/w/c | LNK r | PAGES r | SWF r
|
4666
|
+
APE r | EXR r | LRV r/w | PBM r/w | THM r/w
|
4667
|
+
ARQ r/w | EXV r/w/c | M2TS r | PCD r | TIFF r/w
|
4668
|
+
ARW r/w | F4A/V r/w | M4A/V r/w | PCX r | TORRENT r
|
4669
|
+
ASF r | FFF r/w | MACOS r | PDB r | TTC r
|
4670
|
+
AVI r | FITS r | MAX r | PDF r/w | TTF r
|
4671
|
+
AVIF r/w | FLA r | MEF r/w | PEF r/w | TXT r
|
4672
|
+
AZW r | FLAC r | MIE r/w/c | PFA r | VCF r
|
4673
|
+
BMP r | FLIF r/w | MIFF r | PFB r | VNT r
|
4674
|
+
BPG r | FLV r | MKA r | PFM r | VRD r/w/c
|
4675
|
+
BTF r | FPF r | MKS r | PGF r | VSD r
|
4676
|
+
C2PA r | FPX r | MKV r | PGM r/w | WAV r
|
4677
|
+
CHM r | GIF r/w | MNG r/w | PLIST r | WDP r/w
|
4678
|
+
COS r | GLV r/w | MOBI r | PICT r | WEBP r/w
|
4679
|
+
CR2 r/w | GPR r/w | MODD r | PMP r | WEBM r
|
4680
|
+
CR3 r/w | GZ r | MOI r | PNG r/w | WMA r
|
4681
|
+
CRM r/w | HDP r/w | MOS r/w | PPM r/w | WMV r
|
4682
|
+
CRW r/w | HDR r | MOV r/w | PPT r | WPG r
|
4683
|
+
CS1 r/w | HEIC r/w | MP3 r | PPTX r | WTV r
|
4684
|
+
CSV r | HEIF r/w | MP4 r/w | PS r/w | WV r
|
4685
|
+
CUR r | HTML r | MPC r | PSB r/w | X3F r/w
|
4686
|
+
CZI r | ICC r/w/c | MPG r | PSD r/w | XCF r
|
4687
|
+
DCM r | ICO r | MPO r/w | PSP r | XISF r
|
4688
|
+
DCP r/w | ICS r | MQV r/w | QTIF r/w | XLS r
|
4689
|
+
DCR r | IDML r | MRC r | R3D r | XLSX r
|
4690
|
+
DFONT r | IIQ r/w | MRW r/w | RA r | XMP r/w/c
|
4691
|
+
DIVX r | IND r/w | MXF r | RAF r/w | ZIP r
|
4692
|
+
DJVU r | INSP r/w | NEF r/w | RAM r |
|
4693
|
+
DLL r | INSV r | NKSC r/w | RAR r |
|
4694
|
+
DNG r/w | INX r | NRW r/w | RAW r/w |
|
4695
|
+
DOC r | ISO r | NUMBERS r | RIFF r |
|
4690
4696
|
|
4691
4697
|
Meta Information
|
4692
4698
|
----------------------+----------------------+---------------------
|
@@ -4752,7 +4758,7 @@ L<Input-output text formatting|/Input-output text formatting>
|
|
4752
4758
|
-lang [LANG] Set current language
|
4753
4759
|
-listItem INDEX Extract specific item from a list
|
4754
4760
|
-n (--printConv) No print conversion
|
4755
|
-
-p
|
4761
|
+
-p[-] STR (-printFormat) Print output in specified format
|
4756
4762
|
-php Export tags as a PHP Array
|
4757
4763
|
-s[NUM] (-short) Short output format (-s for tag names)
|
4758
4764
|
-S (-veryShort) Very short output format
|
@@ -5561,30 +5567,31 @@ when writing. For example, the following commands all have the same effect:
|
|
5561
5567
|
> exiftool -Orientation=6 -n a.jpg
|
5562
5568
|
> exiftool -Orientation#=6 a.jpg
|
5563
5569
|
|
5564
|
-
=item B<-p> I<
|
5570
|
+
=item B<-p>[-] I<STR> or I<FMTFILE> (B<-printFormat>)
|
5565
5571
|
|
5566
|
-
Print output in the format specified by the given
|
5572
|
+
Print output in the format specified by the given string or file. The
|
5567
5573
|
argument is interpreted as a string unless a file of that name exists, in
|
5568
5574
|
which case the string is loaded from the contents of the file. Tag names in
|
5569
|
-
the format
|
5575
|
+
the format string or file begin with a C<$> symbol and may contain leading
|
5570
5576
|
group names and/or a trailing C<#> (to disable print conversion). Case is
|
5571
5577
|
not significant. Braces C<{}> may be used around the tag name to separate
|
5572
5578
|
it from subsequent text (and must be used if subsequent text begins with an
|
5573
5579
|
alphanumeric character, hyphen, underline, colon or number sign). Use C<$$>
|
5574
|
-
to represent a C<$> symbol, and C<$/> for a newline.
|
5575
|
-
|
5576
|
-
|
5577
|
-
|
5578
|
-
|
5579
|
-
|
5580
|
-
|
5581
|
-
|
5582
|
-
|
5583
|
-
C<#[
|
5584
|
-
|
5585
|
-
|
5586
|
-
|
5587
|
-
|
5580
|
+
to represent a C<$> symbol, and C<$/> for a newline. When the string
|
5581
|
+
argument is used (ie. I<STR>), a newline is added to the end of the string
|
5582
|
+
unless B<-p-> is specified.
|
5583
|
+
|
5584
|
+
Multiple B<-p> options may be used. Lines beginning with C<#[HEAD]> and
|
5585
|
+
C<#[TAIL]> are output before the first processed file and after the last
|
5586
|
+
processed file respectively. Lines beginning with C<#[SECT]> and C<#[ENDS]>
|
5587
|
+
are output before and after each section of files. A section is defined as
|
5588
|
+
a group of consecutive files with the same section header (eg. files are
|
5589
|
+
grouped by directory if C<#[SECT]> contains C<$directory>). Lines beginning
|
5590
|
+
with C<#[BODY]> and lines not beginning with C<#> are output for each
|
5591
|
+
processed file. Lines beginning with C<#[IF]> are not output, but all BODY
|
5592
|
+
lines are skipped if any tag on an IF line doesn't exist. Other lines
|
5593
|
+
beginning with C<#> are ignored. (To output a line beginning with C<#>, use
|
5594
|
+
C<#[BODY]#>.) For example, this format file:
|
5588
5595
|
|
5589
5596
|
# this is a comment line
|
5590
5597
|
#[HEAD]-- Generated by ExifTool $exifToolVersion --
|
@@ -5598,16 +5605,21 @@ with this command:
|
|
5598
5605
|
|
5599
5606
|
produces output like this:
|
5600
5607
|
|
5601
|
-
-- Generated by ExifTool 12.
|
5608
|
+
-- Generated by ExifTool 12.75 --
|
5602
5609
|
File: a.jpg - 2003:10:31 15:44:19
|
5603
5610
|
(f/5.6, 1/60s, ISO 100)
|
5604
5611
|
File: b.jpg - 2006:05:23 11:57:38
|
5605
5612
|
(f/8.0, 1/13s, ISO 100)
|
5606
5613
|
-- end --
|
5607
5614
|
|
5608
|
-
The values of List-type tags with multiple items
|
5609
|
-
|
5610
|
-
when interpolated in the string.
|
5615
|
+
The values of List-type tags with multiple items, Shortcut tags representing
|
5616
|
+
multiple tags, and matching tags when the C<All> group is specified are
|
5617
|
+
joined according the B<-sep> option setting when interpolated in the string.
|
5618
|
+
(Note that when C<All> is used as a group name, dupicate tags are included
|
5619
|
+
regardless of the Duplicates option setting.) When C<All> is used as a tag
|
5620
|
+
name, a value of 1 is returned if any tag exists in the specified group, or
|
5621
|
+
0 otherwise (unless the C<All> group is also specified, in which case the
|
5622
|
+
values of all matching tags are joined).
|
5611
5623
|
|
5612
5624
|
When B<-ee> (B<-extractEmbedded>) is combined with B<-p>, embedded documents
|
5613
5625
|
are effectively processed as separate input files.
|
@@ -6550,7 +6562,9 @@ set to undef if C<=> is used, or an empty string with C<^=>. If I<OPT> is
|
|
6550
6562
|
not specified a list of available options is returned. The option name is
|
6551
6563
|
not case senstive, but the option values are. See
|
6552
6564
|
L<Image::ExifTool Options|Image::ExifTool/Options> for option details. This
|
6553
|
-
overrides API options set via the config file.
|
6565
|
+
overrides API options set via the config file. Note that the exiftool app
|
6566
|
+
sets some API options internally, and attempts to change these via the
|
6567
|
+
command line will have no effect.
|
6554
6568
|
|
6555
6569
|
=item B<-common_args>
|
6556
6570
|
|
@@ -17,6 +17,7 @@
|
|
17
17
|
# scalar with a multi-character newline
|
18
18
|
# 01/24/2009 - PH Protect against reading too much at once
|
19
19
|
# 10/04/2018 - PH Added NoBuffer option
|
20
|
+
# 01/20/2024 - PH Set ERROR on file read error
|
20
21
|
#
|
21
22
|
# Notes: Calls the normal file i/o routines unless SeekTest() fails, in
|
22
23
|
# which case the file is buffered in memory to allow random access.
|
@@ -25,6 +26,9 @@
|
|
25
26
|
#
|
26
27
|
# May also be used for string i/o (just pass a scalar reference)
|
27
28
|
#
|
29
|
+
# Sets internal ERROR member from $! if there is an error reading
|
30
|
+
# the file.
|
31
|
+
#
|
28
32
|
# Legal: Copyright (c) 2003-2024, Phil Harvey (philharvey66 at gmail.com)
|
29
33
|
# This library is free software; you can redistribute it and/or
|
30
34
|
# modify it under the same terms as Perl itself.
|
@@ -37,7 +41,7 @@ require 5.002;
|
|
37
41
|
require Exporter;
|
38
42
|
|
39
43
|
use vars qw($VERSION @ISA @EXPORT_OK);
|
40
|
-
$VERSION = '1.
|
44
|
+
$VERSION = '1.12';
|
41
45
|
@ISA = qw(Exporter);
|
42
46
|
|
43
47
|
sub Read($$$);
|
@@ -211,6 +215,8 @@ sub Read($$$)
|
|
211
215
|
if ($num) {
|
212
216
|
${$self->{BUFF_PT}} .= $buff;
|
213
217
|
$self->{LEN} += $num;
|
218
|
+
} elsif (not defined $num) {
|
219
|
+
$self->{ERROR} = $!;
|
214
220
|
}
|
215
221
|
}
|
216
222
|
# number of bytes left in data buffer
|
@@ -229,7 +235,11 @@ sub Read($$$)
|
|
229
235
|
} else {
|
230
236
|
# read directly from file
|
231
237
|
$_[0] = '' unless defined $_[0];
|
232
|
-
$rtnVal = read($self->{FILE_PT}, $_[0], $len)
|
238
|
+
$rtnVal = read($self->{FILE_PT}, $_[0], $len);
|
239
|
+
unless (defined $rtnVal) {
|
240
|
+
$self->{ERROR} = $!;
|
241
|
+
$rtnVal = 0;
|
242
|
+
}
|
233
243
|
}
|
234
244
|
if ($self->{DEBUG}) {
|
235
245
|
my $pos = $self->Tell() - $rtnVal;
|
@@ -258,7 +268,10 @@ sub ReadLine($$)
|
|
258
268
|
# make sure we have some data after the current position
|
259
269
|
while ($self->{LEN} <= $pos) {
|
260
270
|
$num = read($fp, $buff, $CHUNK_SIZE);
|
261
|
-
|
271
|
+
unless ($num) {
|
272
|
+
defined $num or $self->{ERROR} = $!;
|
273
|
+
return 0;
|
274
|
+
}
|
262
275
|
${$self->{BUFF_PT}} .= $buff;
|
263
276
|
$self->{LEN} += $num;
|
264
277
|
}
|
@@ -270,7 +283,11 @@ sub ReadLine($$)
|
|
270
283
|
last;
|
271
284
|
}
|
272
285
|
$pos = $self->{LEN}; # have scanned to end of buffer
|
273
|
-
$num = read($fp, $buff, $CHUNK_SIZE)
|
286
|
+
$num = read($fp, $buff, $CHUNK_SIZE);
|
287
|
+
unless ($num) {
|
288
|
+
defined $num or $self->{ERROR} = $!;
|
289
|
+
last;
|
290
|
+
}
|
274
291
|
${$self->{BUFF_PT}} .= $buff;
|
275
292
|
$self->{LEN} += $num;
|
276
293
|
}
|
@@ -314,7 +331,12 @@ sub Slurp($)
|
|
314
331
|
my $fp = $self->{FILE_PT} || return;
|
315
332
|
# read whole file into buffer (in large chunks)
|
316
333
|
my ($buff, $num);
|
317
|
-
|
334
|
+
for (;;) {
|
335
|
+
$num = read($fp, $buff, $CHUNK_SIZE * $SLURP_CHUNKS);
|
336
|
+
unless ($num) {
|
337
|
+
defined $num or $self->{ERROR} = $!;
|
338
|
+
last;
|
339
|
+
}
|
318
340
|
${$self->{BUFF_PT}} .= $buff;
|
319
341
|
$self->{LEN} += $num;
|
320
342
|
}
|
@@ -339,6 +361,10 @@ sub Purge($)
|
|
339
361
|
$self->{POS} -= $self->{LEN};
|
340
362
|
${$self->{BUFF_PT}} = '';
|
341
363
|
$self->{LEN} = read($self->{FILE_PT}, ${$self->{BUFF_PT}}, $SKIP_SIZE);
|
364
|
+
if (not defined $self->{LEN}) {
|
365
|
+
$self->{ERROR} = $!;
|
366
|
+
last;
|
367
|
+
}
|
342
368
|
last if $self->{LEN} < $SKIP_SIZE;
|
343
369
|
}
|
344
370
|
} elsif ($purge > 0) {
|