exiftool_vendored 12.11.0 → 12.12.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of exiftool_vendored might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b7f2c837f1bff7860cad5011a04c5671d88d4a761c197c2442c73791c5d87b22
4
- data.tar.gz: 49b1ea22c9fe6668b08f0b021cbe492cc9b870d931d92a4fe127ba7ada41d757
3
+ metadata.gz: fb85849da2fdeb7f34dcbd03ba9548e5744c692f93d8163cf3029a5189f75d2c
4
+ data.tar.gz: 0fd722ec987c17f4449f7eb9d18101286ceff673134d784833acd811cd376a09
5
5
  SHA512:
6
- metadata.gz: a66c9d7b5f2f9f4118ff5c4355fbff604a7173c0b6a90349e2884624a55e1216e77b9e00c958515447d58d5f9d3e612f48e6608aeea8ae6ee3528512c39db1b2
7
- data.tar.gz: 6d74f8b745f7c964dad82bca92d98c07b318d4895d12d4f10cfc2e8c212d326abdd02e60afff8af7e936c2b89802277b4ae79b4f3d1da2642f0ffd9e4717d0eb
6
+ metadata.gz: 8273b84dd45c1b266eec1a0c13c14e0c60e6f68c3bbd76fce169002a9983606b76f70e636199b751dda2f8f6992ea39b164f4d24c29849fa494b30b4ad14b1fa
7
+ data.tar.gz: a65c0a97fdbc17365a46bd7605b36e72557004549f92ba9fc1f02d7358899643932125a499d65daa88eddebbf9c7a8d343c037b70baa4ff30802c97dfb66efd6
@@ -7,6 +7,18 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 12.00. (Other versions are
8
8
  considered development releases, and are not uploaded to CPAN.)
9
9
 
10
+ Dec. 4, 2020 - Version 12.12
11
+
12
+ - Added ability to geotag from DJI CSV log files
13
+ - Added a new CanonModelID
14
+ - Added a couple of new Sony LensType values (thanks LibRaw)
15
+ - Enhanced -csvDelim option to allow "\t", "\n", "\r" and "\\"
16
+ - Unescape "\b" and "\f" in imported JSON values
17
+ - Fixed bug introduced in 12.10 which generated a "Not an integer" warning
18
+ when attempting to shift some QuickTime date/time tags
19
+ - Fixed shared-write permission problem with -@ argfile when using -stay_open
20
+ and a filename containing special characters on Windows
21
+
10
22
  Nov. 27, 2020 - Version 12.11
11
23
 
12
24
  - Added -csvDelim option
@@ -567,6 +567,7 @@ t/GeoTiff_4.out
567
567
  t/Geotag.t
568
568
  t/Geotag_10.out
569
569
  t/Geotag_11.out
570
+ t/Geotag_12.out
570
571
  t/Geotag_2.out
571
572
  t/Geotag_3.out
572
573
  t/Geotag_5.out
@@ -986,6 +987,7 @@ t/images/Geotag.log
986
987
  t/images/Geotag.xml
987
988
  t/images/Geotag2.log
988
989
  t/images/Geotag3.log
990
+ t/images/Geotag_DJI_2020-12-02_[07-50-31].csv
989
991
  t/images/GoPro.jpg
990
992
  t/images/HTML.html
991
993
  t/images/ICC_Profile.icc
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "12.11"
50
+ "version" : "12.12"
51
51
  }
@@ -28,4 +28,4 @@ recommends:
28
28
  Time::HiRes: 0
29
29
  requires:
30
30
  perl: 5.004
31
- version: 12.11
31
+ version: 12.12
data/bin/README CHANGED
@@ -106,8 +106,8 @@ your home directory, then you would type the following commands in a
106
106
  terminal window to extract and run ExifTool:
107
107
 
108
108
  cd ~/Desktop
109
- gzip -dc Image-ExifTool-12.11.tar.gz | tar -xf -
110
- cd Image-ExifTool-12.11
109
+ gzip -dc Image-ExifTool-12.12.tar.gz | tar -xf -
110
+ cd Image-ExifTool-12.12
111
111
  ./exiftool t/images/ExifTool.jpg
112
112
 
113
113
  Note: These commands extract meta information from one of the test images.
@@ -10,7 +10,7 @@
10
10
  use strict;
11
11
  require 5.004;
12
12
 
13
- my $version = '12.11';
13
+ my $version = '12.12';
14
14
 
15
15
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
16
16
  my $exeDir;
@@ -859,7 +859,11 @@ for (;;) {
859
859
  }
860
860
  if (/^csvdelim$/i) {
861
861
  $csvDelim = shift;
862
- defined $csvDelim or Error("Expecting argument for -csvDelim option\n"), $badCmd=1;
862
+ defined $csvDelim or Error("Expecting argument for -csvDelim option\n"), $badCmd=1, next;
863
+ $csvDelim =~ /"/ and Error("CSV delimiter can not contain a double quote\n"), $badCmd=1, next;
864
+ my %unescape = ( 't'=>"\t", 'n'=>"\n", 'r'=>"\r", '\\' => '\\' );
865
+ $csvDelim =~ s/\\(.)/$unescape{$1}||"\\$1"/sge;
866
+ $mt->Options(CSVDelim => $csvDelim);
863
867
  next;
864
868
  }
865
869
  if (/^d$/ or $a eq 'dateformat') {
@@ -5095,8 +5099,10 @@ generate a fixed-column CSV file instead of using the B<-csv> option.
5095
5099
 
5096
5100
  =item B<-csvDelim> I<STR>
5097
5101
 
5098
- Set the delimiter for separating CSV entries for the B<-csv> option.
5099
- Default is ','.
5102
+ Set the delimiter for separating CSV entries for CSV file input/output via
5103
+ the B<-csv> option. I<STR> may contain "\t", "\n", "\r" and "\\" to
5104
+ represent TAB, LF, CR and '\' respectively. A double quote is not allowed
5105
+ in the delimiter. Default is ','.
5100
5106
 
5101
5107
  =item B<-d> I<FMT> (B<-dateFormat>)
5102
5108
 
@@ -5349,7 +5355,7 @@ with this command:
5349
5355
 
5350
5356
  produces output like this:
5351
5357
 
5352
- -- Generated by ExifTool 12.11 --
5358
+ -- Generated by ExifTool 12.12 --
5353
5359
  File: a.jpg - 2003:10:31 15:44:19
5354
5360
  (f/5.6, 1/60s, ISO 100)
5355
5361
  File: b.jpg - 2006:05:23 11:57:38
@@ -28,7 +28,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
28
28
  %mimeType $swapBytes $swapWords $currentByteOrder %unpackStd
29
29
  %jpegMarker %specialTags %fileTypeLookup $testLen $exePath);
30
30
 
31
- $VERSION = '12.11';
31
+ $VERSION = '12.12';
32
32
  $RELEASE = '';
33
33
  @ISA = qw(Exporter);
34
34
  %EXPORT_TAGS = (
@@ -4002,7 +4002,9 @@ sub Open($*$;$)
4002
4002
  }
4003
4003
  my $share = 0;
4004
4004
  eval {
4005
- $share = Win32API::File::FILE_SHARE_READ() unless $access & Win32API::File::GENERIC_WRITE();
4005
+ unless ($access & Win32API::File::GENERIC_WRITE()) {
4006
+ $share = Win32API::File::FILE_SHARE_READ() | Win32API::File::FILE_SHARE_WRITE();
4007
+ }
4006
4008
  };
4007
4009
  my $wh = eval { Win32API::File::CreateFileW($file, $access, $share, [], $create, 0, []) };
4008
4010
  return undef unless $wh;
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.41';
91
+ $VERSION = '4.42';
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)
@@ -944,6 +944,7 @@ $VERSION = '4.41';
944
944
  0x80000436 => 'EOS SL3 / 250D / Kiss X10', #25
945
945
  0x80000437 => 'EOS 90D', #IB
946
946
  0x80000453 => 'EOS R6', #PH
947
+ 0x80000467 => 'PowerShot ZOOM',
947
948
  0x80000520 => 'EOS D2000C', #IB
948
949
  0x80000560 => 'EOS D6000C', #PH (guess)
949
950
  );
@@ -13,6 +13,7 @@
13
13
  # 2016/07/13 - PH Added ability to geotag date/time only
14
14
  # 2019/07/02 - PH Added ability to read IMU CSV files
15
15
  # 2019/11/10 - PH Also write pitch to CameraElevationAngle
16
+ # 2020/12/01 - PH Added ability to read DJI CSV log files
16
17
  #
17
18
  # References: 1) http://www.topografix.com/GPX/1/1/
18
19
  # 2) http://www.gpsinformation.org/dale/nmea.htm#GSA
@@ -27,7 +28,7 @@ use vars qw($VERSION);
27
28
  use Image::ExifTool qw(:Public);
28
29
  use Image::ExifTool::GPS;
29
30
 
30
- $VERSION = '1.63';
31
+ $VERSION = '1.64';
31
32
 
32
33
  sub JITTER() { return 2 } # maximum time jitter
33
34
 
@@ -133,7 +134,7 @@ sub LoadTrackLog($$;$)
133
134
  my ($et, $val) = @_;
134
135
  my ($raf, $from, $time, $isDate, $noDate, $noDateChanged, $lastDate, $dateFlarm);
135
136
  my ($nmeaStart, $fixSecs, @fixTimes, $lastFix, %nmea, @csvHeadings);
136
- my ($canCut, $cutPDOP, $cutHDOP, $cutSats, $e0, $e1, @tmp);
137
+ my ($canCut, $cutPDOP, $cutHDOP, $cutSats, $e0, $e1, @tmp, $trackFile, $trackTime);
137
138
 
138
139
  unless (eval { require Time::Local }) {
139
140
  return 'Geotag feature requires Time::Local installed';
@@ -159,6 +160,7 @@ sub LoadTrackLog($$;$)
159
160
  } else {
160
161
  # $val is track file name
161
162
  if ($et->Open(\*EXIFTOOL_TRKFILE, $val)) {
163
+ $trackFile = $val;
162
164
  $raf = new File::RandomAccess(\*EXIFTOOL_TRKFILE);
163
165
  unless ($raf->Read($_, 256)) {
164
166
  close EXIFTOOL_TRKFILE;
@@ -201,6 +203,8 @@ sub LoadTrackLog($$;$)
201
203
  my $skipped = 0;
202
204
  my $lastSecs = 0;
203
205
  my $fix = { };
206
+ my $csvDelim = $et->Options('CSVDelim');
207
+ $csvDelim = ',' unless defined $csvDelim;
204
208
  my (@saveFix, $timeSpan);
205
209
  for (;;) {
206
210
  $raf->ReadLine($_) or last;
@@ -230,19 +234,31 @@ sub LoadTrackLog($$;$)
230
234
  $format = 'Winplus';
231
235
  } elsif (/^\s*\d+\s+.*\sypr\s*$/ and (@tmp=split) == 12) {
232
236
  $format = 'Bramor';
233
- } elsif (/\b(GPS)?Date/i and /\b(GPS)?(Date)?Time/i and /,/) {
237
+ } elsif (((/\b(GPS)?Date/i and /\b(GPS)?(Date)?Time/i) or /\bTime\(seconds\)/i) and /\Q$csvDelim/) {
234
238
  chomp;
235
- @csvHeadings = split ',';
239
+ @csvHeadings = split /\Q$csvDelim/;
236
240
  $format = 'CSV';
237
241
  # convert recognized headings to our parameter names
238
242
  foreach (@csvHeadings) {
239
243
  my $param;
240
244
  s/^GPS ?//; # remove leading "GPS" to simplify regex patterns
241
- if (/^Date ?Time/i) { # ExifTool addition
245
+ if (/^Time ?\(seconds\)$/i) { # DJI
246
+ # DJI CSV log files have a column "Time(seconds)" which is seconds since
247
+ # the start of the flight. The date/time is obtained from the file name.
248
+ $param = 'runtime';
249
+ if ($trackFile and $trackFile =~ /(\d{4})-(\d{2})-(\d{2})[^\/]+(\d{2})-(\d{2})-(\d{2})[^\/]*$/) {
250
+ $trackTime = Image::ExifTool::TimeLocal($6,$5,$4,$3,$2-1,$1);
251
+ my $utc = PrintFixTime($trackTime);
252
+ my $tzs = Image::ExifTool::TimeZoneString([$6,$5,$4,$3,$2-1,$1-1900],$trackTime);
253
+ $et->VPrint(2, " DJI start time: $utc (local timezone is $tzs)\n");
254
+ } else {
255
+ return 'Error getting start time from file name for DJI CSV track file';
256
+ }
257
+ } elsif (/^Date ?Time/i) { # ExifTool addition
242
258
  $param = 'datetime';
243
259
  } elsif (/^Date/i) {
244
260
  $param = 'date';
245
- } elsif (/^Time/i) {
261
+ } elsif (/^Time(?! ?\(text\))/i) { # (ignore DJI "Time(text)" column)
246
262
  $param = 'time';
247
263
  } elsif (/^(Pos)?Lat/i) {
248
264
  $param = 'lat';
@@ -423,7 +439,7 @@ DoneFix: $isDate = 1;
423
439
  goto DoneFix; # save this fix
424
440
  } elsif ($format eq 'CSV') {
425
441
  chomp;
426
- my @vals = split ',';
442
+ my @vals = split /\Q$csvDelim/;
427
443
  #
428
444
  # CSV format output of GPS/IMU POS system
429
445
  # Date* - date in DD/MM/YYYY format
@@ -435,7 +451,7 @@ DoneFix: $isDate = 1;
435
451
  # [Angle]Pitch* - pitch angle in degrees
436
452
  # [Angle]Roll* - roll angle in degrees
437
453
  # (ExifTool enhancements allow for standard tag names or descriptions as the column headings,
438
- # add support for time zones and flexible coordinates, and allow a new DateTime column)
454
+ # add support for time zones and flexible coordinates, and allow new DateTime and Shift columns)
439
455
  #
440
456
  my ($param, $date, $secs);
441
457
  foreach $param (@csvHeadings) {
@@ -463,6 +479,9 @@ DoneFix: $isDate = 1;
463
479
  }
464
480
  } elsif ($param eq 'lat' or $param eq 'lon') {
465
481
  $$fix{$param} = Image::ExifTool::GPS::ToDegrees($val, 1);
482
+ } elsif ($param eq 'runtime') {
483
+ $date = $trackTime;
484
+ $secs = $val;
466
485
  } else {
467
486
  $$fix{$param} = $val;
468
487
  }
@@ -1378,8 +1397,8 @@ This module is used by Image::ExifTool
1378
1397
  This module loads GPS track logs, interpolates to determine position based
1379
1398
  on time, and sets new GPS values for geotagging images. Currently supported
1380
1399
  formats are GPX, NMEA RMC/GGA/GLL, KML, IGC, Garmin XML and TCX, Magellan
1381
- PMGNTRK, Honeywell PTNTHPR, Winplus Beacon text, IMU CSV, and Bramor gEO log
1382
- files.
1400
+ PMGNTRK, Honeywell PTNTHPR, Winplus Beacon text, IMU CSV, DJI CSV, and
1401
+ Bramor gEO log files.
1383
1402
 
1384
1403
  Methods in this module should not be called directly. Instead, the Geotag
1385
1404
  feature is accessed by writing the values of the ExifTool Geotag, Geosync
@@ -12,13 +12,13 @@ require Exporter;
12
12
 
13
13
  use vars qw($VERSION @ISA @EXPORT_OK);
14
14
 
15
- $VERSION = '1.09';
15
+ $VERSION = '1.10';
16
16
  @ISA = qw(Exporter);
17
17
  @EXPORT_OK = qw(ReadCSV ReadJSON);
18
18
 
19
19
  sub ReadJSONObject($;$);
20
20
 
21
- my %unescapeJSON = ( 't'=>"\t", 'n'=>"\n", 'r'=>"\r" );
21
+ my %unescapeJSON = ( 't'=>"\t", 'n'=>"\n", 'r'=>"\r", 'b' => "\b", 'f' => "\f" );
22
22
  my $charset;
23
23
 
24
24
  #------------------------------------------------------------------------------
@@ -1401,6 +1401,7 @@ my %binaryDataAttrs = (
1401
1401
  16 => 'Electronic',
1402
1402
  # 33 => ? seen for 1J2
1403
1403
  48 => 'Electronic Front Curtain',
1404
+ # 80 => ? seen for the Z6II
1404
1405
  # 81 => ? seen for Z50
1405
1406
  },
1406
1407
  },
@@ -138,6 +138,7 @@ my %olympusLensTypes = (
138
138
  '1 15 00' => 'Sigma 10-20mm F4.0-5.6 EX DC HSM', #11
139
139
  '1 16 00' => 'Sigma APO 70-200mm F2.8 II EX DG Macro HSM', #11
140
140
  '1 17 00' => 'Sigma 50mm F1.4 EX DG HSM', #11
141
+ '1 18 60' => 'Test',
141
142
  # Panasonic/Leica lenses
142
143
  '2 01 00' => 'Leica D Vario Elmarit 14-50mm F2.8-3.5 Asph.', #11
143
144
  '2 01 10' => 'Lumix G Vario 14-45mm F3.5-5.6 Asph. Mega OIS', #16
@@ -217,8 +217,13 @@ my %ftypLookup = (
217
217
  # information for time/date-based tags (time zero is Jan 1, 1904)
218
218
  my %timeInfo = (
219
219
  Notes => 'converted from UTC to local time if the QuickTimeUTC option is set',
220
+ Shift => 'Time',
221
+ Writable => 1,
222
+ Permanent => 1,
223
+ DelValue => 0,
220
224
  # It is not uncommon for brain-dead software to use the wrong time zero,
221
225
  # so assume a time zero of Jan 1, 1970 if the date is before this
226
+ # Note: This value will be in UTC if generated by a system that is aware of the time zone
222
227
  RawConv => q{
223
228
  my $offset = (66 * 365 + 17) * 24 * 3600;
224
229
  return $val - $offset if $val >= $offset or $$self{OPTIONS}{QuickTimeUTC};
@@ -227,14 +232,18 @@ my %timeInfo = (
227
232
  }
228
233
  return $val;
229
234
  },
230
- Shift => 'Time',
231
- Writable => 1,
232
- Permanent => 1,
233
- DelValue => 0,
234
- # Note: This value will be in UTC if generated by a system that is aware of the time zone (ie. CR3 files)
235
- RawConvInv => 'GetUnixTime($val, $self->Options("QuickTimeUTC") || $$self{FileType} eq "CR3") + (66 * 365 + 17) * 24 * 3600',
235
+ RawConvInv => q{
236
+ if ($$self{FileType} eq 'CR3' and not $self->Options('QuickTimeUTC')) {
237
+ # convert to UTC
238
+ my $offset = (66 * 365 + 17) * 24 * 3600;
239
+ $val = ConvertUnixTime($val - $offset);
240
+ $val = GetUnixTime($val, 1) + $offset;
241
+ }
242
+ return $val;
243
+ },
244
+ # (all CR3 files store UTC times - PH)
236
245
  ValueConv => 'ConvertUnixTime($val, $self->Options("QuickTimeUTC") || $$self{FileType} eq "CR3")',
237
- ValueConvInv => '$val',
246
+ ValueConvInv => 'GetUnixTime($val, $self->Options("QuickTimeUTC")) + (66 * 365 + 17) * 24 * 3600',
238
247
  PrintConv => '$self->ConvertDateTime($val)',
239
248
  PrintConvInv => '$self->InverseDateTime($val)',
240
249
  # (can't put Groups here because they aren't constant!)
@@ -8639,10 +8648,10 @@ sub ProcessSampleDesc($$$)
8639
8648
  my $dirLen = $$dirInfo{DirLen} || (length($$dataPt) - $pos);
8640
8649
  return 0 if $pos + 8 > $dirLen;
8641
8650
 
8642
- my $num = Get32u($dataPt, 4); # get number of sample descriptions in table
8651
+ my $num = Get32u($dataPt, 4); # get number of sample entries in table
8643
8652
  $pos += 8;
8644
8653
  my $i;
8645
- for ($i=0; $i<$num; ++$i) { # loop through sample descriptions
8654
+ for ($i=0; $i<$num; ++$i) { # loop through sample entries
8646
8655
  last if $pos + 8 > $dirLen;
8647
8656
  my $size = Get32u($dataPt, $pos);
8648
8657
  last if $pos + $size > $dirLen;
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
34
34
  use Image::ExifTool::Exif;
35
35
  use Image::ExifTool::Minolta;
36
36
 
37
- $VERSION = '3.32';
37
+ $VERSION = '3.33';
38
38
 
39
39
  sub ProcessSRF($$$);
40
40
  sub ProcessSR2($$$);
@@ -217,6 +217,8 @@ sub PrintInvLensSpec($;$$);
217
217
  50518 => 'Sigma 100-400mm F5-6.3 DG DN OS | C', #JR (020)
218
218
  50521 => 'Sigma 85mm F1.4 DG DN | A', #JR (020)
219
219
  50522 => 'Sigma 105mm F2.8 DG DN MACRO | A', #JR (020)
220
+ 50523 => 'Sigma 65mm F2 DG DN | C', #IB (020)
221
+ 50524 => 'Sigma 35mm F2 DG DN | C', #IB (020)
220
222
 
221
223
  50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
222
224
  50993 => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 12.11
3
+ Version: 12.12
4
4
  Release: 1
5
5
  License: Artistic/GPL
6
6
  Group: Development/Libraries/Perl
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExiftoolVendored
4
- VERSION = Gem::Version.new('12.11.0')
4
+ VERSION = Gem::Version.new('12.12.0')
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exiftool_vendored
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.11.0
4
+ version: 12.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-11-27 00:00:00.000000000 Z
12
+ date: 2020-12-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool