exiftool_vendored 11.49.0 → 11.50.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 +16 -1
- data/bin/MANIFEST +2 -0
- data/bin/META.json +4 -3
- data/bin/META.yml +15 -14
- data/bin/README +7 -5
- data/bin/config_files/rotate_regions.config +173 -0
- data/bin/config_files/tiff_version.config +121 -0
- data/bin/exiftool +16 -15
- data/bin/lib/Image/ExifTool.pm +26 -19
- data/bin/lib/Image/ExifTool.pod +5 -2
- data/bin/lib/Image/ExifTool/Audible.pm +2 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +25 -21
- data/bin/lib/Image/ExifTool/Canon.pm +13 -9
- data/bin/lib/Image/ExifTool/CanonVRD.pm +4 -4
- data/bin/lib/Image/ExifTool/DjVu.pm +1 -2
- data/bin/lib/Image/ExifTool/EXE.pm +1 -1
- data/bin/lib/Image/ExifTool/Exif.pm +44 -6
- data/bin/lib/Image/ExifTool/FLIR.pm +1 -1
- data/bin/lib/Image/ExifTool/FlashPix.pm +12 -9
- data/bin/lib/Image/ExifTool/GPS.pm +3 -3
- data/bin/lib/Image/ExifTool/GoPro.pm +4 -4
- data/bin/lib/Image/ExifTool/H264.pm +2 -2
- data/bin/lib/Image/ExifTool/HP.pm +1 -1
- data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
- data/bin/lib/Image/ExifTool/MIE.pm +3 -3
- data/bin/lib/Image/ExifTool/MPF.pm +2 -2
- data/bin/lib/Image/ExifTool/MWG.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +2 -2
- data/bin/lib/Image/ExifTool/Matroska.pm +1 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +58 -56
- data/bin/lib/Image/ExifTool/Nikon.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +2 -2
- data/bin/lib/Image/ExifTool/OpenEXR.pm +2 -2
- data/bin/lib/Image/ExifTool/PDF.pm +4 -4
- data/bin/lib/Image/ExifTool/PICT.pm +3 -3
- data/bin/lib/Image/ExifTool/PNG.pm +2 -2
- data/bin/lib/Image/ExifTool/Pentax.pm +1 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +1 -2
- data/bin/lib/Image/ExifTool/PostScript.pm +4 -4
- data/bin/lib/Image/ExifTool/QuickTime.pm +37 -15
- data/bin/lib/Image/ExifTool/RIFF.pm +3 -2
- data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
- data/bin/lib/Image/ExifTool/Sony.pm +4 -2
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +9 -7
- data/bin/lib/Image/ExifTool/TagNames.pod +31 -21
- data/bin/lib/Image/ExifTool/VCard.pm +1 -1
- data/bin/lib/Image/ExifTool/Validate.pm +2 -2
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +11 -6
- data/bin/lib/Image/ExifTool/XMP.pm +3 -7
- data/bin/lib/Image/ExifTool/XMPStruct.pl +2 -1
- data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
- data/bin/lib/Image/ExifTool/iWork.pm +1 -1
- data/bin/perl-Image-ExifTool.spec +3 -3
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e698f7b3e0b0d832195da16b3303c8c913fc39ff
|
|
4
|
+
data.tar.gz: 56345fda76bb7c49c0fc8d262d53d27f2aec9e55
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '08a077f0a714a29e332430f59981c16ea00d18bbea887c940511cb7f2f4c03403c8b8b63e44328b0d7accec8e992a744eee74868832ced8c4b552e639ddd903d'
|
|
7
|
+
data.tar.gz: d96983fd20e4de4d4bd24bf8711cbf063f77c7b21665968fa3b9fb93d29464e77466683d8c7a184794dcfb3557a78c4b94f6be33a0f5478039f33701035f5958
|
data/bin/Changes
CHANGED
|
@@ -4,9 +4,24 @@ ExifTool Version History
|
|
|
4
4
|
|
|
5
5
|
RSS feed: http://owl.phy.queensu.ca/~phil/exiftool/rss.xml
|
|
6
6
|
|
|
7
|
-
Note: The most recent production release is Version 11.
|
|
7
|
+
Note: The most recent production release is Version 11.50. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to CPAN.)
|
|
9
9
|
|
|
10
|
+
June 11, 2019 - Version 11.50 (production release)
|
|
11
|
+
|
|
12
|
+
- Added a new Canon LensType and two new Sony LensTypes (thanks LibRaw)
|
|
13
|
+
- Added tiff_version and rotate_regions config files to the distribution
|
|
14
|
+
- Added two new QuickTime Keys tags and made some existing Keys unwritable
|
|
15
|
+
- Improved Composite LensID logic to make better use of EXIF LensModel
|
|
16
|
+
- Improved logic when writing BinaryData tags to allow multiple interdependent
|
|
17
|
+
tags to be written in a single command
|
|
18
|
+
- Improved -htmldump output to show names of Unknown tags
|
|
19
|
+
- Allow advanced formatting expressions to access the current tag key ($tag)
|
|
20
|
+
- Remove escaped nulls from -json string values
|
|
21
|
+
- Reverted change in ExifTool 11.38 so that Composite GPS reference directions
|
|
22
|
+
are generated again even if the EXIF versions of these tags already exist
|
|
23
|
+
- Fixed an incorrect FlashPix CodePage conversion
|
|
24
|
+
|
|
10
25
|
June 5, 2019 - Version 11.49
|
|
11
26
|
|
|
12
27
|
- Added inverse print conversion for one of the QuickTime ItemList Genre tags
|
data/bin/MANIFEST
CHANGED
|
@@ -26,6 +26,8 @@ config_files/mini0806.config
|
|
|
26
26
|
config_files/nksc.config
|
|
27
27
|
config_files/photoshop_paths.config
|
|
28
28
|
config_files/picasa_faces.config
|
|
29
|
+
config_files/rotate_regions.config
|
|
30
|
+
config_files/tiff_version.config
|
|
29
31
|
config_files/time_zone.config
|
|
30
32
|
exiftool
|
|
31
33
|
fmt_files/gpx.fmt
|
data/bin/META.json
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
"Phil Harvey (phil@owl.phy.queensu.ca)"
|
|
5
5
|
],
|
|
6
6
|
"dynamic_config" : 1,
|
|
7
|
-
"generated_by" : "ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version 2.
|
|
7
|
+
"generated_by" : "ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version 2.150010",
|
|
8
8
|
"license" : [
|
|
9
9
|
"perl_5"
|
|
10
10
|
],
|
|
11
11
|
"meta-spec" : {
|
|
12
12
|
"url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
|
|
13
|
-
"version" :
|
|
13
|
+
"version" : 2
|
|
14
14
|
},
|
|
15
15
|
"name" : "Image-ExifTool",
|
|
16
16
|
"no_index" : {
|
|
@@ -47,5 +47,6 @@
|
|
|
47
47
|
}
|
|
48
48
|
},
|
|
49
49
|
"release_status" : "stable",
|
|
50
|
-
"version" : "11.
|
|
50
|
+
"version" : "11.50",
|
|
51
|
+
"x_serialization_backend" : "JSON::PP version 4.02"
|
|
51
52
|
}
|
data/bin/META.yml
CHANGED
|
@@ -3,29 +3,30 @@ abstract: 'Read and write meta information'
|
|
|
3
3
|
author:
|
|
4
4
|
- 'Phil Harvey (phil@owl.phy.queensu.ca)'
|
|
5
5
|
build_requires:
|
|
6
|
-
ExtUtils::MakeMaker: 0
|
|
6
|
+
ExtUtils::MakeMaker: '0'
|
|
7
7
|
configure_requires:
|
|
8
|
-
ExtUtils::MakeMaker: 0
|
|
8
|
+
ExtUtils::MakeMaker: '0'
|
|
9
9
|
dynamic_config: 1
|
|
10
|
-
generated_by: 'ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version 2.
|
|
10
|
+
generated_by: 'ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version 2.150010'
|
|
11
11
|
license: perl
|
|
12
12
|
meta-spec:
|
|
13
13
|
url: http://module-build.sourceforge.net/META-spec-v1.4.html
|
|
14
|
-
version: 1.4
|
|
14
|
+
version: '1.4'
|
|
15
15
|
name: Image-ExifTool
|
|
16
16
|
no_index:
|
|
17
17
|
directory:
|
|
18
18
|
- t
|
|
19
19
|
- inc
|
|
20
20
|
recommends:
|
|
21
|
-
Archive::Zip: 0
|
|
22
|
-
Compress::Zlib: 0
|
|
23
|
-
Digest::MD5: 0
|
|
24
|
-
Digest::SHA: 0
|
|
25
|
-
IO::Compress::RawDeflate: 0
|
|
26
|
-
IO::Uncompress::RawInflate: 0
|
|
27
|
-
POSIX::strptime: 0
|
|
28
|
-
Time::HiRes: 0
|
|
21
|
+
Archive::Zip: '0'
|
|
22
|
+
Compress::Zlib: '0'
|
|
23
|
+
Digest::MD5: '0'
|
|
24
|
+
Digest::SHA: '0'
|
|
25
|
+
IO::Compress::RawDeflate: '0'
|
|
26
|
+
IO::Uncompress::RawInflate: '0'
|
|
27
|
+
POSIX::strptime: '0'
|
|
28
|
+
Time::HiRes: '0'
|
|
29
29
|
requires:
|
|
30
|
-
perl: 5.004
|
|
31
|
-
version: 11.
|
|
30
|
+
perl: '5.004'
|
|
31
|
+
version: '11.50'
|
|
32
|
+
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
|
data/bin/README
CHANGED
|
@@ -41,8 +41,8 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
41
41
|
CRM r/w | GZ r | MOI r | PMP r | WAV r
|
|
42
42
|
CRW r/w | HDP r/w | MOS r/w | PNG r/w | WDP r/w
|
|
43
43
|
CS1 r/w | HDR r | MOV r/w | PPM r/w | WEBP r
|
|
44
|
-
DCM r | HEIC r
|
|
45
|
-
DCP r/w | HEIF r
|
|
44
|
+
DCM r | HEIC r/w | MP3 r | PPT r | WEBM r
|
|
45
|
+
DCP r/w | HEIF r/w | MP4 r/w | PPTX r | WMA r
|
|
46
46
|
DCR r | HTML r | MPC r | PS r/w | WMV r
|
|
47
47
|
DFONT r | ICC r/w/c | MPG r | PSB r/w | WTV r
|
|
48
48
|
DIVX r | ICS r | MPO r/w | PSD r/w | WV r
|
|
@@ -104,8 +104,8 @@ your home directory, then you would type the following commands in a
|
|
|
104
104
|
terminal window to extract and run ExifTool:
|
|
105
105
|
|
|
106
106
|
cd ~/Desktop
|
|
107
|
-
gzip -dc Image-ExifTool-11.
|
|
108
|
-
cd Image-ExifTool-11.
|
|
107
|
+
gzip -dc Image-ExifTool-11.50.tar.gz | tar -xf -
|
|
108
|
+
cd Image-ExifTool-11.50
|
|
109
109
|
./exiftool t/images/ExifTool.jpg
|
|
110
110
|
|
|
111
111
|
Note: These commands extract meta information from one of the test images.
|
|
@@ -195,10 +195,12 @@ distribution package:
|
|
|
195
195
|
example.config - General example showing config features
|
|
196
196
|
fotoware.config - Definitions for writing Fotoware XMP tags
|
|
197
197
|
gps2utm.config - Generate UTM coordinate tags from GPS info
|
|
198
|
-
mini0806.config -
|
|
198
|
+
mini0806.config - Decode timed GPS from Mini 0806 videos
|
|
199
199
|
nksc.config - Decode tags in Nikon ViewNX NKSC files
|
|
200
200
|
photoshop_paths.config - For extracting or copying Photoshop paths
|
|
201
201
|
picasa_faces.config - Convert from Picasa to MWG/MP face regions
|
|
202
|
+
rotate_regions.config - Rotate MWG and MP region tags
|
|
203
|
+
tiff_version.config - Determine the version of a TIFF file
|
|
202
204
|
time_zone.config - Calcuate time zone from EXIF tags
|
|
203
205
|
exiftool - The exiftool application (Perl script)
|
|
204
206
|
fmt_files/ - Output formatting example files:
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
#------------------------------------------------------------------------------
|
|
2
|
+
# File: rotate_regions.config
|
|
3
|
+
#
|
|
4
|
+
# Description: User-defined Composite tag definitions to rotate MWG region tags
|
|
5
|
+
# (Metadata Working Group region, used by Picasa) and MP region tags
|
|
6
|
+
# (used by Microsoft Photo Library).
|
|
7
|
+
#
|
|
8
|
+
# Tag definitions and examples:
|
|
9
|
+
#
|
|
10
|
+
# RotateMWGRegionCW90
|
|
11
|
+
# RotateMWGRegionCW180
|
|
12
|
+
# RotateMWGRegionCW270
|
|
13
|
+
# These tags will rotate a MWG Region clockwise 90, 180, or 270 degrees.
|
|
14
|
+
# Example:
|
|
15
|
+
# exiftool -config rotate_regions.config "-RegionInfo<RotateMWGRegionCW90" FILE
|
|
16
|
+
#
|
|
17
|
+
# RotateMPRegionCW90
|
|
18
|
+
# RotateMPRegionCW180
|
|
19
|
+
# RotateMPRegionCW270
|
|
20
|
+
# These tags will rotate a MWG Region clockwise 90, 180, or 270 degrees.
|
|
21
|
+
# Example:
|
|
22
|
+
# exiftool -config rotate_regions.config "-RegionInfoMP<RotateMPRegionCW90" FILE
|
|
23
|
+
#
|
|
24
|
+
# Revisions: 2015/05/08 - Bryan K. Williams AKA StarGeek Created
|
|
25
|
+
#------------------------------------------------------------------------------
|
|
26
|
+
|
|
27
|
+
%Image::ExifTool::UserDefined = (
|
|
28
|
+
'Image::ExifTool::Composite' => {
|
|
29
|
+
RotateMWGRegionCW90 =>{
|
|
30
|
+
Require => 'RegionInfo',
|
|
31
|
+
ValueConv => q{
|
|
32
|
+
my ($rgn, @newRgns);
|
|
33
|
+
foreach $rgn (@{$val[0]{RegionList}}) {
|
|
34
|
+
my @rect = @{$$rgn{Area}}{'X','Y','W','H'};
|
|
35
|
+
my %newRgn = (
|
|
36
|
+
Area => {
|
|
37
|
+
X => 1-$rect[1],
|
|
38
|
+
Y => $rect[0],
|
|
39
|
+
W => $rect[3],
|
|
40
|
+
H => $rect[2],
|
|
41
|
+
Unit => 'normalized',
|
|
42
|
+
},
|
|
43
|
+
Name => $$rgn{Name},
|
|
44
|
+
Type => 'Face',
|
|
45
|
+
);
|
|
46
|
+
push @newRgns, \%newRgn;
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
AppliedToDimensions => {
|
|
50
|
+
W => $val[0]{AppliedToDimensions}{W},
|
|
51
|
+
H => $val[0]{AppliedToDimensions}{H},
|
|
52
|
+
Unit => $val[0]{AppliedToDimensions}{Unit},
|
|
53
|
+
},
|
|
54
|
+
RegionList => \@newRgns,
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
}, #End RotateMWGRegionCW90
|
|
58
|
+
RotateMWGRegionCW180 =>{
|
|
59
|
+
Require => 'RegionInfo',
|
|
60
|
+
ValueConv => q{
|
|
61
|
+
my ($rgn, @newRgns);
|
|
62
|
+
foreach $rgn (@{$val[0]{RegionList}}) {
|
|
63
|
+
my @rect = @{$$rgn{Area}}{'X','Y','W','H'};
|
|
64
|
+
my %newRgn = (
|
|
65
|
+
Area => {
|
|
66
|
+
X => 1-$rect[0],
|
|
67
|
+
Y => 1-$rect[1],
|
|
68
|
+
W => $rect[2],
|
|
69
|
+
H => $rect[3],
|
|
70
|
+
Unit => 'normalized',
|
|
71
|
+
},
|
|
72
|
+
Name => $$rgn{Name},
|
|
73
|
+
Type => 'Face',
|
|
74
|
+
);
|
|
75
|
+
push @newRgns, \%newRgn;
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
AppliedToDimensions => {
|
|
79
|
+
W => $val[0]{AppliedToDimensions}{W},
|
|
80
|
+
H => $val[0]{AppliedToDimensions}{H},
|
|
81
|
+
Unit => $val[0]{AppliedToDimensions}{Unit},
|
|
82
|
+
},
|
|
83
|
+
RegionList => \@newRgns,
|
|
84
|
+
};
|
|
85
|
+
},
|
|
86
|
+
}, #End RotateMWGRegionCW180
|
|
87
|
+
RotateMWGRegionCW270 =>{
|
|
88
|
+
Require => 'RegionInfo',
|
|
89
|
+
ValueConv => q{
|
|
90
|
+
my ($rgn, @newRgns);
|
|
91
|
+
foreach $rgn (@{$val[0]{RegionList}}) {
|
|
92
|
+
my @rect = @{$$rgn{Area}}{'X','Y','W','H'};
|
|
93
|
+
my %newRgn = (
|
|
94
|
+
Area => {
|
|
95
|
+
X => $rect[1],
|
|
96
|
+
Y => 1-$rect[0],
|
|
97
|
+
W => $rect[3],
|
|
98
|
+
H => $rect[2],
|
|
99
|
+
Unit => 'normalized',
|
|
100
|
+
},
|
|
101
|
+
Name => $$rgn{Name},
|
|
102
|
+
Type => 'Face',
|
|
103
|
+
);
|
|
104
|
+
push @newRgns, \%newRgn;
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
AppliedToDimensions => {
|
|
108
|
+
W => $val[0]{AppliedToDimensions}{W},
|
|
109
|
+
H => $val[0]{AppliedToDimensions}{H},
|
|
110
|
+
Unit => $val[0]{AppliedToDimensions}{Unit},
|
|
111
|
+
},
|
|
112
|
+
RegionList => \@newRgns,
|
|
113
|
+
};
|
|
114
|
+
},
|
|
115
|
+
}, #End RotateMWGRegionCW270
|
|
116
|
+
RotateMPRegionCW90=>{
|
|
117
|
+
Require => 'RegionInfoMP',
|
|
118
|
+
ValueConv => q{
|
|
119
|
+
my ($rgn, @newRgns);
|
|
120
|
+
foreach $rgn (@{$val[0]{Regions}}) {
|
|
121
|
+
my @rect = split /\s*,\s*/, $$rgn{Rectangle};
|
|
122
|
+
my $temp = $rect[0];
|
|
123
|
+
$rect[0] = 1-$rect[1]-$rect[3];
|
|
124
|
+
$rect[1] = $temp;
|
|
125
|
+
($rect[2], $rect[3]) = ($rect[3],$rect[2]); #Swap W and H
|
|
126
|
+
push @newRgns, {
|
|
127
|
+
PersonDisplayName => $$rgn{PersonDisplayName},
|
|
128
|
+
Rectangle => join(', ', @rect),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
return { Regions => \@newRgns };
|
|
132
|
+
}
|
|
133
|
+
}, #end RotateMPRegionCW90
|
|
134
|
+
RotateMPRegionCW180=>{
|
|
135
|
+
Require => 'RegionInfoMP',
|
|
136
|
+
ValueConv => q{
|
|
137
|
+
my ($rgn, @newRgns);
|
|
138
|
+
foreach $rgn (@{$val[0]{Regions}}) {
|
|
139
|
+
my @rect = split /\s*,\s*/, $$rgn{Rectangle};
|
|
140
|
+
my $tempX = $rect[0];
|
|
141
|
+
my $tempY = $rect[1];
|
|
142
|
+
$rect[0] = 1-$tempX-$rect[2];
|
|
143
|
+
$rect[1] = 1-$tempY-$rect[3];
|
|
144
|
+
push @newRgns, {
|
|
145
|
+
PersonDisplayName => $$rgn{PersonDisplayName},
|
|
146
|
+
Rectangle => join(', ', @rect),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return { Regions => \@newRgns };
|
|
150
|
+
}
|
|
151
|
+
}, #end RotateMPRegionCW180
|
|
152
|
+
RotateMPRegionCW270=>{
|
|
153
|
+
Require => 'RegionInfoMP',
|
|
154
|
+
ValueConv => q{
|
|
155
|
+
my ($rgn, @newRgns);
|
|
156
|
+
foreach $rgn (@{$val[0]{Regions}}) {
|
|
157
|
+
my @rect = split /\s*,\s*/, $$rgn{Rectangle};
|
|
158
|
+
my $temp = $rect[1];
|
|
159
|
+
$rect[1] = 1-$rect[0]-$rect[2];
|
|
160
|
+
$rect[0] = $temp;
|
|
161
|
+
($rect[2], $rect[3]) = ($rect[3],$rect[2]); #Swap W and H
|
|
162
|
+
push @newRgns, {
|
|
163
|
+
PersonDisplayName => $$rgn{PersonDisplayName},
|
|
164
|
+
Rectangle => join(', ', @rect),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
return { Regions => \@newRgns };
|
|
168
|
+
}
|
|
169
|
+
}, #end RotateMPRegionCW270
|
|
170
|
+
},
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
1; #end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
#------------------------------------------------------------------------------
|
|
2
|
+
# File: tiff_version.config
|
|
3
|
+
#
|
|
4
|
+
# Description: This config file contains the definition for a Composite
|
|
5
|
+
# TIFFVersion tag used to determine the version of a TIFF file
|
|
6
|
+
#
|
|
7
|
+
# Usage: exiftool -config tiff_version.config -tiffversion DIR
|
|
8
|
+
#
|
|
9
|
+
# Requires: ExifTool version 11.50 or later
|
|
10
|
+
#
|
|
11
|
+
# Revisions: 2019/06/06 - Bryan K. Williams (aka StarGeek) Created
|
|
12
|
+
# 2019/06/07 - P. Harvey added test of TIFF format types
|
|
13
|
+
#
|
|
14
|
+
# References: http://jhove.openpreservation.org/modules/tiff/#profiles
|
|
15
|
+
#------------------------------------------------------------------------------
|
|
16
|
+
|
|
17
|
+
# Checks if at least one the values passed are defined.
|
|
18
|
+
sub has_defined {
|
|
19
|
+
for my $i ( @_ ) {
|
|
20
|
+
return 1 if defined $i;
|
|
21
|
+
}
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
%Image::ExifTool::UserDefined = (
|
|
26
|
+
'Image::ExifTool::Composite' => {
|
|
27
|
+
TIFFVersion => {
|
|
28
|
+
Require => {
|
|
29
|
+
0 => 'FileType'
|
|
30
|
+
},
|
|
31
|
+
Desire => {
|
|
32
|
+
# Version 5
|
|
33
|
+
1 => 'EXIF:Artist', # Artist (315/0x013b)
|
|
34
|
+
2 => 'EXIF:ColorMap', # ColorMap (320/0x0140)
|
|
35
|
+
3 => 'EXIF:ModifyDate', # DateTime (306/0x0132) Called DateTime by EXIF spec, ModifyDate by exiftool
|
|
36
|
+
4 => 'EXIF:HostComputer', # HostComputer (316/0x013c)
|
|
37
|
+
5 => 'EXIF:SubfileType', # NewSubfileType (254/0x00fe) Called NewSubfileType by TIFF spec, SubfileType by exiftool
|
|
38
|
+
6 => 'EXIF:Predictor', # Predictor (317/0x013d)
|
|
39
|
+
7 => 'EXIF:PrimaryChromaticities', # PrimaryChromaticities (319/0x013f)
|
|
40
|
+
8 => 'EXIF:Software', # Software (305/0x0131)
|
|
41
|
+
9 => 'EXIF:WhitePoint', # WhitePoint (318/0x013e)
|
|
42
|
+
# Version 6
|
|
43
|
+
10 => 'EXIF:Copyright', # Copyright (33432/0x8298)
|
|
44
|
+
11 => 'EXIF:DotRange', # DotRange (336/0x0150)
|
|
45
|
+
12 => 'EXIF:ExtraSamples', # ExtraSamples (338/0x0152)
|
|
46
|
+
13 => 'EXIF:HalftoneHints', # HalftoneHints (321/0x0141)
|
|
47
|
+
14 => 'EXIF:InkNames', # InkNames (333/0x014d)
|
|
48
|
+
15 => 'EXIF:InkSet', # InkSet (332/0x014c)
|
|
49
|
+
16 => 'EXIF:JPEGACTables', # JPEGACTables (521/0x0209)
|
|
50
|
+
17 => 'EXIF:JPEGDCTables', # JPEGDCTables (520/0x0208)
|
|
51
|
+
18 => 'EXIF:ThumbnailOffset', # JPEGInterchangeFormat (513/0x0201)
|
|
52
|
+
19 => 'EXIF:ThumbnailLength ', # JPEGInterchangeFormatLength (514/0x0202)
|
|
53
|
+
20 => 'EXIF:JPEGLosslessPredictors', # JPEGLosslessPredictors (517/0x0205)
|
|
54
|
+
21 => 'EXIF:JPEGPointTransforms', # JPEGPointTransforms (518/0x0206)
|
|
55
|
+
22 => 'EXIF:JPEGProc', # JPEGProc (512/0x0200)
|
|
56
|
+
23 => 'EXIF:JPEGRestartInterval', # JPEGRestartInterval (515/0x0203)
|
|
57
|
+
24 => 'EXIF:JPEGQTables', # JPEGQTables (519/0x0207)
|
|
58
|
+
25 => 'EXIF:NumberofInks', # NumberOfInks (334/0x014e)
|
|
59
|
+
26 => 'EXIF:ReferenceBlackWhite', # ReferenceBlackWhite (532/0x0214)
|
|
60
|
+
27 => 'EXIF:SampleFormat', # SampleFormat (339/0x0153)
|
|
61
|
+
28 => 'EXIF:SMinSampleValue', # SMinSampleValue (340/0x0154)
|
|
62
|
+
29 => 'EXIF:SMaxSampleValue', # SMaxSampleValue (341/0x0155)
|
|
63
|
+
30 => 'EXIF:TargetPrinter', # TargetPrinter (337/0x0151)
|
|
64
|
+
31 => 'EXIF:TileLength', # TileLength (323/0x0143)
|
|
65
|
+
32 => 'EXIF:TileOffsets', # TileOffsets (324/0x0144)
|
|
66
|
+
33 => 'EXIF:TileWidth', # TileWidth (322/0x0142)
|
|
67
|
+
34 => 'EXIF:TileByteCounts', # TileByteCounts (325/0x0145)
|
|
68
|
+
35 => 'EXIF:TransferRange', # TransferRange (342/0x0156)
|
|
69
|
+
36 => 'EXIF:YCbCrCoefficients', # YCbCrCoefficients (529/0x0211)
|
|
70
|
+
37 => 'EXIF:YCbCrPositioning', # YCbCrPositioning (531/0x0213)
|
|
71
|
+
38 => 'EXIF:YCbCrSubSampling', # YCbCrSubSampling (530/0x0212)
|
|
72
|
+
# Other tags to check
|
|
73
|
+
39 => 'EXIF:PhotometricInterpretation', # PhotometricInterpretation (262/0x0106)
|
|
74
|
+
40 => 'EXIF:Compression', # Compression (259/0x0103)
|
|
75
|
+
},
|
|
76
|
+
ValueConv => q{
|
|
77
|
+
if ($val[0] ne 'TIFF') {
|
|
78
|
+
return undef;
|
|
79
|
+
}
|
|
80
|
+
unless ($$self{SaveFormat}) {
|
|
81
|
+
return '<you must use the API SaveFormat option and ExifTool 11.50 or later>';
|
|
82
|
+
}
|
|
83
|
+
foreach (qw(int8s undef int16s int32s rational64s float double)) {
|
|
84
|
+
return '6.0' if $$self{SaveFormat}{$_};
|
|
85
|
+
}
|
|
86
|
+
if ( $val[39]=~/^(?:C(?:IELab|MYK)|YCbCr)$/ or $val[40] eq 'JPEG (old-style)' or has_defined(@val[10..38]) ) {
|
|
87
|
+
return '6.0';
|
|
88
|
+
}
|
|
89
|
+
if ($val[39]=~/^(?:Transparency Mask|RGB Palette)$/ or $val[40] eq 'LZW' or has_defined(@val[1..9]) ) {
|
|
90
|
+
return '5.0';
|
|
91
|
+
}
|
|
92
|
+
return '4.0';
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
# A couple of shortcuts to test for the existance of certain tags
|
|
99
|
+
%Image::ExifTool::UserDefined::Shortcuts = (
|
|
100
|
+
TiffVersion5Tags => [
|
|
101
|
+
'EXIF:Artist', 'EXIF:ColorMap', 'EXIF:ModifyDate', 'EXIF:HostComputer', 'EXIF:SubfileType',
|
|
102
|
+
'EXIF:Predictor', 'EXIF:PrimaryChromaticities', 'EXIF:Software', 'EXIF:WhitePoint',
|
|
103
|
+
],
|
|
104
|
+
TiffVersion6Tags => [
|
|
105
|
+
'EXIF:Copyright', 'EXIF:DotRange', 'EXIF:ExtraSamples', 'EXIF:HalftoneHints',
|
|
106
|
+
'EXIF:InkNames', 'EXIF:InkSet', 'EXIF:JPEGACTables', 'EXIF:JPEGDCTables',
|
|
107
|
+
'EXIF:ThumbnailOffset', 'EXIF:ThumbnailLength ', 'EXIF:JPEGLosslessPredictors',
|
|
108
|
+
'EXIF:JPEGPointTransforms', 'EXIF:JPEGProc', 'EXIF:JPEGRestartInterval',
|
|
109
|
+
'EXIF:JPEGQTables', 'EXIF:NumberofInks', 'EXIF:ReferenceBlackWhite', 'EXIF:SampleFormat',
|
|
110
|
+
'EXIF:SMinSampleValue', 'EXIF:SMaxSampleValue', 'EXIF:TargetPrinter', 'EXIF:TileLength',
|
|
111
|
+
'EXIF:TileOffsets', 'EXIF:TileWidth', 'EXIF:TileByteCounts', 'EXIF:TransferRange',
|
|
112
|
+
'EXIF:YCbCrCoefficients', 'EXIF:YCbCrPositioning', 'EXIF:YCbCrSubSampling',
|
|
113
|
+
],
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
# Must set undocumented SaveFormat option to provide access to the tag format types
|
|
117
|
+
%Image::ExifTool::UserDefined::Options = (
|
|
118
|
+
SaveFormat => 1,
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
1; #end
|