exiftool-vendored.pl 12.84.0 → 12.85.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.
- package/bin/Changes +25 -3
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +46 -46
- package/bin/build_geolocation +91 -18
- package/bin/exiftool +49 -47
- package/bin/lib/Image/ExifTool/Apple.pm +2 -1
- package/bin/lib/Image/ExifTool/Canon.pm +11 -2
- package/bin/lib/Image/ExifTool/DPX.pm +3 -3
- package/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/lib/Image/ExifTool/Geolocation.pm +12 -8
- package/bin/lib/Image/ExifTool/ID3.pm +28 -6
- package/bin/lib/Image/ExifTool/Nikon.pm +19 -1
- package/bin/lib/Image/ExifTool/Pentax.pm +64 -13
- package/bin/lib/Image/ExifTool/QuickTime.pm +23 -9
- package/bin/lib/Image/ExifTool/TagLookup.pm +3547 -3539
- package/bin/lib/Image/ExifTool/TagNames.pod +38 -9
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +2 -1
- package/bin/lib/Image/ExifTool/Writer.pl +1 -2
- package/bin/lib/Image/ExifTool/XMP.pm +2 -0
- package/bin/lib/Image/ExifTool.pm +15 -5
- package/bin/lib/Image/ExifTool.pod +65 -57
- package/bin/perl-Image-ExifTool.spec +45 -45
- package/bin/pp_build_exe.args +4 -4
- package/package.json +1 -1
package/bin/Changes
CHANGED
|
@@ -7,12 +7,34 @@ 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
|
+
May 21, 2024 - Version 12.85
|
|
11
|
+
|
|
12
|
+
- Added GeolocationFeatureType tag
|
|
13
|
+
- Added read support for Nikon NKA and NXD adjustment files
|
|
14
|
+
- Added a new Apple:ImageCaptureType value, and changed another one
|
|
15
|
+
- Decode a few new Pentax tags
|
|
16
|
+
- Decode a few new Canon tags
|
|
17
|
+
- Decode some Ricoh Exif metadata from MOV videos
|
|
18
|
+
- Extract ID3 UserDefinedText and UserDefinedURL tags by name
|
|
19
|
+
- Make $advFmtSelf available for user-defined helper functions
|
|
20
|
+
- Documented API GeoDir pseudo option feature
|
|
21
|
+
- Tolerate pad byte at end of HIF file when writing
|
|
22
|
+
- Raised priority of FileName, BaseName, Directory and FileType tags so they
|
|
23
|
+
don't get hidden by other tags in the file which may have these names
|
|
24
|
+
- Changed decoding of QuickTime Rotation (irot) to correspond with
|
|
25
|
+
EXIF:Orientation (previously this was oddly reported as degrees of
|
|
26
|
+
counterclockwise rotation)
|
|
27
|
+
- Fixed a typo in the print conversion value for a couple of DPX tags
|
|
28
|
+
- Fixed problem writing some QuickTime tags with very large (> 16 MB) values
|
|
29
|
+
- Fixed bug in build_geolocation utility that resulted in incorrect population
|
|
30
|
+
numbers when run under ActivePerl
|
|
31
|
+
|
|
10
32
|
Apr. 23, 2024 - Version 12.84
|
|
11
33
|
|
|
12
34
|
- Added ability to read speed and accuracy_horizontal when geotagging from
|
|
13
35
|
OpenTracks GPX files
|
|
14
36
|
- Decode a few more Apple tags and a new CanonVRD tag
|
|
15
|
-
- Enhanced Geolocation
|
|
37
|
+
- Enhanced Geolocation feature with the ability to return any number of nearby
|
|
16
38
|
cities
|
|
17
39
|
- Fixed long-standing bug in Windows version that didn't properly handle dates
|
|
18
40
|
older than 50 years when writing FileModifyDate or FileCreateDate
|
|
@@ -21,8 +43,8 @@ Apr. 23, 2024 - Version 12.84
|
|
|
21
43
|
which have print conversions
|
|
22
44
|
- Fixed problem where a new subregion couldn't be added through a user-defined
|
|
23
45
|
Geolocation database entry
|
|
24
|
-
- Fixed problem where GeolocFeature option didn't work for some
|
|
25
|
-
user-generated custom database was used
|
|
46
|
+
- Fixed problem where the API GeolocFeature option didn't work for some
|
|
47
|
+
features if a user-generated custom database was used
|
|
26
48
|
|
|
27
49
|
Apr. 18, 2024 - Version 12.83
|
|
28
50
|
|
package/bin/META.json
CHANGED
package/bin/META.yml
CHANGED
package/bin/README
CHANGED
|
@@ -14,50 +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 | ITC r |
|
|
18
|
-
3FR r | DPX r | J2C r |
|
|
19
|
-
3G2 r/w | DR4 r/w/c | JNG r/w |
|
|
20
|
-
3GP r/w | DSS r | JP2 r/w |
|
|
21
|
-
7Z r | DV r | JPEG r/w |
|
|
22
|
-
A r | DVB r/w | JSON r |
|
|
23
|
-
AA r | DVR-MS r | JXL r/w |
|
|
24
|
-
AAC r | DYLIB r | K25 r |
|
|
25
|
-
AAE r | EIP r | KDC r |
|
|
26
|
-
AAX r/w | EPS r/w | KEY r |
|
|
27
|
-
ACR r | EPUB r | LA r |
|
|
28
|
-
AFM r | ERF r/w | LFP r |
|
|
29
|
-
AI r/w | EXE r | LIF r |
|
|
30
|
-
AIFF r | EXIF r/w/c | LNK r |
|
|
31
|
-
APE r | EXR r | LRV r/w |
|
|
32
|
-
ARQ r/w | EXV r/w/c | M2TS r |
|
|
33
|
-
ARW r/w | F4A/V r/w | M4A/V r/w |
|
|
34
|
-
ASF r | FFF r/w | MACOS r |
|
|
35
|
-
AVI r | FITS r | MAX r |
|
|
36
|
-
AVIF r/w | FLA r | MEF r/w |
|
|
37
|
-
AZW r | FLAC r | MIE r/w/c |
|
|
38
|
-
BMP r | FLIF r/w | MIFF r |
|
|
39
|
-
BPG r | FLV r | MKA r |
|
|
40
|
-
BTF r | FPF r | MKS r |
|
|
41
|
-
C2PA r | FPX r | MKV r |
|
|
42
|
-
CHM r | GIF r/w | MNG r/w |
|
|
43
|
-
COS r | GLV r/w | MOBI r |
|
|
44
|
-
CR2 r/w | GPR r/w | MODD r |
|
|
45
|
-
CR3 r/w | GZ r | MOI r |
|
|
46
|
-
CRM r/w | HDP r/w | MOS r/w |
|
|
47
|
-
CRW r/w | HDR r | MOV r/w |
|
|
48
|
-
CS1 r/w | HEIC r/w | MP3 r |
|
|
49
|
-
CSV r | HEIF r/w | MP4 r/w |
|
|
50
|
-
CUR r | HTML r | MPC r |
|
|
51
|
-
CZI r | ICC r/w/c | MPG r |
|
|
52
|
-
DCM r | ICO r | MPO r/w |
|
|
53
|
-
DCP r/w | ICS r | MQV r/w |
|
|
54
|
-
DCR r | IDML r | MRC r |
|
|
55
|
-
DFONT r | IIQ r/w | MRW r/w |
|
|
56
|
-
DIVX r | IND r/w | MXF r |
|
|
57
|
-
DJVU r | INSP r/w | NEF r/w |
|
|
58
|
-
DLL r | INSV r |
|
|
59
|
-
DNG r/w | INX r |
|
|
60
|
-
DOC r | ISO r |
|
|
17
|
+
360 r/w | DOCX r | ITC r | NUMBERS r | RAW r/w
|
|
18
|
+
3FR r | DPX r | J2C r | NXD r | RIFF r
|
|
19
|
+
3G2 r/w | DR4 r/w/c | JNG r/w | O r | RSRC r
|
|
20
|
+
3GP r/w | DSS r | JP2 r/w | ODP r | RTF r
|
|
21
|
+
7Z r | DV r | JPEG r/w | ODS r | RW2 r/w
|
|
22
|
+
A r | DVB r/w | JSON r | ODT r | RWL r/w
|
|
23
|
+
AA r | DVR-MS r | JXL r/w | OFR r | RWZ r
|
|
24
|
+
AAC r | DYLIB r | K25 r | OGG r | RM r
|
|
25
|
+
AAE r | EIP r | KDC r | OGV r | SEQ r
|
|
26
|
+
AAX r/w | EPS r/w | KEY r | ONP r | SKETCH r
|
|
27
|
+
ACR r | EPUB r | LA r | OPUS r | SO r
|
|
28
|
+
AFM r | ERF r/w | LFP r | ORF r/w | SR2 r/w
|
|
29
|
+
AI r/w | EXE r | LIF r | ORI r/w | SRF r
|
|
30
|
+
AIFF r | EXIF r/w/c | LNK r | OTF r | SRW r/w
|
|
31
|
+
APE r | EXR r | LRV r/w | PAC r | SVG r
|
|
32
|
+
ARQ r/w | EXV r/w/c | M2TS r | PAGES r | SWF r
|
|
33
|
+
ARW r/w | F4A/V r/w | M4A/V r/w | PBM r/w | THM r/w
|
|
34
|
+
ASF r | FFF r/w | MACOS r | PCD r | TIFF r/w
|
|
35
|
+
AVI r | FITS r | MAX r | PCX r | TORRENT r
|
|
36
|
+
AVIF r/w | FLA r | MEF r/w | PDB r | TTC r
|
|
37
|
+
AZW r | FLAC r | MIE r/w/c | PDF r/w | TTF r
|
|
38
|
+
BMP r | FLIF r/w | MIFF r | PEF r/w | TXT r
|
|
39
|
+
BPG r | FLV r | MKA r | PFA r | VCF r
|
|
40
|
+
BTF r | FPF r | MKS r | PFB r | VNT r
|
|
41
|
+
C2PA r | FPX r | MKV r | PFM r | VRD r/w/c
|
|
42
|
+
CHM r | GIF r/w | MNG r/w | PGF r | VSD r
|
|
43
|
+
COS r | GLV r/w | MOBI r | PGM r/w | WAV r
|
|
44
|
+
CR2 r/w | GPR r/w | MODD r | PLIST r | WDP r/w
|
|
45
|
+
CR3 r/w | GZ r | MOI r | PICT r | WEBP r/w
|
|
46
|
+
CRM r/w | HDP r/w | MOS r/w | PMP r | WEBM r
|
|
47
|
+
CRW r/w | HDR r | MOV r/w | PNG r/w | WMA r
|
|
48
|
+
CS1 r/w | HEIC r/w | MP3 r | PPM r/w | WMV r
|
|
49
|
+
CSV r | HEIF r/w | MP4 r/w | PPT r | WPG r
|
|
50
|
+
CUR r | HTML r | MPC r | PPTX r | WTV r
|
|
51
|
+
CZI r | ICC r/w/c | MPG r | PS r/w | WV r
|
|
52
|
+
DCM r | ICO r | MPO r/w | PSB r/w | X3F r/w
|
|
53
|
+
DCP r/w | ICS r | MQV r/w | PSD r/w | XCF r
|
|
54
|
+
DCR r | IDML r | MRC r | PSP r | XISF r
|
|
55
|
+
DFONT r | IIQ r/w | MRW r/w | QTIF r/w | XLS r
|
|
56
|
+
DIVX r | IND r/w | MXF r | R3D r | XLSX r
|
|
57
|
+
DJVU r | INSP r/w | NEF r/w | RA r | XMP r/w/c
|
|
58
|
+
DLL r | INSV r | NKA r | RAF r/w | ZIP r
|
|
59
|
+
DNG r/w | INX r | NKSC r/w | RAM r |
|
|
60
|
+
DOC r | ISO r | NRW r/w | RAR r |
|
|
61
61
|
|
|
62
62
|
Meta Information
|
|
63
63
|
----------------------+----------------------+---------------------
|
|
@@ -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.
|
|
113
|
-
cd Image-ExifTool-12.
|
|
112
|
+
gzip -dc Image-ExifTool-12.85.tar.gz | tar -xf -
|
|
113
|
+
cd Image-ExifTool-12.85
|
|
114
114
|
./exiftool t/images/ExifTool.jpg
|
|
115
115
|
|
|
116
116
|
Note: These commands extract meta information from one of the test images.
|
package/bin/build_geolocation
CHANGED
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
# 2024-04-15 - PH Clean up and add options for public release
|
|
13
13
|
# 2024-04-22 - PH Increased number of possible feature codes from
|
|
14
14
|
# 32 to 64. Convert backslashes in directory names
|
|
15
|
+
# 2024-04-24 - PH Fixed problem with population exponent when run
|
|
16
|
+
# under ActivePerl
|
|
17
|
+
# 2024-04-29 - PH Added feature types and default to db v1.03
|
|
15
18
|
#
|
|
16
19
|
# Notes: Requires these files from https://download.geonames.org/export/
|
|
17
20
|
#
|
|
@@ -19,6 +22,7 @@
|
|
|
19
22
|
# countryInfo.txt
|
|
20
23
|
# admin1CodesASCII.txt
|
|
21
24
|
# admin2Codes.txt
|
|
25
|
+
# featureCodes_XX.txt (optional)
|
|
22
26
|
# alternateNamesV2.txt (optional)
|
|
23
27
|
#
|
|
24
28
|
# Output datbase format (Geolocation.dat):
|
|
@@ -54,7 +58,7 @@
|
|
|
54
58
|
# 1. Time zone name, terminated by newline
|
|
55
59
|
# "\0\0\0\0\x05" (feature codes added in v1.03)
|
|
56
60
|
# Feature codes:
|
|
57
|
-
# 1. Feature code,
|
|
61
|
+
# 1. Feature code, optional space-followed-by-feature-name, then newline
|
|
58
62
|
# "\0\0\0\0\0"
|
|
59
63
|
#
|
|
60
64
|
# Feature Codes v1.02: (see http://www.geonames.org/export/codes.html#P for descriptions)
|
|
@@ -68,12 +72,12 @@
|
|
|
68
72
|
|
|
69
73
|
use strict;
|
|
70
74
|
|
|
71
|
-
my $dbVer = '1.
|
|
72
|
-
|
|
75
|
+
my $dbVer = '1.03'; # default output database version
|
|
73
76
|
my $dbFile = 'allCountries.txt'; # default database file
|
|
74
77
|
my $countryFile = 'countryInfo.txt'; # mandatory country names file
|
|
75
78
|
my $regionFile = 'admin1CodesASCII.txt'; # mandatory region names file
|
|
76
79
|
my $admin2File = 'admin2Codes.txt'; # mandatory subregion names file
|
|
80
|
+
my $featureFile = 'featureCodes_en.txt'; # optional feature names file
|
|
77
81
|
my $altNamesFile = 'alternateNamesV2.txt'; # optional alternate names file
|
|
78
82
|
my $outFile = 'Geolocation.dat'; # output ExifTool database file
|
|
79
83
|
my $outAltNames = 'AltNames.dat'; # output alternate names file
|
|
@@ -103,6 +107,7 @@ my @fc103 = qw(
|
|
|
103
107
|
my $i = 0;
|
|
104
108
|
my @featureCodes = $dbVer eq '1.02' ? @fc102 : @fc103;
|
|
105
109
|
my %featureCodes = map { $_ => $i++ } @featureCodes;
|
|
110
|
+
my %featureNames;
|
|
106
111
|
|
|
107
112
|
my ($dbfile, @dbfiles, $outDir, $verbose, $noLang, %needRgn);
|
|
108
113
|
my %optArgs = ( p => 1, c => 1, cp => 1, l => 1, o => 1, ver => 1 );
|
|
@@ -240,12 +245,13 @@ Options:
|
|
|
240
245
|
-h - Show this help.
|
|
241
246
|
|
|
242
247
|
Input files (download from https://download.geonames.org/export/dump/):
|
|
243
|
-
|
|
248
|
+
$dbFile - default database file (smaller files with names
|
|
244
249
|
like "cities###.txt" may be specified instead)
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
250
|
+
$countryFile - mandatory country names file
|
|
251
|
+
$regionFile - mandatory region names file
|
|
252
|
+
$admin2File - mandatory subregion names file
|
|
253
|
+
$featureFile - optional feature codes file
|
|
254
|
+
$altNamesFile - optional alternate names file (must exist to
|
|
249
255
|
to generate $outAltNames and $geoLang files)
|
|
250
256
|
|
|
251
257
|
Output files:
|
|
@@ -374,7 +380,7 @@ my @supportedLangs = qw(cs de en-ca en-gb es fi fr it ja ko nl pl ru sk sv tr zh
|
|
|
374
380
|
|
|
375
381
|
# supported country-specific languages
|
|
376
382
|
my %ccLang = ( TW => 'zh', CN => 'zh', CA => 'en', GB => 'en' );
|
|
377
|
-
my (%lang, %haveCountry, %cityFlags, %rgnFlags, %subFlags, %ccFlags, %flags);
|
|
383
|
+
my (%lang, %featureLang, %haveCountry, %cityFlags, %rgnFlags, %subFlags, %ccFlags, %flags);
|
|
378
384
|
my (%haveRegion, %haveSubRgn, $filesize, $percent);
|
|
379
385
|
|
|
380
386
|
sub GetFileSize($)
|
|
@@ -386,7 +392,8 @@ sub GetFileSize($)
|
|
|
386
392
|
return $size;
|
|
387
393
|
}
|
|
388
394
|
|
|
389
|
-
# pre-scan database to determine which countries, regions
|
|
395
|
+
# pre-scan database to determine which countries, regions subregions and
|
|
396
|
+
# feature codes we will be using
|
|
390
397
|
foreach $dbfile (@dbfiles) {
|
|
391
398
|
my $database = $$dbfile{file};
|
|
392
399
|
my $upgraded;
|
|
@@ -422,7 +429,7 @@ foreach $dbfile (@dbfiles) {
|
|
|
422
429
|
}
|
|
423
430
|
# keep regardless of population
|
|
424
431
|
if ($needRgn{$cc} and $$dbfile{keep}{"$cc$rgn"}) {
|
|
425
|
-
$keep = $$dbfile{keep}{"$cc$rgn"}{$code}
|
|
432
|
+
$keep = $$dbfile{keep}{"$cc$rgn"}{$code};
|
|
426
433
|
} elsif ($$dbfile{keep}{$cc}) {
|
|
427
434
|
$keep = $$dbfile{keep}{$cc}{$code};
|
|
428
435
|
} else {
|
|
@@ -462,9 +469,27 @@ foreach $dbfile (@dbfiles) {
|
|
|
462
469
|
warn "Some feature codes not supported by version 1.02, writing as 1.03 instead.\n" if $upgraded;
|
|
463
470
|
}
|
|
464
471
|
|
|
472
|
+
# read feature names
|
|
473
|
+
if (open INFILE, '<', "$dbdir/$featureFile") {
|
|
474
|
+
print "Reading $dbdir/$featureFile\n";
|
|
475
|
+
while (<INFILE>) {
|
|
476
|
+
my @items = split /\t/;
|
|
477
|
+
$items[0] =~ s/^.\.//; # remove feature group and "." separator
|
|
478
|
+
next unless $featureCodes{$items[0]};
|
|
479
|
+
my $name = ucfirst $items[1];
|
|
480
|
+
$name =~ s/ ([a-z])/ \U$1/g;
|
|
481
|
+
$featureNames{$items[0]} = $name;
|
|
482
|
+
}
|
|
483
|
+
close INFILE;
|
|
484
|
+
} else {
|
|
485
|
+
print "Not found: $dbdir/$featureFile\n";
|
|
486
|
+
print "--> Not storing feature type names\n";
|
|
487
|
+
}
|
|
488
|
+
|
|
465
489
|
# read country names
|
|
466
490
|
$i = 0;
|
|
467
491
|
open INFILE, '<', "$dbdir/$countryFile" or die "Error opening $dbdir/$countryFile\n";
|
|
492
|
+
print "Reading $dbdir/$countryFile\n";
|
|
468
493
|
while (<INFILE>) {
|
|
469
494
|
next if /^#/;
|
|
470
495
|
my @items = split /\t/;
|
|
@@ -479,6 +504,7 @@ die "Too many countries!\n" if $i > 0x100; # (no default 0 entry)
|
|
|
479
504
|
# read region (admin1) names
|
|
480
505
|
$i = 0;
|
|
481
506
|
open REGION, '<', "$dbdir/$regionFile" or die "Error opening $dbdir/$regionFile\n";
|
|
507
|
+
print "Reading $dbdir/$regionFile\n";
|
|
482
508
|
while (<REGION>) {
|
|
483
509
|
chomp;
|
|
484
510
|
my @items = split /\t/;
|
|
@@ -494,6 +520,7 @@ die "Too many regions!\n" if $i > 0x0fff; # (account for default 0 entry)
|
|
|
494
520
|
# read subregion (admin2) names
|
|
495
521
|
$i = 0;
|
|
496
522
|
open ADMIN2, '<', "$dbdir/$admin2File" or die "Error opening $dbdir/$admin2File\n";
|
|
523
|
+
print "Reading $dbdir/$admin2File\n";
|
|
497
524
|
while (<ADMIN2>) {
|
|
498
525
|
chomp;
|
|
499
526
|
my @items = split /\t/;
|
|
@@ -544,8 +571,35 @@ if (not $noLang and open INFILE, '<', "$dbdir/$altNamesFile") {
|
|
|
544
571
|
}
|
|
545
572
|
print "\b\b\b\bDone.\n";
|
|
546
573
|
close INFILE;
|
|
574
|
+
# read alternate feature names
|
|
575
|
+
if (%featureNames) {
|
|
576
|
+
my $lng;
|
|
577
|
+
foreach $lng (@languages) {
|
|
578
|
+
next if $lng eq 'en' or not $languages{$lng};
|
|
579
|
+
my $file = "$dbdir/$featureFile";
|
|
580
|
+
$file =~ s/_en\./_$lng./ or next;
|
|
581
|
+
next unless open INFILE, '<', $file;
|
|
582
|
+
print "Reading $file\n";
|
|
583
|
+
while (<INFILE>) {
|
|
584
|
+
my @items = split /\t/;
|
|
585
|
+
$items[0] =~ s/^.\.//; # remove feature group and "." separator
|
|
586
|
+
next unless $featureNames{$items[0]};
|
|
587
|
+
utf8::decode($items[1]);
|
|
588
|
+
my $name = ucfirst $items[1];
|
|
589
|
+
$name =~ s/ (.)/ \U$1/g;
|
|
590
|
+
# change $name back to byte string
|
|
591
|
+
if ($] >= 5.006 and (eval { require Encode; Encode::is_utf8($name) } or $@)) {
|
|
592
|
+
$name = $@ ? pack('C*',unpack($] < 5.010000 ? 'U0C*' : 'C0C*',$name)) : Encode::encode('utf8',$name);
|
|
593
|
+
}
|
|
594
|
+
next if $name eq $featureNames{$items[0]};
|
|
595
|
+
$featureLang{$lng}{$items[0]} = $name;
|
|
596
|
+
}
|
|
597
|
+
close INFILE;
|
|
598
|
+
}
|
|
599
|
+
}
|
|
547
600
|
} else {
|
|
548
|
-
print "Not
|
|
601
|
+
print "Not found: $dbdir/$altNamesFile\n--> " unless $noLang;
|
|
602
|
+
print "Not writing alternate languages\n";
|
|
549
603
|
$noLang = 1;
|
|
550
604
|
}
|
|
551
605
|
|
|
@@ -554,7 +608,7 @@ my (%coords, %langLookups);
|
|
|
554
608
|
foreach $dbfile (@dbfiles) {
|
|
555
609
|
my $database = $$dbfile{file};
|
|
556
610
|
|
|
557
|
-
print "Processing
|
|
611
|
+
print "Processing database entries... 0%";
|
|
558
612
|
my $i = 0;
|
|
559
613
|
my $num = scalar @{$$dbfile{kept}};
|
|
560
614
|
|
|
@@ -623,6 +677,7 @@ foreach (sort { $a cmp $b } keys %coords) {
|
|
|
623
677
|
my $items = $coords{$_};
|
|
624
678
|
# @$items=(0.lat,1.lon,2.city,3.cc,4.rgn,5.admin2,6.population,7.timezone,8.feature code,9.alt names)
|
|
625
679
|
my $iCC = $orderCC{$$items[3]};
|
|
680
|
+
defined $iCC or warn("Unknown country code $$items[3]\n"), next;
|
|
626
681
|
my $iRgn = $orderRgn{"$$items[3]$$items[4]"} || 0;
|
|
627
682
|
my $iSub = $orderSub{"$$items[3]$$items[4].$$items[5]"} || 0;
|
|
628
683
|
my $tn = $tz{$$items[7]};
|
|
@@ -631,9 +686,12 @@ foreach (sort { $a cmp $b } keys %coords) {
|
|
|
631
686
|
$tn = $tz{$$items[7]} = $tzNum++;
|
|
632
687
|
}
|
|
633
688
|
# convert population to our binary format
|
|
634
|
-
|
|
689
|
+
# Note: format in ActivePerl is "3.1e+004", but "3.1+04" in other Perls,
|
|
690
|
+
# but other Perls will round 34500 to "3.4e+04", so add 1 to get "3.5e+04"
|
|
691
|
+
$$items[6] += 1 if $$items[6] > 100 and not $$items[6] % 10;
|
|
692
|
+
my $pop = sprintf('%.1e',$$items[6]);
|
|
635
693
|
# pack CC, population and region index into a 32-bit integer
|
|
636
|
-
my $code = ($iCC << 24) | (substr($pop,
|
|
694
|
+
my $code = ($iCC << 24) | (substr($pop,-1,1)<<20) | (substr($pop,0,1)<<16) | (substr($pop,2,1)<<12) | $iRgn;
|
|
637
695
|
$fcodes{$$items[8]} = ($fcodes{$$items[8]} || 0) + 1;
|
|
638
696
|
my $fc = $featureCodes{$$items[8]} || 0;
|
|
639
697
|
# store high bit of timezone index
|
|
@@ -761,8 +819,12 @@ print OUTFILE $_,"\n" foreach @tz;
|
|
|
761
819
|
|
|
762
820
|
print OUTFILE "\0\0\0\0\x05\n"; # section terminator
|
|
763
821
|
|
|
764
|
-
# write feature codes
|
|
765
|
-
|
|
822
|
+
# write feature codes and optional names
|
|
823
|
+
foreach (@featureCodes) {
|
|
824
|
+
print OUTFILE $_;
|
|
825
|
+
print OUTFILE ' ', $featureNames{$_} if $featureNames{$_};
|
|
826
|
+
print OUTFILE "\n";
|
|
827
|
+
}
|
|
766
828
|
|
|
767
829
|
# write terminator and close Geolocation.dat
|
|
768
830
|
print OUTFILE "\0\0\0\0\0\n"; # file terminator
|
|
@@ -774,7 +836,9 @@ my $langSize = 0;
|
|
|
774
836
|
my $langDir = "$outDir/$geoLang";
|
|
775
837
|
# delete existing languages
|
|
776
838
|
unlink <"$langDir/*.pm">;
|
|
777
|
-
|
|
839
|
+
if ($noLang) {
|
|
840
|
+
rmdir $langDir;
|
|
841
|
+
} else {
|
|
778
842
|
my $n = scalar(keys %langLookups);
|
|
779
843
|
print "Writing $n language files to $outDir/$geoLang...\n";
|
|
780
844
|
mkdir $langDir, 0777;
|
|
@@ -785,6 +849,7 @@ unless ($noLang) {
|
|
|
785
849
|
my $lkup = $langLookups{$lng};
|
|
786
850
|
my $file = "$myLng.pm";
|
|
787
851
|
open OUT, ">$langDir/$file" or die "Error creating $file\n";
|
|
852
|
+
binmode OUT;
|
|
788
853
|
print OUT "# Geolocation language translations for $myLng\n";
|
|
789
854
|
print OUT "#\n# Based on Creative Commons database from geonames.org\n\n";
|
|
790
855
|
print OUT "%Image::ExifTool::GeoLang::${myLng}::Translate = (\n";
|
|
@@ -842,6 +907,14 @@ unless ($noLang) {
|
|
|
842
907
|
}
|
|
843
908
|
}
|
|
844
909
|
}
|
|
910
|
+
if ($featureLang{$lng}) {
|
|
911
|
+
print OUT "\n\t# feature types\n";
|
|
912
|
+
foreach (sort keys %{$featureLang{$lng}}) {
|
|
913
|
+
my $ftype = $featureLang{$lng}{$_};
|
|
914
|
+
$ftype =~ s/'/\\'/g;
|
|
915
|
+
print OUT "\t$_ => '$ftype',\n"
|
|
916
|
+
}
|
|
917
|
+
}
|
|
845
918
|
print OUT ");\n\n1; #end\n";
|
|
846
919
|
$langSize += tell OUT;
|
|
847
920
|
close OUT;
|
package/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.85';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
17
|
my $exePath;
|
|
@@ -735,6 +735,7 @@ for (;;) {
|
|
|
735
735
|
push @isUTF8, 10 if $isAlt;
|
|
736
736
|
for ($i=0; ; ++$i) {
|
|
737
737
|
my @entry = Image::ExifTool::Geolocation::GetEntry($i,$langOpt,1) or last;
|
|
738
|
+
$#entry = 9; # remove everything after latitude (eg. feature type)
|
|
738
739
|
next if $minPop and $entry[7] < $minPop;
|
|
739
740
|
next if %fcodes and $neg ? $fcodes{lc $entry[6]} : not $fcodes{lc $entry[6]};
|
|
740
741
|
push @entry, Image::ExifTool::Geolocation::GetAltNames($i,1) if $isAlt;
|
|
@@ -4720,50 +4721,50 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
4720
4721
|
|
|
4721
4722
|
File Types
|
|
4722
4723
|
------------+-------------+-------------+-------------+------------
|
|
4723
|
-
360 r/w | DOCX r | ITC r |
|
|
4724
|
-
3FR r | DPX r | J2C r |
|
|
4725
|
-
3G2 r/w | DR4 r/w/c | JNG r/w |
|
|
4726
|
-
3GP r/w | DSS r | JP2 r/w |
|
|
4727
|
-
7Z r | DV r | JPEG r/w |
|
|
4728
|
-
A r | DVB r/w | JSON r |
|
|
4729
|
-
AA r | DVR-MS r | JXL r/w |
|
|
4730
|
-
AAC r | DYLIB r | K25 r |
|
|
4731
|
-
AAE r | EIP r | KDC r |
|
|
4732
|
-
AAX r/w | EPS r/w | KEY r |
|
|
4733
|
-
ACR r | EPUB r | LA r |
|
|
4734
|
-
AFM r | ERF r/w | LFP r |
|
|
4735
|
-
AI r/w | EXE r | LIF r |
|
|
4736
|
-
AIFF r | EXIF r/w/c | LNK r |
|
|
4737
|
-
APE r | EXR r | LRV r/w |
|
|
4738
|
-
ARQ r/w | EXV r/w/c | M2TS r |
|
|
4739
|
-
ARW r/w | F4A/V r/w | M4A/V r/w |
|
|
4740
|
-
ASF r | FFF r/w | MACOS r |
|
|
4741
|
-
AVI r | FITS r | MAX r |
|
|
4742
|
-
AVIF r/w | FLA r | MEF r/w |
|
|
4743
|
-
AZW r | FLAC r | MIE r/w/c |
|
|
4744
|
-
BMP r | FLIF r/w | MIFF r |
|
|
4745
|
-
BPG r | FLV r | MKA r |
|
|
4746
|
-
BTF r | FPF r | MKS r |
|
|
4747
|
-
C2PA r | FPX r | MKV r |
|
|
4748
|
-
CHM r | GIF r/w | MNG r/w |
|
|
4749
|
-
COS r | GLV r/w | MOBI r |
|
|
4750
|
-
CR2 r/w | GPR r/w | MODD r |
|
|
4751
|
-
CR3 r/w | GZ r | MOI r |
|
|
4752
|
-
CRM r/w | HDP r/w | MOS r/w |
|
|
4753
|
-
CRW r/w | HDR r | MOV r/w |
|
|
4754
|
-
CS1 r/w | HEIC r/w | MP3 r |
|
|
4755
|
-
CSV r | HEIF r/w | MP4 r/w |
|
|
4756
|
-
CUR r | HTML r | MPC r |
|
|
4757
|
-
CZI r | ICC r/w/c | MPG r |
|
|
4758
|
-
DCM r | ICO r | MPO r/w |
|
|
4759
|
-
DCP r/w | ICS r | MQV r/w |
|
|
4760
|
-
DCR r | IDML r | MRC r |
|
|
4761
|
-
DFONT r | IIQ r/w | MRW r/w |
|
|
4762
|
-
DIVX r | IND r/w | MXF r |
|
|
4763
|
-
DJVU r | INSP r/w | NEF r/w |
|
|
4764
|
-
DLL r | INSV r |
|
|
4765
|
-
DNG r/w | INX r |
|
|
4766
|
-
DOC r | ISO r |
|
|
4724
|
+
360 r/w | DOCX r | ITC r | NUMBERS r | RAW r/w
|
|
4725
|
+
3FR r | DPX r | J2C r | NXD r | RIFF r
|
|
4726
|
+
3G2 r/w | DR4 r/w/c | JNG r/w | O r | RSRC r
|
|
4727
|
+
3GP r/w | DSS r | JP2 r/w | ODP r | RTF r
|
|
4728
|
+
7Z r | DV r | JPEG r/w | ODS r | RW2 r/w
|
|
4729
|
+
A r | DVB r/w | JSON r | ODT r | RWL r/w
|
|
4730
|
+
AA r | DVR-MS r | JXL r/w | OFR r | RWZ r
|
|
4731
|
+
AAC r | DYLIB r | K25 r | OGG r | RM r
|
|
4732
|
+
AAE r | EIP r | KDC r | OGV r | SEQ r
|
|
4733
|
+
AAX r/w | EPS r/w | KEY r | ONP r | SKETCH r
|
|
4734
|
+
ACR r | EPUB r | LA r | OPUS r | SO r
|
|
4735
|
+
AFM r | ERF r/w | LFP r | ORF r/w | SR2 r/w
|
|
4736
|
+
AI r/w | EXE r | LIF r | ORI r/w | SRF r
|
|
4737
|
+
AIFF r | EXIF r/w/c | LNK r | OTF r | SRW r/w
|
|
4738
|
+
APE r | EXR r | LRV r/w | PAC r | SVG r
|
|
4739
|
+
ARQ r/w | EXV r/w/c | M2TS r | PAGES r | SWF r
|
|
4740
|
+
ARW r/w | F4A/V r/w | M4A/V r/w | PBM r/w | THM r/w
|
|
4741
|
+
ASF r | FFF r/w | MACOS r | PCD r | TIFF r/w
|
|
4742
|
+
AVI r | FITS r | MAX r | PCX r | TORRENT r
|
|
4743
|
+
AVIF r/w | FLA r | MEF r/w | PDB r | TTC r
|
|
4744
|
+
AZW r | FLAC r | MIE r/w/c | PDF r/w | TTF r
|
|
4745
|
+
BMP r | FLIF r/w | MIFF r | PEF r/w | TXT r
|
|
4746
|
+
BPG r | FLV r | MKA r | PFA r | VCF r
|
|
4747
|
+
BTF r | FPF r | MKS r | PFB r | VNT r
|
|
4748
|
+
C2PA r | FPX r | MKV r | PFM r | VRD r/w/c
|
|
4749
|
+
CHM r | GIF r/w | MNG r/w | PGF r | VSD r
|
|
4750
|
+
COS r | GLV r/w | MOBI r | PGM r/w | WAV r
|
|
4751
|
+
CR2 r/w | GPR r/w | MODD r | PLIST r | WDP r/w
|
|
4752
|
+
CR3 r/w | GZ r | MOI r | PICT r | WEBP r/w
|
|
4753
|
+
CRM r/w | HDP r/w | MOS r/w | PMP r | WEBM r
|
|
4754
|
+
CRW r/w | HDR r | MOV r/w | PNG r/w | WMA r
|
|
4755
|
+
CS1 r/w | HEIC r/w | MP3 r | PPM r/w | WMV r
|
|
4756
|
+
CSV r | HEIF r/w | MP4 r/w | PPT r | WPG r
|
|
4757
|
+
CUR r | HTML r | MPC r | PPTX r | WTV r
|
|
4758
|
+
CZI r | ICC r/w/c | MPG r | PS r/w | WV r
|
|
4759
|
+
DCM r | ICO r | MPO r/w | PSB r/w | X3F r/w
|
|
4760
|
+
DCP r/w | ICS r | MQV r/w | PSD r/w | XCF r
|
|
4761
|
+
DCR r | IDML r | MRC r | PSP r | XISF r
|
|
4762
|
+
DFONT r | IIQ r/w | MRW r/w | QTIF r/w | XLS r
|
|
4763
|
+
DIVX r | IND r/w | MXF r | R3D r | XLSX r
|
|
4764
|
+
DJVU r | INSP r/w | NEF r/w | RA r | XMP r/w/c
|
|
4765
|
+
DLL r | INSV r | NKA r | RAF r/w | ZIP r
|
|
4766
|
+
DNG r/w | INX r | NKSC r/w | RAM r |
|
|
4767
|
+
DOC r | ISO r | NRW r/w | RAR r |
|
|
4767
4768
|
|
|
4768
4769
|
Meta Information
|
|
4769
4770
|
----------------------+----------------------+---------------------
|
|
@@ -5677,7 +5678,7 @@ with this command:
|
|
|
5677
5678
|
|
|
5678
5679
|
produces output like this:
|
|
5679
5680
|
|
|
5680
|
-
-- Generated by ExifTool 12.
|
|
5681
|
+
-- Generated by ExifTool 12.85 --
|
|
5681
5682
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5682
5683
|
(f/5.6, 1/60s, ISO 100)
|
|
5683
5684
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -5916,7 +5917,8 @@ processed file by using %C (upper case) instead of %c. This allows a
|
|
|
5916
5917
|
sequential number to be added to output file names, even if the names are
|
|
5917
5918
|
different. For %C, a copy number of zero is not omitted as it is with %c.
|
|
5918
5919
|
A leading '-' causes the number to be reset at the start of each new
|
|
5919
|
-
directory
|
|
5920
|
+
directory (in the original directory structure if the files are being
|
|
5921
|
+
moved), and '+' has no effect. The number before the decimal place gives
|
|
5920
5922
|
the starting index, the number after the decimal place gives the field
|
|
5921
5923
|
width. The following examples show the output filenames when used with the
|
|
5922
5924
|
command C<exiftool rose.jpg star.jpg jet.jpg ...>:
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.75';
|
|
92
92
|
|
|
93
93
|
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
|
|
94
94
|
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
|
|
@@ -2590,6 +2590,13 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2590
2590
|
},
|
|
2591
2591
|
# 47 - related to aspect ratio: 100=4:3,70=1:1/16:9,90=3:2,60=4:5 (PH G12)
|
|
2592
2592
|
# (roughly image area in percent - 4:3=100%,1:1/16:9=75%,3:2=89%,4:5=60%)
|
|
2593
|
+
51 => { #forum16036 (EOS R models)
|
|
2594
|
+
Name => 'Clarity',
|
|
2595
|
+
PrintConv => {
|
|
2596
|
+
OTHER => sub { shift },
|
|
2597
|
+
0x7fff => 'n/a',
|
|
2598
|
+
},
|
|
2599
|
+
},
|
|
2593
2600
|
);
|
|
2594
2601
|
|
|
2595
2602
|
# focal length information (MakerNotes tag 0x02)
|
|
@@ -7031,7 +7038,7 @@ my %ciMaxFocal = (
|
|
|
7031
7038
|
},
|
|
7032
7039
|
},
|
|
7033
7040
|
2 => { #12
|
|
7034
|
-
Name => 'Sharpness',
|
|
7041
|
+
Name => 'Sharpness', # (unsharp mask strength for the EOS R5)
|
|
7035
7042
|
Notes => 'all models except the 20D and 350D',
|
|
7036
7043
|
Condition => '$$self{Model} !~ /\b(20D|350D|REBEL XT|Kiss Digital N)\b/',
|
|
7037
7044
|
Priority => 0, # (maybe not as reliable as other sharpness values)
|
|
@@ -7077,6 +7084,8 @@ my %ciMaxFocal = (
|
|
|
7077
7084
|
Name => 'WBShiftGM',
|
|
7078
7085
|
Notes => 'positive is a shift toward green',
|
|
7079
7086
|
},
|
|
7087
|
+
14 => 'UnsharpMaskFineness', #forum16036
|
|
7088
|
+
15 => 'UnsharpMaskThreshold', #forum16036
|
|
7080
7089
|
);
|
|
7081
7090
|
|
|
7082
7091
|
# Color balance information (MakerNotes tag 0xa9) (ref PH)
|
|
@@ -15,7 +15,7 @@ use strict;
|
|
|
15
15
|
use vars qw($VERSION);
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.07';
|
|
19
19
|
|
|
20
20
|
# DPX tags
|
|
21
21
|
%Image::ExifTool::DPX::Main = (
|
|
@@ -97,7 +97,7 @@ $VERSION = '1.06';
|
|
|
97
97
|
3 => 'Logarithmic',
|
|
98
98
|
4 => 'Unspecified video',
|
|
99
99
|
5 => 'SMPTE 274M',
|
|
100
|
-
6 => 'ITU-R
|
|
100
|
+
6 => 'ITU-R 709-4',
|
|
101
101
|
7 => 'ITU-R 601-5 system B or G (625)',
|
|
102
102
|
8 => 'ITU-R 601-5 system M (525)',
|
|
103
103
|
9 => 'Composite video (NTSC)',
|
|
@@ -124,7 +124,7 @@ $VERSION = '1.06';
|
|
|
124
124
|
1 => 'Printing density',
|
|
125
125
|
4 => 'Unspecified video',
|
|
126
126
|
5 => 'SMPTE 274M',
|
|
127
|
-
6 => 'ITU-R
|
|
127
|
+
6 => 'ITU-R 709-4',
|
|
128
128
|
7 => 'ITU-R 601-5 system B or G (625)',
|
|
129
129
|
8 => 'ITU-R 601-5 system M (525)',
|
|
130
130
|
9 => 'Composite video (NTSC)',
|
|
Binary file
|