exiftool_vendored 10.58.0 → 10.65.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.

Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +100 -1
  3. data/bin/MANIFEST +2 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +39 -38
  7. data/bin/arg_files/exif2iptc.args +3 -0
  8. data/bin/arg_files/iptc2exif.args +3 -0
  9. data/bin/config_files/example.config +16 -14
  10. data/bin/config_files/photoshop_paths.config +10 -0
  11. data/bin/exiftool +71 -65
  12. data/bin/lib/Image/ExifTool/APE.pm +5 -0
  13. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +31 -15
  14. data/bin/lib/Image/ExifTool/Canon.pm +18 -4
  15. data/bin/lib/Image/ExifTool/CanonCustom.pm +3 -0
  16. data/bin/lib/Image/ExifTool/Charset/DOSLatin1.pm +49 -0
  17. data/bin/lib/Image/ExifTool/Charset/DOSLatinUS.pm +49 -0
  18. data/bin/lib/Image/ExifTool/Charset.pm +8 -5
  19. data/bin/lib/Image/ExifTool/Exif.pm +37 -18
  20. data/bin/lib/Image/ExifTool/FLAC.pm +47 -37
  21. data/bin/lib/Image/ExifTool/FLIR.pm +3 -3
  22. data/bin/lib/Image/ExifTool/FujiFilm.pm +5 -2
  23. data/bin/lib/Image/ExifTool/GPS.pm +6 -6
  24. data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
  25. data/bin/lib/Image/ExifTool/H264.pm +2 -0
  26. data/bin/lib/Image/ExifTool/ID3.pm +8 -3
  27. data/bin/lib/Image/ExifTool/IPTC.pm +1 -1
  28. data/bin/lib/Image/ExifTool/Import.pm +4 -1
  29. data/bin/lib/Image/ExifTool/InDesign.pm +11 -7
  30. data/bin/lib/Image/ExifTool/Kodak.pm +4 -1
  31. data/bin/lib/Image/ExifTool/Lang/de.pm +31 -31
  32. data/bin/lib/Image/ExifTool/MWG.pm +12 -4
  33. data/bin/lib/Image/ExifTool/MakerNotes.pm +3 -3
  34. data/bin/lib/Image/ExifTool/Matroska.pm +2 -1
  35. data/bin/lib/Image/ExifTool/Microsoft.pm +3 -3
  36. data/bin/lib/Image/ExifTool/Minolta.pm +71 -61
  37. data/bin/lib/Image/ExifTool/Nikon.pm +286 -43
  38. data/bin/lib/Image/ExifTool/NikonCustom.pm +1049 -0
  39. data/bin/lib/Image/ExifTool/Olympus.pm +4 -1
  40. data/bin/lib/Image/ExifTool/PNG.pm +4 -7
  41. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +24 -1
  42. data/bin/lib/Image/ExifTool/Pentax.pm +20 -6
  43. data/bin/lib/Image/ExifTool/Photoshop.pm +24 -3
  44. data/bin/lib/Image/ExifTool/QuickTime.pm +545 -14
  45. data/bin/lib/Image/ExifTool/README +16 -9
  46. data/bin/lib/Image/ExifTool/RIFF.pm +8 -1
  47. data/bin/lib/Image/ExifTool/Samsung.pm +5 -4
  48. data/bin/lib/Image/ExifTool/Sigma.pm +9 -1
  49. data/bin/lib/Image/ExifTool/Sony.pm +327 -153
  50. data/bin/lib/Image/ExifTool/TagLookup.pm +3273 -3220
  51. data/bin/lib/Image/ExifTool/TagNames.pod +317 -38
  52. data/bin/lib/Image/ExifTool/Validate.pm +15 -1
  53. data/bin/lib/Image/ExifTool/WriteExif.pl +5 -0
  54. data/bin/lib/Image/ExifTool/WriteIPTC.pl +23 -1
  55. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +8 -2
  56. data/bin/lib/Image/ExifTool/WriteXMP.pl +7 -0
  57. data/bin/lib/Image/ExifTool/Writer.pl +96 -18
  58. data/bin/lib/Image/ExifTool/XMP.pm +20 -11
  59. data/bin/lib/Image/ExifTool/XMP2.pl +634 -583
  60. data/bin/lib/Image/ExifTool.pm +124 -17
  61. data/bin/lib/Image/ExifTool.pod +86 -82
  62. data/bin/perl-Image-ExifTool.spec +38 -37
  63. data/lib/exiftool_vendored/version.rb +1 -1
  64. metadata +4 -2
@@ -34,7 +34,7 @@ use Image::ExifTool::Nikon;
34
34
  use Image::ExifTool::Validate;
35
35
  use Image::ExifTool::MacOS;
36
36
 
37
- $VERSION = '3.09';
37
+ $VERSION = '3.12';
38
38
  @ISA = qw(Exporter);
39
39
 
40
40
  sub NumbersFirst($$);
@@ -240,6 +240,11 @@ The EXIF meta information is organized into different Image File Directories
240
240
  ExifTool family 1 group names. When writing EXIF information, the default
241
241
  B<Group> listed below is used unless another group is specified.
242
242
 
243
+ Mandatory tags (indicated by a colon after the B<Writable> type) may be
244
+ added automatically with default values when creating a new IFD, and the IFD
245
+ is removed automatically when deleting tags if only default-valued mandatory
246
+ tags remain.
247
+
243
248
  The table below lists all EXIF tags. Also listed are TIFF, DNG, HDP and
244
249
  other tags which are not part of the EXIF specification, but may co-exist
245
250
  with EXIF tags in some images. Tags which are part of the EXIF 2.31
@@ -367,12 +372,12 @@ This specification dictates a length for ASCII (C<string> or C<digits>) and
367
372
  binary (C<undef>) values. These lengths are given in square brackets after
368
373
  the B<Writable> format name. For tags where a range of lengths is allowed,
369
374
  the minimum and maximum lengths are separated by a comma within the
370
- brackets. IPTC strings are not null terminated. When writing, ExifTool
371
- issues a minor warning and truncates the value if it is longer than allowed
372
- by the IPTC specification. Minor errors may be ignored with the
373
- IgnoreMinorErrors (-m) option, allowing longer values to be written, but
374
- beware that values like this may cause problems for some other IPTC readers.
375
- ExifTool will happily read IPTC values of any length.
375
+ brackets. When writing, ExifTool issues a minor warning and truncates the
376
+ value if it is longer than allowed by the IPTC specification. Minor errors
377
+ may be ignored with the IgnoreMinorErrors (-m) option, allowing longer
378
+ values to be written, but beware that values like this may cause problems
379
+ for some other IPTC readers. ExifTool will happily read IPTC values of any
380
+ length.
376
381
 
377
382
  Separate IPTC date and time tags may be written with a combined date/time
378
383
  value and ExifTool automagically takes the appropriate part of the date/time
@@ -521,10 +526,10 @@ RealMedia (RM, RV and RMVB), 2) RealAudio (RA), and 3) Real Metafile (RAM
521
526
  and RPM).
522
527
  },
523
528
  Extra => q{
524
- The extra tags represent extra information extracted or generated by
525
- ExifTool that is not directly associated with another tag group. The
526
- B<Group> column lists the family 1 group name when reading. Tags with a "-"
527
- in this column are write-only.
529
+ The extra tags provide extra features or extra information extracted or
530
+ generated by ExifTool that is not directly associated with another tag
531
+ group. The B<Group> column lists the family 1 group name when reading.
532
+ Tags with a "-" in this column are write-only.
528
533
 
529
534
  Tags in the family 1 "System" group are referred to as "pseudo" tags because
530
535
  they don't represent real metadata in the file. Instead, this information
@@ -936,12 +941,14 @@ TagID: foreach $tagID (@keys) {
936
941
  # remove leading/trailing spaces on each line
937
942
  $note =~ s/(^[ \t]+|[ \t]+$)//mg;
938
943
  push @values, "($note)";
939
- } elsif ($isXMP and lc $tagID ne lc $name) {
944
+ }
945
+ if ($isXMP and lc $tagID ne lc $name) {
940
946
  # add note about different XMP Tag ID
941
- if ($$tagInfo{RootTagInfo}) {
942
- push @values, "($tagID)";
947
+ my $note = $$tagInfo{RootTagInfo} ? $tagID : "called $tagID by the spec";
948
+ if ($$tagInfo{Notes}) {
949
+ $values[-1] =~ s/^\(/($note; /;
943
950
  } else {
944
- push @values,"(called $tagID by the spec)";
951
+ push @values, "($note)";
945
952
  }
946
953
  }
947
954
  my $writeGroup;
@@ -1380,6 +1387,15 @@ TagID: foreach $tagID (@keys) {
1380
1387
  }
1381
1388
  }
1382
1389
  $writable .= '+' if $$tagInfo{List};
1390
+ push @vals, "($$tagInfo{Notes})" if $$tagInfo{Notes};
1391
+ # handle PrintConv lookups in Structure elements
1392
+ my $printConv = $$tagInfo{PrintConv};
1393
+ if (ref $printConv eq 'HASH') {
1394
+ foreach (sort keys %$printConv) {
1395
+ next if /^(OTHER|BITMASK)$/;
1396
+ push @vals, "$_ = $$printConv{$_}";
1397
+ }
1398
+ }
1383
1399
  push @$info, [
1384
1400
  $tag,
1385
1401
  [ $$tagInfo{Name} || ucfirst($tag) ],
@@ -85,7 +85,7 @@ sub ProcessSerialData($$$);
85
85
  sub ProcessFilters($$$);
86
86
  sub SwapWords($);
87
87
 
88
- $VERSION = '3.77';
88
+ $VERSION = '3.82';
89
89
 
90
90
  # Note: Removed 'USM' from 'L' lenses since it is redundant - PH
91
91
  # (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -144,6 +144,7 @@ $VERSION = '3.77';
144
144
  # 27 => 'Carl Zeiss Distagon T* 28mm f/2 ZF', #PH (must be with an adapter, because the ZF version is a Nikon mount)
145
145
  # 27 => 'EMF adapter for Canon EOS digital cameras', #50 (reports MaxFocalLength of 65535)
146
146
  # 27 => optix adapter
147
+ # 27 => Venus Optics Laowa 12mm f2.8 Zero-D or 105mm f2 (T3.2) Smooth Trans Focus (ref IB)
147
148
  28 => 'Canon EF 80-200mm f/4.5-5.6 or Tamron Lens', #32
148
149
  28.1 => 'Tamron SP AF 28-105mm f/2.8 LD Aspherical IF', #15
149
150
  28.2 => 'Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical [IF] Macro', #4
@@ -198,8 +199,11 @@ $VERSION = '3.77';
198
199
  53 => 'Canon EF-S 18-55mm f/3.5-5.6 III', #Jon Charnas
199
200
  54 => 'Canon EF-S 55-250mm f/4-5.6 IS II', #47
200
201
  60 => 'Irix 11mm f/4', #50
202
+ 80 => 'Canon TS-E 50mm f/2.8L Macro', #42
203
+ 81 => 'Canon TS-E 90mm f/2.8L Macro', #42
204
+ 82 => 'Canon TS-E 135mm f/4L Macro', #42
201
205
  94 => 'Canon TS-E 17mm f/4L', #42
202
- 95 => 'Canon TS-E 24.0mm f/3.5 L II', #43
206
+ 95 => 'Canon TS-E 24mm f/3.5L II', #43
203
207
  124 => 'Canon MP-E 65mm f/2.8 1-5x Macro Photo', #9
204
208
  125 => 'Canon TS-E 24mm f/3.5L',
205
209
  126 => 'Canon TS-E 45mm f/2.8', #15
@@ -412,11 +416,13 @@ $VERSION = '3.77';
412
416
  490 => 'Canon EF 8-15mm f/4L Fisheye USM', #Klaus Reinfeld (PH added "Fisheye")
413
417
  491 => 'Canon EF 300mm f/2.8L IS II USM or Tamron Lens', #42
414
418
  491.1 => 'Tamron SP 70-200mm F/2.8 Di VC USD G2 (A025)', #IB
419
+ 491.2 => 'Tamron 18-400mm F/3.5-6.3 Di II VC HLD (B028)', #IB
415
420
  492 => 'Canon EF 400mm f/2.8L IS II USM', #PH
416
421
  493 => 'Canon EF 500mm f/4L IS II USM or EF 24-105mm f4L IS USM', #PH
417
422
  493.1 => 'Canon EF 24-105mm f/4L IS USM', #PH (should recheck this)
418
423
  494 => 'Canon EF 600mm f/4.0L IS II USM', #PH
419
- 495 => 'Canon EF 24-70mm f/2.8L II USM', #PH
424
+ 495 => 'Canon EF 24-70mm f/2.8L II USM or Sigma Lens', #PH
425
+ 495.1 => 'Sigma 24-70mm F2.8 DG OS HSM | A', #IB (017)
420
426
  496 => 'Canon EF 200-400mm f/4L IS USM', #PH
421
427
  499 => 'Canon EF 200-400mm f/4L IS USM + 1.4x', #50
422
428
  502 => 'Canon EF 28mm f/2.8 IS USM', #PH
@@ -456,7 +462,12 @@ $VERSION = '3.77';
456
462
  36910 => 'Canon EF 70-300mm f/4-5.6 IS II USM', #42
457
463
  36912 => 'Canon EF-S 18-135mm f/3.5-5.6 IS USM', #42
458
464
  # (CN-E lenses - 0xf0xx)
465
+ 61491 => 'Canon CN-E 14mm T3.1 L F', #PH
466
+ 61492 => 'Canon CN-E 24mm T1.5 L F', #PH
467
+ # 61493 - missing CN-E 50mm T1.3 L F ?
459
468
  61494 => 'Canon CN-E 85mm T1.3 L F', #PH
469
+ 61495 => 'Canon CN-E 135mm T2.2 L F', #PH
470
+ 61496 => 'Canon CN-E 35mm T1.5 L F', #PH
460
471
  65535 => 'n/a',
461
472
  );
462
473
 
@@ -682,6 +693,7 @@ $VERSION = '3.77';
682
693
  0x3940000 => 'EOS M5', #IB
683
694
  0x3950000 => 'PowerShot G5 X',
684
695
  0x3970000 => 'PowerShot G7 X Mark II',
696
+ 0x3980000 => 'EOS M100', #42
685
697
  0x3990000 => 'PowerShot ELPH 360 HS / IXUS 285 HS / IXY 650',
686
698
  0x4010000 => 'PowerShot SX540 HS',
687
699
  0x4020000 => 'PowerShot SX420 IS',
@@ -692,9 +704,10 @@ $VERSION = '3.77';
692
704
  0x4060000 => 'PowerShot SX620 HS',
693
705
  0x4070000 => 'EOS M6',
694
706
  0x4100000 => 'PowerShot G9 X Mark II',
695
- 0x4150000 => 'PowerShot ELPH 185 / IXUS 185 / IXY 200',
707
+ 0x4150000 => 'PowerShot ELPH 185 / IXUS 185 / IXY 200',
696
708
  0x4160000 => 'PowerShot SX430 IS',
697
709
  0x4170000 => 'PowerShot SX730 HS',
710
+ 0x4180000 => 'PowerShot G1 X Mark III', #IB
698
711
  0x6040000 => 'PowerShot S100 / Digital IXUS / IXY Digital',
699
712
 
700
713
  # (see http://cweb.canon.jp/e-support/faq/answer/digitalcamera/10447-1.html for PowerShot/IXUS/IXY names)
@@ -727,6 +740,7 @@ $VERSION = '3.77';
727
740
  0x4007da8f => 'HF M30/M31/M36/M300/M306', # (LEGRIA/VIXIA)
728
741
  0x4007da90 => 'HF S20/S21/S200', # (LEGRIA/VIXIA)
729
742
  0x4007da92 => 'FS31/FS36/FS37/FS300/FS305/FS306/FS307',
743
+ 0x4007dca0 => 'EOS C300',
730
744
  0x4007dda9 => 'HF G25', # (LEGRIA)
731
745
  0x4007dfb4 => 'XC10',
732
746
 
@@ -2505,6 +2505,9 @@ sub ProcessCanonCustom2($$$)
2505
2505
  $pos = $recEnd;
2506
2506
  }
2507
2507
  if ($pos != $end) {
2508
+ # Note: a firmware bug in the EOS M5 and M6 stores an incorrect
2509
+ # size for the 2nd CanonCustom2 record, so this message is expected
2510
+ # for these models...
2508
2511
  $et->Warn('Possibly corrupted CanonCustom2 data');
2509
2512
  return 0;
2510
2513
  }
@@ -0,0 +1,49 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: DOSLatin1.pm
3
+ #
4
+ # Description: cp850 to Unicode
5
+ #
6
+ # Revisions: 2017/10/31- P. Harvey created
7
+ #
8
+ # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP850.TXT
9
+ #
10
+ # Notes: The table omits 1-byte characters with the same values as Unicode
11
+ #------------------------------------------------------------------------------
12
+ use strict;
13
+
14
+ %Image::ExifTool::Charset::DOSLatin1 = (
15
+ 0x80 => 0x00c7, 0x81 => 0x00fc, 0x82 => 0x00e9, 0x83 => 0x00e2,
16
+ 0x84 => 0x00e4, 0x85 => 0x00e0, 0x86 => 0x00e5, 0x87 => 0x00e7,
17
+ 0x88 => 0x00ea, 0x89 => 0x00eb, 0x8a => 0x00e8, 0x8b => 0x00ef,
18
+ 0x8c => 0x00ee, 0x8d => 0x00ec, 0x8e => 0x00c4, 0x8f => 0x00c5,
19
+ 0x90 => 0x00c9, 0x91 => 0x00e6, 0x92 => 0x00c6, 0x93 => 0x00f4,
20
+ 0x94 => 0x00f6, 0x95 => 0x00f2, 0x96 => 0x00fb, 0x97 => 0x00f9,
21
+ 0x98 => 0x00ff, 0x99 => 0x00d6, 0x9a => 0x00dc, 0x9b => 0x00f8,
22
+ 0x9c => 0x00a3, 0x9d => 0x00d8, 0x9e => 0x00d7, 0x9f => 0x0192,
23
+ 0xa0 => 0x00e1, 0xa1 => 0x00ed, 0xa2 => 0x00f3, 0xa3 => 0x00fa,
24
+ 0xa4 => 0x00f1, 0xa5 => 0x00d1, 0xa6 => 0x00aa, 0xa7 => 0x00ba,
25
+ 0xa8 => 0x00bf, 0xa9 => 0x00ae, 0xaa => 0x00ac, 0xab => 0x00bd,
26
+ 0xac => 0x00bc, 0xad => 0x00a1, 0xae => 0x00ab, 0xaf => 0x00bb,
27
+ 0xb0 => 0x2591, 0xb1 => 0x2592, 0xb2 => 0x2593, 0xb3 => 0x2502,
28
+ 0xb4 => 0x2524, 0xb5 => 0x00c1, 0xb6 => 0x00c2, 0xb7 => 0x00c0,
29
+ 0xb8 => 0x00a9, 0xb9 => 0x2563, 0xba => 0x2551, 0xbb => 0x2557,
30
+ 0xbc => 0x255d, 0xbd => 0x00a2, 0xbe => 0x00a5, 0xbf => 0x2510,
31
+ 0xc0 => 0x2514, 0xc1 => 0x2534, 0xc2 => 0x252c, 0xc3 => 0x251c,
32
+ 0xc4 => 0x2500, 0xc5 => 0x253c, 0xc6 => 0x00e3, 0xc7 => 0x00c3,
33
+ 0xc8 => 0x255a, 0xc9 => 0x2554, 0xca => 0x2569, 0xcb => 0x2566,
34
+ 0xcc => 0x2560, 0xcd => 0x2550, 0xce => 0x256c, 0xcf => 0x00a4,
35
+ 0xd0 => 0x00f0, 0xd1 => 0x00d0, 0xd2 => 0x00ca, 0xd3 => 0x00cb,
36
+ 0xd4 => 0x00c8, 0xd5 => 0x0131, 0xd6 => 0x00cd, 0xd7 => 0x00ce,
37
+ 0xd8 => 0x00cf, 0xd9 => 0x2518, 0xda => 0x250c, 0xdb => 0x2588,
38
+ 0xdc => 0x2584, 0xdd => 0x00a6, 0xde => 0x00cc, 0xdf => 0x2580,
39
+ 0xe0 => 0x00d3, 0xe1 => 0x00df, 0xe2 => 0x00d4, 0xe3 => 0x00d2,
40
+ 0xe4 => 0x00f5, 0xe5 => 0x00d5, 0xe6 => 0x00b5, 0xe7 => 0x00fe,
41
+ 0xe8 => 0x00de, 0xe9 => 0x00da, 0xea => 0x00db, 0xeb => 0x00d9,
42
+ 0xec => 0x00fd, 0xed => 0x00dd, 0xee => 0x00af, 0xef => 0x00b4,
43
+ 0xf0 => 0x00ad, 0xf1 => 0x00b1, 0xf2 => 0x2017, 0xf3 => 0x00be,
44
+ 0xf4 => 0x00b6, 0xf5 => 0x00a7, 0xf6 => 0x00f7, 0xf7 => 0x00b8,
45
+ 0xf8 => 0x00b0, 0xf9 => 0x00a8, 0xfa => 0x00b7, 0xfb => 0x00b9,
46
+ 0xfc => 0x00b3, 0xfd => 0x00b2, 0xfe => 0x25a0, 0xff => 0x00a0,
47
+ );
48
+
49
+ 1; # end
@@ -0,0 +1,49 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: DOSLatinUS.pm
3
+ #
4
+ # Description: cp437 to Unicode
5
+ #
6
+ # Revisions: 2017/10/31- P. Harvey created
7
+ #
8
+ # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP437.TXT
9
+ #
10
+ # Notes: The table omits 1-byte characters with the same values as Unicode
11
+ #------------------------------------------------------------------------------
12
+ use strict;
13
+
14
+ %Image::ExifTool::Charset::DOSLatinUS = (
15
+ 0x80 => 0x00c7, 0x81 => 0x00fc, 0x82 => 0x00e9, 0x83 => 0x00e2,
16
+ 0x84 => 0x00e4, 0x85 => 0x00e0, 0x86 => 0x00e5, 0x87 => 0x00e7,
17
+ 0x88 => 0x00ea, 0x89 => 0x00eb, 0x8a => 0x00e8, 0x8b => 0x00ef,
18
+ 0x8c => 0x00ee, 0x8d => 0x00ec, 0x8e => 0x00c4, 0x8f => 0x00c5,
19
+ 0x90 => 0x00c9, 0x91 => 0x00e6, 0x92 => 0x00c6, 0x93 => 0x00f4,
20
+ 0x94 => 0x00f6, 0x95 => 0x00f2, 0x96 => 0x00fb, 0x97 => 0x00f9,
21
+ 0x98 => 0x00ff, 0x99 => 0x00d6, 0x9a => 0x00dc, 0x9b => 0x00a2,
22
+ 0x9c => 0x00a3, 0x9d => 0x00a5, 0x9e => 0x20a7, 0x9f => 0x0192,
23
+ 0xa0 => 0x00e1, 0xa1 => 0x00ed, 0xa2 => 0x00f3, 0xa3 => 0x00fa,
24
+ 0xa4 => 0x00f1, 0xa5 => 0x00d1, 0xa6 => 0x00aa, 0xa7 => 0x00ba,
25
+ 0xa8 => 0x00bf, 0xa9 => 0x2310, 0xaa => 0x00ac, 0xab => 0x00bd,
26
+ 0xac => 0x00bc, 0xad => 0x00a1, 0xae => 0x00ab, 0xaf => 0x00bb,
27
+ 0xb0 => 0x2591, 0xb1 => 0x2592, 0xb2 => 0x2593, 0xb3 => 0x2502,
28
+ 0xb4 => 0x2524, 0xb5 => 0x2561, 0xb6 => 0x2562, 0xb7 => 0x2556,
29
+ 0xb8 => 0x2555, 0xb9 => 0x2563, 0xba => 0x2551, 0xbb => 0x2557,
30
+ 0xbc => 0x255d, 0xbd => 0x255c, 0xbe => 0x255b, 0xbf => 0x2510,
31
+ 0xc0 => 0x2514, 0xc1 => 0x2534, 0xc2 => 0x252c, 0xc3 => 0x251c,
32
+ 0xc4 => 0x2500, 0xc5 => 0x253c, 0xc6 => 0x255e, 0xc7 => 0x255f,
33
+ 0xc8 => 0x255a, 0xc9 => 0x2554, 0xca => 0x2569, 0xcb => 0x2566,
34
+ 0xcc => 0x2560, 0xcd => 0x2550, 0xce => 0x256c, 0xcf => 0x2567,
35
+ 0xd0 => 0x2568, 0xd1 => 0x2564, 0xd2 => 0x2565, 0xd3 => 0x2559,
36
+ 0xd4 => 0x2558, 0xd5 => 0x2552, 0xd6 => 0x2553, 0xd7 => 0x256b,
37
+ 0xd8 => 0x256a, 0xd9 => 0x2518, 0xda => 0x250c, 0xdb => 0x2588,
38
+ 0xdc => 0x2584, 0xdd => 0x258c, 0xde => 0x2590, 0xdf => 0x2580,
39
+ 0xe0 => 0x03b1, 0xe1 => 0x00df, 0xe2 => 0x0393, 0xe3 => 0x03c0,
40
+ 0xe4 => 0x03a3, 0xe5 => 0x03c3, 0xe6 => 0x00b5, 0xe7 => 0x03c4,
41
+ 0xe8 => 0x03a6, 0xe9 => 0x0398, 0xea => 0x03a9, 0xeb => 0x03b4,
42
+ 0xec => 0x221e, 0xed => 0x03c6, 0xee => 0x03b5, 0xef => 0x2229,
43
+ 0xf0 => 0x2261, 0xf1 => 0x00b1, 0xf2 => 0x2265, 0xf3 => 0x2264,
44
+ 0xf4 => 0x2320, 0xf5 => 0x2321, 0xf6 => 0x00f7, 0xf7 => 0x2248,
45
+ 0xf8 => 0x00b0, 0xf9 => 0x2219, 0xfa => 0x00b7, 0xfb => 0x221a,
46
+ 0xfc => 0x207f, 0xfd => 0x00b2, 0xfe => 0x25a0, 0xff => 0x00a0,
47
+ );
48
+
49
+ 1; # end
@@ -14,7 +14,7 @@ use strict;
14
14
  use vars qw($VERSION %csType);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
 
17
- $VERSION = '1.10';
17
+ $VERSION = '1.11';
18
18
 
19
19
  my %charsetTable; # character set tables we've loaded
20
20
 
@@ -57,6 +57,8 @@ my %unicode2byte = (
57
57
  Hebrew => 0x101,
58
58
  Latin => 0x101,
59
59
  Latin2 => 0x101,
60
+ DOSLatinUS => 0x101,
61
+ DOSLatin1 => 0x101,
60
62
  MacCroatian => 0x101,
61
63
  MacCyrillic => 0x101,
62
64
  MacGreek => 0x101,
@@ -405,10 +407,11 @@ This module contains routines used by ExifTool to translate special
405
407
  character sets. Currently, the following character sets are supported:
406
408
 
407
409
  UTF8, UTF16, UCS2, UCS4, Arabic, Baltic, Cyrillic, Greek, Hebrew, JIS,
408
- Latin, Latin2, MacArabic, MacChineseCN, MacChineseTW, MacCroatian,
409
- MacCyrillic, MacGreek, MacHebrew, MacIceland, MacJapanese, MacKorean,
410
- MacLatin2, MacRSymbol, MacRoman, MacRomanian, MacThai, MacTurkish,
411
- PDFDoc, RSymbol, ShiftJIS, Symbol, Thai, Turkish, Vietnam
410
+ Latin, Latin2, DOSLatinUS, DOSLatin1, MacArabic, MacChineseCN,
411
+ MacChineseTW, MacCroatian, MacCyrillic, MacGreek, MacHebrew, MacIceland,
412
+ MacJapanese, MacKorean, MacLatin2, MacRSymbol, MacRoman, MacRomanian,
413
+ MacThai, MacTurkish, PDFDoc, RSymbol, ShiftJIS, Symbol, Thai, Turkish,
414
+ Vietnam
412
415
 
413
416
  However, only some of these character sets are available to the user via
414
417
  ExifTool options -- the multi-byte character sets are used only internally
@@ -53,7 +53,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
53
53
  use Image::ExifTool qw(:DataAccess :Utils);
54
54
  use Image::ExifTool::MakerNotes;
55
55
 
56
- $VERSION = '3.92';
56
+ $VERSION = '3.95';
57
57
 
58
58
  sub ProcessExif($$$);
59
59
  sub WriteExif($$$);
@@ -1866,6 +1866,7 @@ my %sampleFormat = (
1866
1866
  Start => '$val',
1867
1867
  },
1868
1868
  },
1869
+ # 0x89ab - seen "11 100 130 16 0 0 0 0" in IFD0 of TIFF image from IR scanner (forum8470)
1869
1870
  0x9000 => {
1870
1871
  Name => 'ExifVersion',
1871
1872
  Writable => 'undef',
@@ -2114,14 +2115,14 @@ my %sampleFormat = (
2114
2115
  0x9217 => { #12
2115
2116
  Name => 'SensingMethod',
2116
2117
  Groups => { 2 => 'Camera' },
2117
- Notes => 'values 1 and 6 are not standard EXIF',
2118
2118
  PrintConv => {
2119
- 1 => 'Monochrome area', #12 (not standard EXIF)
2119
+ # (values 1 and 6 are not used by corresponding EXIF tag 0xa217)
2120
+ 1 => 'Monochrome area',
2120
2121
  2 => 'One-chip color area',
2121
2122
  3 => 'Two-chip color area',
2122
2123
  4 => 'Three-chip color area',
2123
2124
  5 => 'Color sequential area',
2124
- 6 => 'Monochrome linear', #12 (not standard EXIF)
2125
+ 6 => 'Monochrome linear',
2125
2126
  7 => 'Trilinear',
2126
2127
  8 => 'Color sequential linear',
2127
2128
  },
@@ -2437,11 +2438,20 @@ my %sampleFormat = (
2437
2438
  0xa401 => {
2438
2439
  Name => 'CustomRendered',
2439
2440
  Writable => 'int16u',
2441
+ Notes => q{
2442
+ only 0 and 1 are standard EXIF, but other values are used by Apple iOS
2443
+ devices
2444
+ },
2440
2445
  PrintConv => {
2441
2446
  0 => 'Normal',
2442
2447
  1 => 'Custom',
2443
- # 4 - Apple iPhone5c horizontal orientation
2444
- # 6 - Apple iPhone5c panorama
2448
+ # 2 - also seen (Apple iOS)
2449
+ 3 => 'HDR', # non-standard (Apple iOS)
2450
+ # 4 - also seen (Apple iOS) - normal image from iOS Camera app (ref http://regex.info/blog/lightroom-goodies/metadata-presets)
2451
+ 6 => 'Panorama', # non-standard (Apple iOS, horizontal or vertical)
2452
+ # 7 - also seen (Apple iOS)
2453
+ 8 => 'Portrait', # non-standard (Apple iOS, blurred background)
2454
+ # 9 - also seen (Apple iOS) (HDR Portrait?)
2445
2455
  },
2446
2456
  },
2447
2457
  0xa402 => {
@@ -4242,7 +4252,9 @@ my %subSecConv = (
4242
4252
  Writable => 1,
4243
4253
  WriteGroup => 'All',
4244
4254
  WriteCheck => '$self->CheckImage(\$val)',
4245
- # (don't allow this to be deleted -- no DelCheck)
4255
+ # Note: ExifTool 10.38 had disabled the ability to delete this -- why?
4256
+ # --> added the DelCheck in 10.61 to re-enable this
4257
+ DelCheck => '$val = ""; return undef', # can't delete, so set to empty string
4246
4258
  WriteAlso => {
4247
4259
  JpgFromRawStart => 'defined $val ? 0xfeedfeed : undef',
4248
4260
  JpgFromRawLength => 'defined $val ? 0xfeedfeed : undef',
@@ -5093,6 +5105,7 @@ sub ExifTime($)
5093
5105
  #------------------------------------------------------------------------------
5094
5106
  # Generate TIFF file from scratch (in current byte order)
5095
5107
  # Inputs: 0) hash of IFD entries (TagID => Value; multiple values space-delimited)
5108
+ # 1) raw image data reference
5096
5109
  # Returns: TIFF image data, or undef on error
5097
5110
  sub GenerateTIFF($$)
5098
5111
  {
@@ -5397,7 +5410,9 @@ sub ProcessExif($$$)
5397
5410
  $$et{Compression} = $$et{SubfileType} = '';
5398
5411
 
5399
5412
  # loop through all entries in an EXIF directory (IFD)
5400
- my ($index, $valEnd, $offList, $offHash);
5413
+ my ($index, $valEnd, $offList, $offHash, $mapFmt);
5414
+ $mapFmt = $$tagTablePtr{VARS}{MAP_FORMAT} if $$tagTablePtr{VARS};
5415
+
5401
5416
  my ($warnCount, $lastID) = (0, -1);
5402
5417
  for ($index=0; $index<$numEntries; ++$index) {
5403
5418
  if ($warnCount > 10) {
@@ -5408,16 +5423,20 @@ sub ProcessExif($$$)
5408
5423
  my $format = Get16u($dataPt, $entry+2);
5409
5424
  my $count = Get32u($dataPt, $entry+4);
5410
5425
  if ($format < 1 or $format > 13) {
5411
- $et->HDump($entry+$dataPos+$base,12,"[invalid IFD entry]",
5412
- "Bad format type: $format", 1);
5413
- # warn unless the IFD was just padded with zeros
5414
- if ($format or $validate) {
5415
- $et->Warn("Bad format ($format) for $name entry $index", $inMakerNotes);
5416
- ++$warnCount;
5426
+ if ($mapFmt and $$mapFmt{$format}) {
5427
+ $format = $$mapFmt{$format};
5428
+ } else {
5429
+ $et->HDump($entry+$dataPos+$base,12,"[invalid IFD entry]",
5430
+ "Bad format type: $format", 1);
5431
+ # warn unless the IFD was just padded with zeros
5432
+ if ($format or $validate) {
5433
+ $et->Warn("Bad format ($format) for $name entry $index", $inMakerNotes);
5434
+ ++$warnCount;
5435
+ }
5436
+ # assume corrupted IFD if this is our first entry (except Sony ILCE-7M2 firmware 1.21)
5437
+ return 0 unless $index or $$et{Model} eq 'ILCE-7M2';
5438
+ next;
5417
5439
  }
5418
- # assume corrupted IFD if this is our first entry (except Sony ILCE-7M2 firmware 1.21)
5419
- return 0 unless $index or $$et{Model} eq 'ILCE-7M2';
5420
- next;
5421
5440
  }
5422
5441
  my $formatStr = $formatName[$format]; # get name of this format
5423
5442
  my $valueDataPt = $dataPt;
@@ -5855,7 +5874,7 @@ sub ProcessExif($$$)
5855
5874
  last;
5856
5875
  } elsif ($subdirStart + 2 <= $subdirDataLen) {
5857
5876
  # attempt to determine the byte ordering by checking
5858
- # at the number of directory entries. This is an int16u
5877
+ # the number of directory entries. This is an int16u
5859
5878
  # that should be a reasonable value.
5860
5879
  my $num = Get16u($subdirDataPt, $subdirStart);
5861
5880
  if ($num & 0xff00 and ($num>>8) > ($num&0xff)) {
@@ -14,7 +14,7 @@ use strict;
14
14
  use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
 
17
- $VERSION = '1.07';
17
+ $VERSION = '1.08';
18
18
 
19
19
  sub ProcessBitStream($$$);
20
20
 
@@ -62,6 +62,11 @@ sub ProcessBitStream($$$);
62
62
  ValueConv => '$val + 1',
63
63
  },
64
64
  'Bit108-143' => 'TotalSamples',
65
+ 'Bit144-271' => { #Tim Eliseo
66
+ Name => 'MD5Signature',
67
+ Format => 'undef',
68
+ ValueConv => 'unpack("H*",$val)',
69
+ },
65
70
  );
66
71
 
67
72
  %Image::ExifTool::FLAC::Picture = (
@@ -158,47 +163,52 @@ sub ProcessBitStream($$$)
158
163
  my ($i1, $i2) = (int($b1 / 8), int($b2 / 8)); # start/end byte numbers
159
164
  my ($f1, $f2) = ($b1 % 8, $b2 % 8); # start/end bit numbers within each byte
160
165
  last if $i2 >= $dirLen;
161
- my $val = 0;
162
- my ($i, $mask, $extra);
163
- $extra = ', Mask=0x' if $verbose and ($f1 != 0 or $f2 != 7);
164
- if ($byteOrder eq 'MM') {
165
- # loop from high byte to low byte
166
- for ($i=$i1; $i<=$i2; ++$i) {
167
- $mask = 0xff;
168
- if ($i == $i1 and $f1) {
169
- # mask off high bits in first word (0 is high bit)
170
- foreach ((8-$f1) .. 7) { $mask ^= (1 << $_) }
166
+ my ($val, $extra);
167
+ # if Format is unspecified, convert the specified number of bits to an unsigned integer,
168
+ # otherwise allow HandleTag to convert whole bytes the normal way (via undefined $val)
169
+ if (ref $$tagTablePtr{$tag} ne 'HASH' or not $$tagTablePtr{$tag}{Format}) {
170
+ my ($i, $mask);
171
+ $val = 0;
172
+ $extra = ', Mask=0x' if $verbose and ($f1 != 0 or $f2 != 7);
173
+ if ($byteOrder eq 'MM') {
174
+ # loop from high byte to low byte
175
+ for ($i=$i1; $i<=$i2; ++$i) {
176
+ $mask = 0xff;
177
+ if ($i == $i1 and $f1) {
178
+ # mask off high bits in first word (0 is high bit)
179
+ foreach ((8-$f1) .. 7) { $mask ^= (1 << $_) }
180
+ }
181
+ if ($i == $i2 and $f2 < 7) {
182
+ # mask off low bits in last word (7 is low bit)
183
+ foreach (0 .. (6-$f2)) { $mask ^= (1 << $_) }
184
+ }
185
+ $val = $val * 256 + ($mask & Get8u($dataPt, $i + $dirStart));
186
+ $extra .= sprintf('%.2x', $mask) if $extra;
171
187
  }
172
- if ($i == $i2 and $f2 < 7) {
173
- # mask off low bits in last word (7 is low bit)
174
- foreach (0 .. (6-$f2)) { $mask ^= (1 << $_) }
188
+ } else {
189
+ # (FLAC is big-endian, but support little-endian bit streams
190
+ # so this routine can be used by other modules)
191
+ # loop from high byte to low byte
192
+ for ($i=$i2; $i>=$i1; --$i) {
193
+ $mask = 0xff;
194
+ if ($i == $i1 and $f1) {
195
+ # mask off low bits in first word (0 is low bit)
196
+ foreach (0 .. ($f1-1)) { $mask ^= (1 << $_) }
197
+ }
198
+ if ($i == $i2 and $f2 < 7) {
199
+ # mask off high bits in last word (7 is high bit)
200
+ foreach (($f2+1) .. 7) { $mask ^= (1 << $_) }
201
+ }
202
+ $val = $val * 256 + ($mask & Get8u($dataPt, $i + $dirStart));
203
+ $extra .= sprintf('%.2x', $mask) if $extra;
175
204
  }
176
- $val = $val * 256 + ($mask & Get8u($dataPt, $i + $dirStart));
177
- $extra .= sprintf('%.2x', $mask) if $extra;
178
205
  }
179
- } else {
180
- # (FLAC is big-endian, but support little-endian bit streams
181
- # so this routine can be used by other modules)
182
- # loop from high byte to low byte
183
- for ($i=$i2; $i>=$i1; --$i) {
184
- $mask = 0xff;
185
- if ($i == $i1 and $f1) {
186
- # mask off low bits in first word (0 is low bit)
187
- foreach (0 .. ($f1-1)) { $mask ^= (1 << $_) }
188
- }
189
- if ($i == $i2 and $f2 < 7) {
190
- # mask off high bits in last word (7 is high bit)
191
- foreach (($f2+1) .. 7) { $mask ^= (1 << $_) }
192
- }
193
- $val = $val * 256 + ($mask & Get8u($dataPt, $i + $dirStart));
194
- $extra .= sprintf('%.2x', $mask) if $extra;
206
+ # shift word down until low bit is in position 0
207
+ until ($mask & 0x01) {
208
+ $val /= 2;
209
+ $mask >>= 1;
195
210
  }
196
211
  }
197
- # shift word down until low bit is in position 0
198
- until ($mask & 0x01) {
199
- $val /= 2;
200
- $mask >>= 1;
201
- }
202
212
  $et->HandleTag($tagTablePtr, $tag, $val,
203
213
  DataPt => $dataPt,
204
214
  DataPos => $dataPos,
@@ -24,7 +24,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
24
24
  use Image::ExifTool::Exif;
25
25
  use Image::ExifTool::GPS;
26
26
 
27
- $VERSION = '1.15';
27
+ $VERSION = '1.16';
28
28
 
29
29
  sub ProcessFLIR($$;$);
30
30
  sub ProcessFLIRText($$$);
@@ -461,6 +461,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
461
461
  0x390 => { Name => 'FocusStepCount', Format => 'int16u' },
462
462
  0x45c => { Name => 'FocusDistance', Format => 'float', PrintConv => 'sprintf("%.1f m",$val)' },
463
463
  # 0x43c - string: either "Live" or the file name
464
+ 0x464 => { Name => 'FrameRate', Format => 'int16u' }, #SebastianHani
464
465
  );
465
466
 
466
467
  # FLIR measurement tools record (ref 6)
@@ -1222,8 +1223,7 @@ sub GetImageType($$$)
1222
1223
  } elsif (length $val != $w * $h * 2) {
1223
1224
  $et->Warn("Unrecognized FLIR $tag data format");
1224
1225
  } elsif (GetByteOrder() eq 'II') {
1225
- require Image::ExifTool::Sony;
1226
- $val = Image::ExifTool::Sony::MakeTiffHeader($w,$h,1,16) . $val;
1226
+ $val = Image::ExifTool::MakeTiffHeader($w,$h,1,16) . $val;
1227
1227
  $type = 'TIFF';
1228
1228
  } else {
1229
1229
  $et->Warn("Don't yet support big-endian TIFF $tag");
@@ -29,7 +29,7 @@ use vars qw($VERSION);
29
29
  use Image::ExifTool qw(:DataAccess :Utils);
30
30
  use Image::ExifTool::Exif;
31
31
 
32
- $VERSION = '1.59';
32
+ $VERSION = '1.60';
33
33
 
34
34
  sub ProcessFujiDir($$$);
35
35
  sub ProcessFaceRec($$$);
@@ -44,6 +44,8 @@ my %testedRAF = (
44
44
  '0106' => 'S5Pro Ver1.06',
45
45
  '0111' => 'S5Pro Ver1.11',
46
46
  '0114' => 'S9600 Ver1.00',
47
+ '0132' => 'X-T2 Ver1.32',
48
+ '0144' => 'X100T Ver1.44',
47
49
  '0159' => 'S2Pro Ver1.00',
48
50
  '0200' => 'X10 Ver2.00',
49
51
  '0212' => 'S3Pro Ver2.12',
@@ -56,6 +58,7 @@ my %testedRAF = (
56
58
  '0300' => 'X-E2',
57
59
  '0712' => 'S5000 Ver3.00',
58
60
  '0716' => 'S5000 Ver3.00', # (yes, 2 RAF versions with the same Software version)
61
+ '0Dgi' => 'X-A10 Ver1.01 and X-A3 Ver1.02', # (yes, non-digits in the firmware number)
59
62
  );
60
63
 
61
64
  my %faceCategories = (
@@ -1113,7 +1116,7 @@ sub WriteRAF($$)
1113
1116
  $raf->Read($hdr,0x94) == 0x94 or return 0;
1114
1117
  $hdr =~ /^FUJIFILM/ or return 0;
1115
1118
  my $ver = substr($hdr, 0x3c, 4);
1116
- $ver =~ /^\d{4}$/ or return 0;
1119
+ $ver =~ /^\d{4}$/ or $testedRAF{$ver} or return 0;
1117
1120
 
1118
1121
  # get the position and size of embedded JPEG
1119
1122
  my ($jpos, $jlen) = unpack('x84NN', $hdr);