exiftool-vendored.exe 12.78.0 → 12.80.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.
Files changed (40) hide show
  1. package/bin/exiftool_files/Changes +36 -3
  2. package/bin/exiftool_files/README +2 -2
  3. package/bin/exiftool_files/config_files/acdsee.config +37 -57
  4. package/bin/exiftool_files/config_files/example.config +6 -0
  5. package/bin/exiftool_files/exiftool.pl +41 -19
  6. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +3 -0
  7. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/cs.pm +978 -0
  8. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/de.pm +1975 -0
  9. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/en_ca.pm +44 -0
  10. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/en_gb.pm +124 -0
  11. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/es.pm +2921 -0
  12. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/fi.pm +1116 -0
  13. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/fr.pm +3171 -0
  14. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/it.pm +2750 -0
  15. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/ja.pm +10256 -0
  16. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/ko.pm +4499 -0
  17. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/nl.pm +1270 -0
  18. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/pl.pm +3019 -0
  19. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/ru.pm +18220 -0
  20. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/sk.pm +441 -0
  21. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/sv.pm +714 -0
  22. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/tr.pm +452 -0
  23. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/zh_cn.pm +2225 -0
  24. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/zh_tw.pm +72 -0
  25. package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat +0 -0
  26. package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.pm +678 -140
  27. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +7 -0
  28. package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +7 -2
  29. package/bin/exiftool_files/lib/Image/ExifTool/OpenEXR.pm +17 -17
  30. package/bin/exiftool_files/lib/Image/ExifTool/README +6 -5
  31. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +2547 -2517
  32. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +72 -1
  33. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +1 -0
  34. package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +1 -1
  35. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +50 -0
  36. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +17 -2
  37. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +64 -0
  38. package/bin/exiftool_files/lib/Image/ExifTool.pm +165 -88
  39. package/bin/exiftool_files/lib/Image/ExifTool.pod +20 -7
  40. package/package.json +2 -2
@@ -7,6 +7,41 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 12.76. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Mar. 19, 2024 - Version 12.80
11
+
12
+ - Added GeolocationFeatureCode tag
13
+ - Added XMP-acdsee-rs tags and a new XMP-xmpDM tag
14
+ - Added ACDSeeRegion2MWGRegion conversion to config_files/acdsee.config
15
+ - Added GPSAltitudeRef to XMP-iptcExt LocationDetails structure
16
+ - Added a couple of new FujiFilm tags and a new CropMode value
17
+ - Added conversion for XMP-aux:ApproximateFocusDistance "infinity"
18
+ - Improved Geolocation regular expressions to allow negative matches
19
+ - Improved accuracy of Geolocation distance/bearing calculations
20
+ - Changed structure of Geolocation database (now version 1.02)
21
+ - Minor change to key format for user-defined Geolocation name translations
22
+ - Fixed case/spacing of "C2PA" in some CBOR tag descriptions
23
+ - Fixed bug extracting binary data from EXR files
24
+ - API Changes:
25
+ - Added GeolocFeature option
26
+
27
+ Mar. 15, 2024 - Version 12.79
28
+
29
+ - Improvements to new Geolocation feature:
30
+ - Added reverse Geolocation ability (obtain GPS coordinates from city
31
+ name), with support for regular expressions
32
+ - Added -listgeo option to list the Geolocation database
33
+ - Added the ability to include user-defined cities in the Geolocation
34
+ database
35
+ - Added the ability to write XMP-iptcExt LocationShown tags using Geolocate
36
+ feature
37
+ - Added the ability to specify which tags to read from file for the API
38
+ Geolocation option
39
+ - Added language translations for Geolocation names
40
+ - Increased resolution of Geolocation GPS positions and stored populations
41
+ - API Changes:
42
+ - Save necessary data members to allow GetInfo to be accessed by
43
+ user-defined tags
44
+
10
45
  Mar. 5, 2024 - Version 12.78 - "Geolocation"
11
46
 
12
47
  - Added new Geolocation feature and write-only Geolocate tag
@@ -32,9 +67,7 @@ Mar. 5, 2024 - Version 12.78 - "Geolocation"
32
67
  - Fixed issue where some tags from alternate files using the -fileNUM option
33
68
  weren't generated as requested
34
69
  - API Changes:
35
- - Added Geolocation,
36
- GeolocMaxDist and
37
- GeolocMinPop API options
70
+ - Added Geolocation, GeolocMaxDist and GeolocMinPop API options
38
71
 
39
72
  Feb. 16, 2024 - Version 12.77
40
73
 
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
109
109
  terminal window to extract and run ExifTool:
110
110
 
111
111
  cd ~/Desktop
112
- gzip -dc Image-ExifTool-12.78.tar.gz | tar -xf -
113
- cd Image-ExifTool-12.78
112
+ gzip -dc Image-ExifTool-12.80.tar.gz | tar -xf -
113
+ cd Image-ExifTool-12.80
114
114
  ./exiftool t/images/ExifTool.jpg
115
115
 
116
116
  Note: These commands extract meta information from one of the test images.
@@ -41,7 +41,8 @@
41
41
  # type tags to ACDSee regions.
42
42
  # MPRegion2ACDSeeRegion : Converts a Microsoft RegionInfoMP
43
43
  # IPTCRegion2ACDSeeRegion : Converts an IPTC ImageRegion
44
- # MWGRegion2ACDSeeRegion : Converts a MWG RegionInfo
44
+ # MWGRegion2ACDSeeRegion : Converts from a MWG RegionInfo
45
+ # ACDSeeRegion2MWGRegion : Converts to a MWG RegionInfo
45
46
  #
46
47
  # Usage: To set individual tags
47
48
  # exiftool -config acdsee.config -ACDSEETAG=VALUE FILE ...
@@ -52,6 +53,8 @@
52
53
  # exiftool -config acdsee.config "-RegionInfoACDSee<IPTCRegion2ACDSeeRegion" File ...
53
54
  # To convert MWG Regions to ACDSee regions
54
55
  # exiftool -config acdsee.config "-RegionInfoACDSee<MWGRegion2ACDSeeRegion" File ...
56
+ # To convert ACDSee Regions to MWG regions
57
+ # exiftool -config acdsee.config "-RegionInfo<ACDSeeRegion2MWGRegion" File ...
55
58
  #
56
59
  # Requires: ExifTool version 10.28 or later
57
60
  #
@@ -64,45 +67,12 @@
64
67
  # "RegionInfoACDSeeAppliedToDimensions*" -> "ACDSeeRegionAppliedToDimensions*"
65
68
  # "RegionInfoACDSeeRegionList* -> "ACDSeeRegion*"
66
69
  # 2022/10/03 - PH Set group name properly to XMP-acdsee-rs
70
+ # 2024/03/19 - PH Moved XMP-acdsee-rs tags into the standard distribution,
71
+ # and added ACDSeeRegion2MWGRegion conversion
67
72
  #------------------------------------------------------------------------------
68
73
  use Data::Dumper;
69
74
 
70
- my %sACDSeeDimensions = (
71
- STRUCT_NAME => 'ACDSee Dimensions',
72
- NAMESPACE => {'acdsee-stDim' => 'http://ns.acdsee.com/sType/Dimensions#'},
73
- 'w' => { Writable => 'real' },
74
- 'h' => { Writable => 'real' },
75
- 'unit' => { },
76
- );
77
-
78
- my %sACDSeeArea = (
79
- STRUCT_NAME => 'ACDSee Area',
80
- NAMESPACE => { 'acdsee-stArea' => 'http://ns.acdsee.com/sType/Area#' },
81
- 'x' => { Writable => 'real' },
82
- 'y' => { Writable => 'real' },
83
- w => { Writable => 'real' },
84
- h => { Writable => 'real' },
85
- );
86
-
87
- my %sACDSeeRegionStruct = (
88
- STRUCT_NAME => 'ACDSee Regions',
89
- NAMESPACE => { 'acdsee-rs' => 'http://ns.acdsee.com/regions/' },
90
- ALGArea => { Struct => \%sACDSeeArea },
91
- DLYArea => { Struct => \%sACDSeeArea },
92
- Name => { },
93
- NameAssignType => { },
94
- Type => { },
95
- );
96
-
97
75
  %Image::ExifTool::UserDefined = (
98
- # new XMP namespaces for ACDSee regions
99
- 'Image::ExifTool::XMP::Main' => {
100
- 'acdsee-rs' => { # <-- must be the same as the NAMESPACE prefix
101
- SubDirectory => {
102
- TagTable => 'Image::ExifTool::UserDefined::ACDSeeRegions'
103
- },
104
- },
105
- },
106
76
  'Image::ExifTool::Composite' => {
107
77
  # create an ACDSee RegionInfo structure from a Microsoft RegionInfoMP structure
108
78
  MPRegion2ACDSeeRegion => {
@@ -176,7 +146,7 @@ my %sACDSeeRegionStruct = (
176
146
  },
177
147
  },
178
148
 
179
- # create an MWG RegionInfo structure from an IPTC ImageRegion list
149
+ # create an ACDSee RegionInfo structure from an MWG RegionInfo structure
180
150
  MWGRegion2ACDSeeRegion => {
181
151
  Require => {
182
152
  0 => 'RegionInfo',
@@ -207,29 +177,39 @@ my %sACDSeeRegionStruct = (
207
177
  }
208
178
  },
209
179
  },
210
- ####
211
- },
212
- );
213
180
 
214
- %Image::ExifTool::UserDefined::ACDSeeRegions = (
215
- GROUPS => { 0 => 'XMP', 1 => 'XMP-acdsee-rs', 2 => 'Image' },
216
- NAMESPACE => { 'acdsee-rs' => 'http://ns.acdsee.com/regions/' },
217
- WRITABLE => 'string', # (default to string-type tags)
218
- Regions => {
219
- Name => 'RegionInfoACDSee',
220
- FlatName => 'ACDSee',
221
- # the "Struct" entry defines the structure fields
222
- Struct => {
223
- # optional structure name (used for warning messages only)
224
- STRUCT_NAME => 'ACDSee RegionInfo',
225
- RegionList => {
226
- FlatName => 'Region',
227
- Struct => \%sACDSeeRegionStruct,
228
- List => 'Bag',
181
+ # create an MWG RegionInfo structure from an ACDSee RegionInfo
182
+ ACDSeeRegion2MWGRegion => {
183
+ Require => {
184
+ 0 => 'RegionInfoACDSee',
185
+ 1 => 'ImageWidth',
186
+ 2 => 'ImageHeight',
187
+ },
188
+ ValueConv => q{
189
+ my ($rgn, @newRgns);
190
+ my %newRgn;
191
+ foreach $rgn (@{$val[0]{RegionList}}) {
192
+ next unless $$rgn{Area} or defined $$rgn{Name};
193
+ my %newRgn;
194
+ if ($$rgn{DLYArea}) {
195
+ $newRgn{Area} = {
196
+ 'X' => $$rgn{DLYArea}{'X'},
197
+ 'Y' => $$rgn{DLYArea}{'Y'},
198
+ 'W' => $$rgn{DLYArea}{'W'},
199
+ 'H' => $$rgn{DLYArea}{'H'},
200
+ };
201
+ };
202
+ $newRgn{Name} = $$rgn{Name} if defined $$rgn{Name};
203
+ $newRgn{'Type'} = $$rgn{'Type'} if defined $$rgn{'Type'};
204
+ push @newRgns, \%newRgn;
205
+ }
206
+ return {
207
+ 'AppliedToDimensions' => $val[0]{'AppliedToDimensions'},
208
+ RegionList => \@newRgns,
209
+ }
229
210
  },
230
- AppliedToDimensions => {
231
- FlatName => 'RegionAppliedToDimensions',Struct => \%sACDSeeDimensions },
232
211
  },
212
+ ####
233
213
  },
234
214
  );
235
215
 
@@ -362,5 +362,11 @@ $Image::ExifTool::QuickTime::Keys{PREFERRED} = 3;
362
362
  '-i', 'HIDDEN', # ignore hidden files by default (names beginning with ".")
363
363
  );
364
364
 
365
+ # Add user-defined cities to the Geolocation lookup
366
+ @Image::ExifTool::UserDefined::Geolocation = (
367
+ # (city,region,country code,country,timezone,population,lat,lon)
368
+ ['Sinemorets','Burgas','BG','Bulgaria','Europe/Sofia',400,42.06115,27.97833],
369
+ );
370
+
365
371
  #------------------------------------------------------------------------------
366
372
  1; #end
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '12.78';
14
+ my $version = '12.80';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -683,7 +683,7 @@ for (;;) {
683
683
  next;
684
684
  }
685
685
  my $a = lc $_;
686
- if (/^list([wfrdx]|wf|g(\d*))?$/i) {
686
+ if (/^list([wfrdx]|wf|g(\d*)|geo)?$/i) {
687
687
  $pass or push @nextPass, "-$_";
688
688
  my $type = lc($1 || '');
689
689
  if (not $type or $type eq 'w' or $type eq 'x') {
@@ -732,6 +732,23 @@ for (;;) {
732
732
  PrintTagList('Recognized file extensions', GetFileType(undef, 0));
733
733
  } elsif ($type eq 'd') {
734
734
  PrintTagList('Deletable groups', GetDeleteGroups());
735
+ } elsif ($type eq 'geo') {
736
+ require Image::ExifTool::Geolocation;
737
+ my ($i, $entry);
738
+ print "Geolocation database:\n" unless $quiet;
739
+ print "City,Region,Subregion,CountryCode,Country,TimeZone,FeatureCode,Population,Latitude,Longitude\n";
740
+ Image::ExifTool::Geolocation::SortDatabase('City') if $sortOpt;
741
+ my $minPop = $mt->Options('GeolocMinPop');
742
+ my $feature = $mt->Options('GeolocFeature') || '';
743
+ my $neg = $feature =~ s/^-//;
744
+ my %fcodes = map { lc($_) => 1 } split /\s*,\s*/, $feature;
745
+ for ($i=0; ; ++$i) {
746
+ my @entry = Image::ExifTool::Geolocation::GetEntry($i,$langOpt) or last;
747
+ next if $minPop and $entry[7] < $minPop;
748
+ next if %fcodes and $neg ? $fcodes{lc $entry[6]} : not $fcodes{lc $entry[6]};
749
+ $_ = defined $_ ? $mt->Decode($_, 'UTF8') : '' foreach @entry[0,1,2,4];
750
+ print join(',', @entry), "\n";
751
+ }
735
752
  } else { # 'g(\d*)'
736
753
  # list all groups in specified family
737
754
  my $family = $2 || 0;
@@ -1122,7 +1139,7 @@ for (;;) {
1122
1139
  } else {
1123
1140
  $pass or push(@nextPass, '-lang'), next;
1124
1141
  }
1125
- my $langs = "Available languages:\n";
1142
+ my $langs = $quiet ? '' : "Available languages:\n";
1126
1143
  $langs .= " $_ - $Image::ExifTool::langName{$_}\n" foreach @Image::ExifTool::langs;
1127
1144
  $langs =~ tr/_/-/; # display dashes instead of underlines in language codes
1128
1145
  $langs = Image::ExifTool::HTML::EscapeHTML($langs) if $escapeHTML;
@@ -1438,11 +1455,11 @@ if ($useMWG and not defined $mt->Options('CharsetEXIF')) {
1438
1455
  if (not @files and not $outOpt and not @newValues) {
1439
1456
  my $loc = $mt->Options('Geolocation');
1440
1457
  # use undocumented feature to input JSON file directly from command line
1441
- $loc and $loc =~ /,/ and push(@files, qq(\@JSON:{})), $geoOnly = 1;
1458
+ $loc and $loc ne '1' and push(@files, qq(\@JSON:{})), $geoOnly = 1;
1442
1459
  }
1443
1460
 
1444
1461
  # print help
1445
- unless ((@tags and not $outOpt) or @files or @newValues) {
1462
+ unless ((@tags and not $outOpt) or @files or @newValues or $geoOnly) {
1446
1463
  if ($doGlob and $doGlob == 2) {
1447
1464
  Warn "No matching files\n";
1448
1465
  $rtnVal = 1;
@@ -2128,7 +2145,7 @@ sub GetImageInfo($$)
2128
2145
  # read JSON file from command line
2129
2146
  my $dat = $2;
2130
2147
  $info = $et->ImageInfo(\$dat, \@foundTags);
2131
- if ($geoOnly) { /^Geolocation/ or delete $$info{$_} foreach keys %$info }
2148
+ if ($geoOnly) { /^Geolocation/ or delete $$info{$_} foreach keys %$info; $file = ' ' }
2132
2149
  }
2133
2150
  if (defined $deleteOrig) {
2134
2151
  Progress($vout, "======== $file") if defined $verbose;
@@ -4656,7 +4673,7 @@ SYNOPSIS
4656
4673
  *FILE*...
4657
4674
 
4658
4675
  Other
4659
- exiftool [ -ver | -list[w|f|r|wf|g[*NUM*]|d|x] ]
4676
+ exiftool [ -ver | -list[w|f|r|wf|g[*NUM*]|d|x|geo] ]
4660
4677
 
4661
4678
  For specific examples, see the EXAMPLES sections below.
4662
4679
 
@@ -5663,7 +5680,7 @@ OPTIONS
5663
5680
 
5664
5681
  produces output like this:
5665
5682
 
5666
- -- Generated by ExifTool 12.78 --
5683
+ -- Generated by ExifTool 12.80 --
5667
5684
  File: a.jpg - 2003:10:31 15:44:19
5668
5685
  (f/5.6, 1/60s, ISO 100)
5669
5686
  File: b.jpg - 2006:05:23 11:57:38
@@ -6428,21 +6445,25 @@ OPTIONS
6428
6445
  This option is used to prevent the command window from closing when
6429
6446
  run as a Windows drag and drop application.
6430
6447
 
6431
- -list, -listw, -listf, -listr, -listwf, -listg[*NUM*], -listd, -listx
6448
+ -list, -listw, -listf, -listr, -listwf, -listg[*NUM*], -listd, -listx,
6449
+ -listgeo
6432
6450
  Print a list of all valid tag names (-list), all writable tag names
6433
6451
  (-listw), all supported file extensions (-listf), all recognized
6434
6452
  file extensions (-listr), all writable file extensions (-listwf),
6435
6453
  all tag groups [in a specified family] (-listg[*NUM*]), all
6436
- deletable tag groups (-listd), or an XML database of tag details
6437
- including language translations (-listx). The -list, -listw and
6438
- -listx options may be followed by an additional argument of the
6439
- form "-GROUP:All" to list only tags in a specific group, where
6440
- "GROUP" is one or more family 0-2 group names (excepting EXIF IFD
6441
- groups) separated by colons. With -listg, *NUM* may be given to
6442
- specify the group family, otherwise family 0 is assumed. The -l
6443
- option may be combined with -listf, -listr or -listwf to add file
6444
- descriptions to the list. The -lang option may be combined with
6445
- -listx to output descriptions in a single language. Here are some
6454
+ deletable tag groups (-listd), an XML database of tag details
6455
+ including language translations (-listx), or the Geolocation
6456
+ database (-listgeo). The -list, -listw and -listx options may be
6457
+ followed by an additional argument of the form "-GROUP:All" to list
6458
+ only tags in a specific group, where "GROUP" is one or more family
6459
+ 0-2 group names (excepting EXIF IFD groups) separated by colons.
6460
+ With -listg, *NUM* may be given to specify the group family,
6461
+ otherwise family 0 is assumed. The -l option may be combined with
6462
+ -listf, -listr or -listwf to add file descriptions to the list. The
6463
+ -lang option may be combined with -listx to output descriptions in
6464
+ a single language, and the -sort and/or -lang options may be
6465
+ combined with -listgeo. Also, the API GeolocMinPop and
6466
+ GeolocFeature options apply to the -listgeo output. Here are some
6446
6467
  examples:
6447
6468
 
6448
6469
  -list # list all tag names
@@ -6456,6 +6477,7 @@ OPTIONS
6456
6477
  -listd # list all deletable groups
6457
6478
  -listx -EXIF:All # list database of EXIF tags in XML format
6458
6479
  -listx -XMP:All -s # list short XML database of XMP tags
6480
+ -listgeo -lang de # list geolocation database in German
6459
6481
 
6460
6482
  When combined with -listx, the -s option shortens the output by
6461
6483
  omitting the descriptions and values (as in the last example
@@ -528,6 +528,7 @@ my %faceCategories = (
528
528
  1 => 'Full-frame on GFX', #IB
529
529
  2 => 'Sports Finder Mode', # (mechanical shutter)
530
530
  4 => 'Electronic Shutter 1.25x Crop', # (continuous high)
531
+ 8 => 'Digital Tele-Conv', #forum15784
531
532
  },
532
533
  },
533
534
  0x104e => { #forum10800 (X-Pro3)
@@ -549,6 +550,8 @@ my %faceCategories = (
549
550
  3 => 'Electronic Front Curtain', #10
550
551
  },
551
552
  },
553
+ 0x1051 => { Name => 'CropTopLeft', Writable => 'int32u' }, #forum15784
554
+ 0x1052 => { Name => 'CropCenter', Writable => 'int32u' }, #forum15784
552
555
  # 0x1100 - This may not work well for newer cameras (ref forum12682)
553
556
  0x1100 => [{
554
557
  Name => 'AutoBracketing',