exiftool_vendored 12.17.1 → 12.32.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +225 -1
  3. data/bin/MANIFEST +23 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +45 -43
  7. data/bin/arg_files/xmp2exif.args +2 -1
  8. data/bin/config_files/acdsee.config +193 -6
  9. data/bin/config_files/convert_regions.config +25 -14
  10. data/bin/config_files/cuepointlist.config +70 -0
  11. data/bin/config_files/example.config +2 -9
  12. data/bin/exiftool +142 -87
  13. data/bin/fmt_files/gpx.fmt +2 -2
  14. data/bin/fmt_files/gpx_wpt.fmt +2 -2
  15. data/bin/fmt_files/kml.fmt +1 -1
  16. data/bin/fmt_files/kml_track.fmt +1 -1
  17. data/bin/lib/Image/ExifTool/Apple.pm +3 -2
  18. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +30 -12
  19. data/bin/lib/Image/ExifTool/CBOR.pm +277 -0
  20. data/bin/lib/Image/ExifTool/Canon.pm +49 -18
  21. data/bin/lib/Image/ExifTool/DJI.pm +6 -6
  22. data/bin/lib/Image/ExifTool/DPX.pm +13 -2
  23. data/bin/lib/Image/ExifTool/DjVu.pm +6 -5
  24. data/bin/lib/Image/ExifTool/Exif.pm +28 -11
  25. data/bin/lib/Image/ExifTool/FITS.pm +13 -2
  26. data/bin/lib/Image/ExifTool/FlashPix.pm +35 -10
  27. data/bin/lib/Image/ExifTool/FujiFilm.pm +19 -8
  28. data/bin/lib/Image/ExifTool/GPS.pm +22 -11
  29. data/bin/lib/Image/ExifTool/Geotag.pm +13 -2
  30. data/bin/lib/Image/ExifTool/GoPro.pm +16 -1
  31. data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
  32. data/bin/lib/Image/ExifTool/ID3.pm +15 -3
  33. data/bin/lib/Image/ExifTool/JPEG.pm +74 -4
  34. data/bin/lib/Image/ExifTool/JSON.pm +27 -4
  35. data/bin/lib/Image/ExifTool/Jpeg2000.pm +393 -16
  36. data/bin/lib/Image/ExifTool/LIF.pm +153 -0
  37. data/bin/lib/Image/ExifTool/Lang/nl.pm +60 -59
  38. data/bin/lib/Image/ExifTool/M2TS.pm +137 -5
  39. data/bin/lib/Image/ExifTool/MIE.pm +4 -3
  40. data/bin/lib/Image/ExifTool/MRC.pm +341 -0
  41. data/bin/lib/Image/ExifTool/MWG.pm +3 -3
  42. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  43. data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
  44. data/bin/lib/Image/ExifTool/Microsoft.pm +298 -82
  45. data/bin/lib/Image/ExifTool/Nikon.pm +19 -8
  46. data/bin/lib/Image/ExifTool/NikonSettings.pm +28 -11
  47. data/bin/lib/Image/ExifTool/Olympus.pm +6 -3
  48. data/bin/lib/Image/ExifTool/Other.pm +93 -0
  49. data/bin/lib/Image/ExifTool/PDF.pm +9 -12
  50. data/bin/lib/Image/ExifTool/PNG.pm +8 -7
  51. data/bin/lib/Image/ExifTool/Panasonic.pm +28 -3
  52. data/bin/lib/Image/ExifTool/Pentax.pm +28 -5
  53. data/bin/lib/Image/ExifTool/PhaseOne.pm +4 -3
  54. data/bin/lib/Image/ExifTool/Photoshop.pm +6 -0
  55. data/bin/lib/Image/ExifTool/QuickTime.pm +247 -88
  56. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +283 -141
  57. data/bin/lib/Image/ExifTool/README +3 -0
  58. data/bin/lib/Image/ExifTool/RIFF.pm +89 -12
  59. data/bin/lib/Image/ExifTool/Samsung.pm +48 -10
  60. data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
  61. data/bin/lib/Image/ExifTool/Sony.pm +237 -78
  62. data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
  63. data/bin/lib/Image/ExifTool/TagLookup.pm +4125 -4028
  64. data/bin/lib/Image/ExifTool/TagNames.pod +644 -286
  65. data/bin/lib/Image/ExifTool/Torrent.pm +18 -11
  66. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  67. data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  68. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -0
  69. data/bin/lib/Image/ExifTool/WritePNG.pl +2 -0
  70. data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -0
  71. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +55 -21
  72. data/bin/lib/Image/ExifTool/WriteXMP.pl +7 -3
  73. data/bin/lib/Image/ExifTool/Writer.pl +47 -10
  74. data/bin/lib/Image/ExifTool/XMP.pm +39 -14
  75. data/bin/lib/Image/ExifTool/XMP2.pl +2 -1
  76. data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
  77. data/bin/lib/Image/ExifTool/ZISRAW.pm +121 -2
  78. data/bin/lib/Image/ExifTool.pm +223 -72
  79. data/bin/lib/Image/ExifTool.pod +114 -93
  80. data/bin/perl-Image-ExifTool.spec +43 -42
  81. data/lib/exiftool_vendored/version.rb +1 -1
  82. metadata +28 -13
@@ -17,7 +17,7 @@ use strict;
17
17
  use vars qw($VERSION);
18
18
  use Image::ExifTool qw(:DataAccess :Utils);
19
19
 
20
- $VERSION = '1.01';
20
+ $VERSION = '1.04';
21
21
 
22
22
  sub ProcessNikonSettings($$$);
23
23
 
@@ -592,7 +592,7 @@ my %infoD6 = (
592
592
  },
593
593
  },
594
594
  0x026 => { Name => 'AF-AssistIlluminator', PrintConv => \%onOff }, # CSa11 (Z7_2)
595
- # 0x027 => { Name => 'ManualFocusRingInAFMode', PrintConv => \%onOff }, # CSa18 (D6,Z7_2) capability documented in manual, but visibility (& ability to test) requires a compatible lens
595
+ 0x027 => { Name => 'ManualFocusRingInAFMode', PrintConv => \%onOff }, # CSa12 (D6,Z7_2) capability documented in manual, but visibility (& ability to test) requires a compatible lens
596
596
  0x029 => { Name => 'ISOStepSize', PrintConv => \%thirdHalfFull }, # CSb1 (D6)
597
597
  0x02a => { Name => 'ExposureControlStepSize', PrintConv => \%thirdHalfFull }, # CSb2 (D6), CSb1 (Z7_2)
598
598
  0x02b => { # CSb4 (D6), CSb2 (Z7_2)
@@ -911,14 +911,14 @@ my %infoD6 = (
911
911
  },
912
912
  0x05a => [{ # CSf6-b-1 and CSf6-b-2 (D6), CSf5-b-1 and CSf5-b-2 (Z7_2), (continued from above)
913
913
  Name => 'CmdDialsChangeMainSub',
914
- Condition => '$$self{CmdDialsChangeMainSubExposure} == 1',
914
+ Condition => '$$self{CmdDialsChangeMainSubExposure} and $$self{CmdDialsChangeMainSubExposure} == 1',
915
915
  PrintConv => {
916
916
  1 => 'Autofocus On, Exposure On',
917
917
  2 => 'Autofocus Off, Exposure On',
918
918
  },
919
919
  },{
920
920
  Name => 'CmdDialsChangeMainSub',
921
- Condition => '$$self{CmdDialsChangeMainSubExposure} == 2',
921
+ Condition => '$$self{CmdDialsChangeMainSubExposure} and $$self{CmdDialsChangeMainSubExposure} == 2',
922
922
  PrintConv => {
923
923
  1 => 'Autofocus On, Exposure On (Mode A)',
924
924
  2 => 'Autofocus Off, Exposure On (Mode A)',
@@ -1014,7 +1014,7 @@ my %infoD6 = (
1014
1014
  }],
1015
1015
  0x08b => [{ # CSf6-a-1 and CSf6-a-2 (D6), CSf5-a-1 and CSf5-a-2 (Z7_2), (continued from above)
1016
1016
  Name => 'CmdDialsReverseRotation',
1017
- Condition => '$$self{CmdDialsReverseRotExposureComp} == 1',
1017
+ Condition => '$$self{CmdDialsReverseRotExposureComp} and $$self{CmdDialsReverseRotExposureComp} == 1',
1018
1018
  PrintConv => {
1019
1019
  1 => 'No',
1020
1020
  2 => 'Shutter Speed & Aperture',
@@ -1313,7 +1313,7 @@ my %infoD6 = (
1313
1313
  1 => 'Power Aperture (Open)',
1314
1314
  2 => 'Exposure Compensation',
1315
1315
  3 => 'Subject Tracking',
1316
- 4 => 'LiveView Info Display On/Off)',
1316
+ 4 => 'LiveView Info Display On/Off',
1317
1317
  5 => 'Grid Display',
1318
1318
  6 => 'Zoom (Low)',
1319
1319
  7 => 'Zoom (1:1)',
@@ -1357,7 +1357,7 @@ my %infoD6 = (
1357
1357
  1 => 'Power Aperture (Close)',
1358
1358
  2 => 'Exposure Compensation',
1359
1359
  3 => 'Subject Tracking',
1360
- 4 => 'LiveView Info Display On/Off)',
1360
+ 4 => 'LiveView Info Display On/Off',
1361
1361
  5 => 'Grid Display',
1362
1362
  6 => 'Zoom (Low)',
1363
1363
  7 => 'Zoom (1:1)',
@@ -1578,7 +1578,7 @@ my %infoD6 = (
1578
1578
  },
1579
1579
  },{
1580
1580
  Name => 'BracketProgram',
1581
- Condition => '$$self{BracketSet} == 4',
1581
+ Condition => '$$self{BracketSet} and $$self{BracketSet} == 4',
1582
1582
  Notes => 'White Balance Bracketing',
1583
1583
  RawConv => '$$self{BracketProgram} = $val',
1584
1584
  PrintConv => {
@@ -1595,7 +1595,7 @@ my %infoD6 = (
1595
1595
  },
1596
1596
  },{
1597
1597
  Name => 'BracketProgram',
1598
- Condition => '$$self{BracketSet} == 5',
1598
+ Condition => '$$self{BracketSet} and $$self{BracketSet} == 5',
1599
1599
  Notes => 'Active-D Bracketing',
1600
1600
  RawConv => '$$self{BracketProgram} = $val',
1601
1601
  Mask => 0x0f,
@@ -1802,9 +1802,9 @@ my %infoD6 = (
1802
1802
  },
1803
1803
  },
1804
1804
  0x139 => { Name => 'PlaybackFlickUp', RawConv => '$$self{PlaybackFlickUp} = $val', PrintConv => \%flickUpDownD6 }, # CSf12-1-a # (D6)
1805
- 0x13a => { Name => 'PlaybackFlickUpRating', Condition => '$$self{PlaybackFlickUp} == 1', Notes => 'Meaningful only when PlaybackFlickUp is Rating', PrintConv => \%flickUpDownRatingD6 }, # CSf12-1-b # (D6)
1805
+ 0x13a => { Name => 'PlaybackFlickUpRating', Condition => '$$self{PlaybackFlickUp} and $$self{PlaybackFlickUp} == 1', Notes => 'Meaningful only when PlaybackFlickUp is Rating', PrintConv => \%flickUpDownRatingD6 }, # CSf12-1-b # (D6)
1806
1806
  0x13b => { Name => 'PlaybackFlickDown', RawConv => '$$self{PlaybackFlickDown} = $val', PrintConv => \%flickUpDownD6 }, # CSf12-2-a # (D6)
1807
- 0x13c => { Name => 'PlaybackFlickDownRating', Condition => '$$self{PlaybackFlickDown} == 1', Notes => 'Meaningful only when PlaybackFlickDown is Rating', PrintConv => \%flickUpDownRatingD6 }, # CSf12-2-b # (D6)
1807
+ 0x13c => { Name => 'PlaybackFlickDownRating', Condition => '$$self{PlaybackFlickDown} and $$self{PlaybackFlickDown} == 1', Notes => 'Meaningful only when PlaybackFlickDown is Rating', PrintConv => \%flickUpDownRatingD6 }, # CSf12-2-b # (D6)
1808
1808
  0x13d => { # CSg2-d (D6)
1809
1809
  Name => 'MovieFunc3Button',
1810
1810
  PrintConv => {
@@ -1919,6 +1919,23 @@ my %infoD6 = (
1919
1919
  10 => 'Auto (Animals)',
1920
1920
  },
1921
1921
  },
1922
+ 0x170 => { Name => 'PreferSubSelectorCenter', PrintConv => \%offOn }, # CSf13 (D6 firmware v1.2.0)
1923
+ 0x171 => { # CSb8 (D6 firmware v1.3.0)
1924
+ Name => 'KeepExposureWithTeleconverter',
1925
+ PrintConv => {
1926
+ 1 => 'Off',
1927
+ 2 => 'Shutter Speed',
1928
+ 3 => 'ISO',
1929
+ },
1930
+ },
1931
+ 0x174 => { # CSa17-d (D6 firmware v1.2.0)
1932
+ Name => 'FocusPointSelectionSpeed',
1933
+ PrintConv => {
1934
+ 1 => 'Normal',
1935
+ 2 => 'High',
1936
+ 3 => 'Very High',
1937
+ },
1938
+ },
1922
1939
  );
1923
1940
 
1924
1941
  #------------------------------------------------------------------------------
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
40
40
  use Image::ExifTool::Exif;
41
41
  use Image::ExifTool::APP12;
42
42
 
43
- $VERSION = '2.70';
43
+ $VERSION = '2.74';
44
44
 
45
45
  sub PrintLensInfo($$$);
46
46
 
@@ -113,6 +113,8 @@ my %olympusLensTypes = (
113
113
  '0 34 00' => 'Olympus Zuiko Digital ED 9-18mm F4.0-5.6', #7
114
114
  '0 34 10' => 'Olympus M.Zuiko Digital ED 12-45mm F4.0 Pro', #IB
115
115
  '0 35 00' => 'Olympus Zuiko Digital 14-54mm F2.8-3.5 II', #PH
116
+ '0 35 10' => 'Olympus M.Zuiko 100-400mm F5.0-6.3', #IB
117
+ '0 36 10' => 'Olympus M.Zuiko Digital ED 8-25mm F4 Pro', #IB
116
118
  # Sigma lenses
117
119
  '1 01 00' => 'Sigma 18-50mm F3.5-5.6 DC', #8
118
120
  '1 01 10' => 'Sigma 30mm F2.8 EX DN', #NJ
@@ -138,7 +140,6 @@ my %olympusLensTypes = (
138
140
  '1 15 00' => 'Sigma 10-20mm F4.0-5.6 EX DC HSM', #11
139
141
  '1 16 00' => 'Sigma APO 70-200mm F2.8 II EX DG Macro HSM', #11
140
142
  '1 17 00' => 'Sigma 50mm F1.4 EX DG HSM', #11
141
- '1 18 60' => 'Test',
142
143
  # Panasonic/Leica lenses
143
144
  '2 01 00' => 'Leica D Vario Elmarit 14-50mm F2.8-3.5 Asph.', #11
144
145
  '2 01 10' => 'Lumix G Vario 14-45mm F3.5-5.6 Asph. Mega OIS', #16
@@ -183,6 +184,7 @@ my %olympusLensTypes = (
183
184
  '2 36 10' => 'Leica DG Elmarit 200mm F2.8 Power OIS', #IB
184
185
  '2 37 10' => 'Leica DG Vario-Elmarit 50-200mm F2.8-4 Asph. Power OIS', #IB
185
186
  '2 38 10' => 'Leica DG Vario-Summilux 10-25mm F1.7 Asph.', #IB
187
+ '2 40 10' => 'Leica DG Vario-Summilux 25-50mm F1.7 Asph.', #IB (H-X2550)
186
188
  '3 01 00' => 'Leica D Vario Elmarit 14-50mm F2.8-3.5 Asph.', #11
187
189
  '3 02 00' => 'Leica D Summilux 25mm F1.4 Asph.', #11
188
190
  # Tamron lenses
@@ -429,6 +431,7 @@ my %olympusCameraTypes = (
429
431
  S0085 => 'E-PL10', #IB
430
432
  S0089 => 'E-M5MarkIII',
431
433
  S0092 => 'E-M1MarkIII', #IB
434
+ S0093 => 'E-P7', #IB
432
435
  SR45 => 'D220',
433
436
  SR55 => 'D320L',
434
437
  SR83 => 'D340L',
@@ -3952,7 +3955,7 @@ my %indexInfo = (
3952
3955
  1 => 'LensTypeModel',
3953
3956
  },
3954
3957
  Notes => 'based on tags found in some Panasonic RW2 images',
3955
- SeparateTable => 'LensType',
3958
+ SeparateTable => 'Olympus LensType',
3956
3959
  ValueConv => '"$val[0] $val[1]"',
3957
3960
  PrintConv => \%olympusLensTypes,
3958
3961
  },
@@ -0,0 +1,93 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: Other.pm
3
+ #
4
+ # Description: Read meta information from other uncommon formats
5
+ #
6
+ # Revisions: 2021/07/16 - P. Harvey Created
7
+ #
8
+ # References: 1) PFM - http://www.pauldebevec.com/Research/HDR/PFM/
9
+ #------------------------------------------------------------------------------
10
+
11
+ package Image::ExifTool::Other;
12
+
13
+ use strict;
14
+ use vars qw($VERSION);
15
+ use Image::ExifTool qw(:DataAccess :Utils);
16
+ use Image::ExifTool::Exif;
17
+
18
+ $VERSION = '1.00';
19
+
20
+ # Other info
21
+ %Image::ExifTool::Other::PFM = (
22
+ GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' },
23
+ VARS => { NO_ID => 1 },
24
+ NOTES => q{
25
+ Tags extracted from Portable FloatMap images. See
26
+ L<http://www.pauldebevec.com/Research/HDR/PFM/> for the specification.
27
+ },
28
+ ColorSpace => { PrintConv => { PF => 'RGB', 'Pf' => 'Monochrome'} },
29
+ ImageWidth => { },
30
+ ImageHeight => { },
31
+ ByteOrder => { PrintConv => '$val > 0 ? "Big-endian" : "Little-endian"' },
32
+ );
33
+
34
+ #------------------------------------------------------------------------------
35
+ # Extract information from a Portable FloatMap image
36
+ # Inputs: 0) ExifTool object reference, 1) dirInfo reference
37
+ # Returns: 1 on success, 0 if this wasn't a valid PFM file
38
+ sub ProcessPFM2($$)
39
+ {
40
+ my ($et, $dirInfo) = @_;
41
+ my $raf = $$dirInfo{RAF};
42
+ my $buff;
43
+ return 0 unless $raf->Read($buff, 256) and $buff =~ /^(P[Ff])\x0a(\d+) (\d+)\x0a([-+0-9.]+)\x0a/;
44
+ $et->SetFileType('PFM', 'image/x-pfm');
45
+ my $tagTablePtr = GetTagTable('Image::ExifTool::Other::PFM');
46
+ $et->HandleTag($tagTablePtr, ColorSpace => $1);
47
+ $et->HandleTag($tagTablePtr, ImageWidth => $2);
48
+ $et->HandleTag($tagTablePtr, ImageHeight => $3);
49
+ $et->HandleTag($tagTablePtr, ByteOrder => $4);
50
+ # hack to set proper file description (extension is the same for Printer Font Metrics files)
51
+ $Image::ExifTool::static_vars{OverrideFileDescription}{PFM} = 'Portable FloatMap',
52
+ return 1;
53
+ }
54
+
55
+ 1; # end
56
+
57
+ __END__
58
+
59
+ =head1 NAME
60
+
61
+ Image::ExifTool::Other - Read meta information from other uncommon formats
62
+
63
+ =head1 SYNOPSIS
64
+
65
+ This module is used by Image::ExifTool
66
+
67
+ =head1 DESCRIPTION
68
+
69
+ This module contains routines required by Image::ExifTool to extract
70
+ information from Portable FloatMap (PFM) images.
71
+
72
+ =head1 AUTHOR
73
+
74
+ Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
75
+
76
+ This library is free software; you can redistribute it and/or modify it
77
+ under the same terms as Perl itself.
78
+
79
+ =head1 REFERENCES
80
+
81
+ =over 4
82
+
83
+ =item PFM L<http://www.pauldebevec.com/Research/HDR/PFM/>
84
+
85
+ =back
86
+
87
+ =head1 SEE ALSO
88
+
89
+ L<Image::ExifTool::TagNames/Other Tags>,
90
+ L<Image::ExifTool(3pm)|Image::ExifTool>
91
+
92
+ =cut
93
+
@@ -21,7 +21,7 @@ use vars qw($VERSION $AUTOLOAD $lastFetched);
21
21
  use Image::ExifTool qw(:DataAccess :Utils);
22
22
  require Exporter;
23
23
 
24
- $VERSION = '1.51';
24
+ $VERSION = '1.53';
25
25
 
26
26
  sub FetchObject($$$$);
27
27
  sub ExtractObject($$;$$);
@@ -280,7 +280,10 @@ my %supportedFilter = (
280
280
  ConvertToDict => 1,
281
281
  },
282
282
  Cs1 => {
283
- SubDirectory => { TagTable => 'Image::ExifTool::PDF::Cs1' },
283
+ SubDirectory => { TagTable => 'Image::ExifTool::PDF::ICCBased' },
284
+ },
285
+ CS0 => {
286
+ SubDirectory => { TagTable => 'Image::ExifTool::PDF::ICCBased' },
284
287
  },
285
288
  );
286
289
 
@@ -291,14 +294,7 @@ my %supportedFilter = (
291
294
  },
292
295
  );
293
296
 
294
- # tags in PDF Cs1 dictionary
295
- %Image::ExifTool::PDF::Cs1 = (
296
- _stream => {
297
- SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' },
298
- },
299
- );
300
-
301
- # tags in PDF ICCBased dictionary
297
+ # tags in PDF ICCBased, Cs1 and CS0 dictionaries
302
298
  %Image::ExifTool::PDF::ICCBased = (
303
299
  _stream => {
304
300
  SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' },
@@ -1989,16 +1985,17 @@ sub ProcessDict($$$$;$$)
1989
1985
  } else {
1990
1986
  $val = ReadPDFValue($val);
1991
1987
  }
1992
- # convert from UTF-16 (big endian) to UTF-8 or Latin if necessary
1993
- # unless this is binary data (hex-encoded strings would not have been converted)
1994
1988
  if (ref $val) {
1995
1989
  if (ref $val eq 'ARRAY') {
1990
+ delete $$et{LIST_TAGS}{$tagInfo} if $$tagInfo{List};
1996
1991
  my $v;
1997
1992
  foreach $v (@$val) {
1998
1993
  $et->FoundTag($tagInfo, $v);
1999
1994
  }
2000
1995
  }
2001
1996
  } elsif (defined $val) {
1997
+ # convert from UTF-16 (big endian) to UTF-8 or Latin if necessary
1998
+ # unless this is binary data (hex-encoded strings would not have been converted)
2002
1999
  my $format = $$tagInfo{Format} || $$tagInfo{Writable} || 'string';
2003
2000
  $val = ConvertPDFDate($val) if $format eq 'date';
2004
2001
  if (not $$tagInfo{Binary} and $val =~ /[\x18-\x1f\x80-\xff]/) {
@@ -36,7 +36,7 @@ use strict;
36
36
  use vars qw($VERSION $AUTOLOAD %stdCase);
37
37
  use Image::ExifTool qw(:DataAccess :Utils);
38
38
 
39
- $VERSION = '1.56';
39
+ $VERSION = '1.59';
40
40
 
41
41
  sub ProcessPNG_tEXt($$$);
42
42
  sub ProcessPNG_iTXt($$$);
@@ -89,7 +89,7 @@ $Image::ExifTool::PNG::colorType = -1;
89
89
 
90
90
  # data and text chunk types
91
91
  my %isDatChunk = ( IDAT => 1, JDAT => 1, JDAA => 1 );
92
- my %isTxtChunk = ( tEXt => 1, zTXt => 1, iTXt => 1 );
92
+ my %isTxtChunk = ( tEXt => 1, zTXt => 1, iTXt => 1, eXIf => 1 );
93
93
 
94
94
  # chunks that we shouldn't move other chunks across (ref 3)
95
95
  my %noLeapFrog = ( SAVE => 1, SEEK => 1, IHDR => 1, JHDR => 1, IEND => 1, MEND => 1,
@@ -478,6 +478,8 @@ my %unreg = ( Notes => 'unregistered' );
478
478
  if the L<Compress|../ExifTool.html#Compress> option is used and Compress::Zlib is available. Raw profile
479
479
  information is always created as compressed zTXt if Compress::Zlib is
480
480
  available, or tEXt otherwise. Standard XMP is written as uncompressed iTXt.
481
+ User-defined tags may set an 'iTXt' flag in the tag definition to be written
482
+ only as iTXt.
481
483
 
482
484
  Alternate languages are accessed by suffixing the tag name with a '-',
483
485
  followed by an RFC 3066 language code (eg. "PNG:Comment-fr", or
@@ -975,7 +977,7 @@ sub FoundPNG($$$$;$$$$)
975
977
  $$tagInfo{LangCode} = $lang if $lang;
976
978
  # make unknown profiles binary data type
977
979
  $$tagInfo{Binary} = 1 if $tag =~ /^Raw profile type /;
978
- $verbose and $et->VPrint(0, " | [adding $tag]\n");
980
+ $verbose and $et->VPrint(0, " [adding $tag]\n");
979
981
  AddTagToTable($tagTablePtr, $tag, $tagInfo);
980
982
  }
981
983
  #
@@ -1382,9 +1384,8 @@ sub ProcessPNG($$)
1382
1384
  # to add it as a text profile chunk if this isn't successful
1383
1385
  # (ie. if Compress::Zlib wasn't available)
1384
1386
  Add_iCCP($et, $outfile);
1385
- AddChunks($et, $outfile) or $err = 1; # all all text chunks
1386
- # add EXIF before end chunk if not found already
1387
- AddChunks($et, $outfile, 'IFD0') if $chunk eq $endChunk;
1387
+ AddChunks($et, $outfile) or $err = 1; # add all text chunks
1388
+ AddChunks($et, $outfile, 'IFD0') or $err = 1; # and eXIf chunk
1388
1389
  } elsif ($chunk eq 'PLTE') {
1389
1390
  # iCCP chunk must come before PLTE (and IDAT, handled above)
1390
1391
  # (ignore errors -- will add later as text profile if this fails)
@@ -1444,7 +1445,7 @@ sub ProcessPNG($$)
1444
1445
  } else {
1445
1446
  $msg = 'fixed';
1446
1447
  }
1447
- $et->WarnOnce("Text chunk(s) found after $$et{FileType} $wasDat ($msg)", 1);
1448
+ $et->WarnOnce("Text/EXIF chunk(s) found after $$et{FileType} $wasDat ($msg)", 1);
1448
1449
  }
1449
1450
  # read chunk data and CRC
1450
1451
  unless ($raf->Read($dbuf,$len)==$len and $raf->Read($cbuf, 4)==4) {
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
37
37
  use Image::ExifTool qw(:DataAccess :Utils);
38
38
  use Image::ExifTool::Exif;
39
39
 
40
- $VERSION = '2.14';
40
+ $VERSION = '2.16';
41
41
 
42
42
  sub ProcessLeicaLEIC($$$);
43
43
  sub WhiteBalanceConv($;$$);
@@ -449,7 +449,7 @@ my %shootingMode = (
449
449
  same as the number printed on the camera body
450
450
  },
451
451
  PrintConv => q{
452
- return $val unless $val=~/^([A-Z]\d{2})(\d{2})(\d{2})(\d{2})(\d{4})/;
452
+ return $val unless $val=~/^([A-Z][0-9A-Z]{2})(\d{2})(\d{2})(\d{2})(\d{4})/;
453
453
  my $yr = $2 + ($2 < 70 ? 2000 : 1900);
454
454
  return "($1) $yr:$3:$4 no. $5";
455
455
  },
@@ -1423,6 +1423,18 @@ my %shootingMode = (
1423
1423
  Name => 'NoiseReductionStrength',
1424
1424
  Writable => 'rational64s',
1425
1425
  },
1426
+ 0xe4 => { #IB
1427
+ Name => 'LensTypeModel',
1428
+ Condition => '$format eq "int16u"',
1429
+ Writable => 'int16u',
1430
+ RawConv => q{
1431
+ return undef unless $val;
1432
+ require Image::ExifTool::Olympus; # (to load Composite LensID)
1433
+ return $val;
1434
+ },
1435
+ ValueConv => '$_=sprintf("%.4x",$val); s/(..)(..)/$2 $1/; $_',
1436
+ ValueConvInv => '$val =~ s/(..) (..)/$2$1/; hex($val)',
1437
+ },
1426
1438
  0x0e00 => {
1427
1439
  Name => 'PrintIM',
1428
1440
  Description => 'Print Image Matching',
@@ -2118,6 +2130,7 @@ my %shootingMode = (
2118
2130
  Name => 'UserProfile',
2119
2131
  Writable => 'string',
2120
2132
  },
2133
+ # 0x357 int32u - 0=DNG, 3162=JPG (ref 23)
2121
2134
  0x359 => { #23
2122
2135
  Name => 'ISOSelected',
2123
2136
  Writable => 'int32s',
@@ -2134,7 +2147,19 @@ my %shootingMode = (
2134
2147
  PrintConv => 'sprintf("%.1f", $val)',
2135
2148
  PrintConvInv => '$val',
2136
2149
  },
2137
- # 0x357 int32u - 0=DNG, 3162=JPG (ref 23)
2150
+ 0x035b => { #IB
2151
+ Name => 'CorrelatedColorTemp', # (in Kelvin)
2152
+ Writable => 'int16u',
2153
+ },
2154
+ 0x035c => { #IB
2155
+ Name => 'ColorTint', # (same units as Adobe is using)
2156
+ Writable => 'int16s',
2157
+ },
2158
+ 0x035d => { #IB
2159
+ Name => 'WhitePoint', # (x/y)
2160
+ Writable => 'rational64u',
2161
+ Count => 2,
2162
+ },
2138
2163
  );
2139
2164
 
2140
2165
  # Type 2 tags (ref PH)
@@ -58,7 +58,7 @@ use Image::ExifTool::Exif;
58
58
  use Image::ExifTool::GPS;
59
59
  use Image::ExifTool::HP;
60
60
 
61
- $VERSION = '3.36';
61
+ $VERSION = '3.39';
62
62
 
63
63
  sub CryptShutterCount($$);
64
64
  sub PrintFilter($$$);
@@ -340,6 +340,7 @@ sub DecodeAFPoints($$$$;$);
340
340
  '8 64' => 'HD PENTAX-D FA* 50mm F1.4 SDM AW', #27
341
341
  '8 65' => 'HD PENTAX-D FA 70-210mm F4 ED SDM WR', #PH
342
342
  '8 66' => 'HD PENTAX-D FA 85mm F1.4 ED SDM AW', #James O'Neill
343
+ '8 195' => 'HD PENTAX DA* 16-50mm F2.8 ED PLM AW', #27
343
344
  '8 196' => 'HD PENTAX-DA* 11-18mm F2.8 ED DC AW', #29
344
345
  '8 197' => 'HD PENTAX-DA 55-300mm F4.5-6.3 ED PLM WR RE', #29
345
346
  '8 198' => 'smc PENTAX-DA L 18-50mm F4-5.6 DC WR RE', #29
@@ -548,6 +549,7 @@ my %pentaxModelID = (
548
549
  0x13222 => 'K-70', #29 (Ricoh)
549
550
  0x1322c => 'KP', #29 (Ricoh)
550
551
  0x13240 => 'K-1 Mark II', # (Ricoh)
552
+ 0x13254 => 'K-3 Mark III', #IB (Ricoh)
551
553
  0x13290 => 'WG-70', # (Ricoh)
552
554
  );
553
555
 
@@ -2222,6 +2224,7 @@ my %binaryDataAttrs = (
2222
2224
  17 => '17 (K-70)', #29
2223
2225
  18 => '18 (KP)', #PH
2224
2226
  19 => '19 (GR III)', #PH
2227
+ 20 => '20 (K-3III)', #PH
2225
2228
  },
2226
2229
  },
2227
2230
  0x0067 => { #PH (K-5)
@@ -2454,6 +2457,7 @@ my %binaryDataAttrs = (
2454
2457
  '2 0' => 'Standard',
2455
2458
  '3 0' => 'Fast',
2456
2459
  # '1 108' - seen for GR III
2460
+ # '3 84' - seen for K-3III
2457
2461
  },
2458
2462
  },
2459
2463
  0x007b => { #PH (K-5)
@@ -2597,8 +2601,9 @@ my %binaryDataAttrs = (
2597
2601
  },
2598
2602
  },
2599
2603
  },
2600
- 0x0095 => { #31
2604
+ 0x0095 => [{ #31
2601
2605
  Name => 'SkinToneCorrection',
2606
+ Condition => '$count == 2',
2602
2607
  Writable => 'int8s',
2603
2608
  Count => 2,
2604
2609
  PrintConv => {
@@ -2606,7 +2611,15 @@ my %binaryDataAttrs = (
2606
2611
  '1 1' => 'On (type 1)',
2607
2612
  '1 2' => 'On (type 2)',
2608
2613
  },
2609
- },
2614
+ },{
2615
+ Name => 'SkinToneCorrection',
2616
+ Condition => '$count == 3',
2617
+ Writable => 'int8s',
2618
+ Count => 3,
2619
+ PrintConv => {
2620
+ '0 0 0' => 'Off',
2621
+ },
2622
+ }],
2610
2623
  0x0096 => { #31
2611
2624
  Name => 'ClarityControl',
2612
2625
  Writable => 'int8s',
@@ -2842,8 +2855,18 @@ my %binaryDataAttrs = (
2842
2855
  # High: 0000000238c0e960fde0f9203140f5a0fce0f1e031403f00e600fb00f7803760f120fc60ef403460
2843
2856
  # Very High:000000023d20e520fdc0f7203420f4c0fb60ee6036404400e120fae0f5403aa0f020fac0eb403a00
2844
2857
  },
2845
- # 0x021c - undef[18] (K-5)
2846
- # 0x021d - undef[18] (K-5)
2858
+ 0x021c => { #IB
2859
+ Name => 'ColorMatrixA2',
2860
+ Format => 'int16s',
2861
+ Writable => 'undef',
2862
+ Count => 9,
2863
+ },
2864
+ 0x021d => { #IB
2865
+ Name => 'ColorMatrixB2',
2866
+ Format => 'int16s',
2867
+ Writable => 'undef',
2868
+ Count => 9,
2869
+ },
2847
2870
  # 0x021e - undef[8] (K-5, Q)
2848
2871
  0x021f => { #JD
2849
2872
  Name => 'AFInfo',
@@ -15,7 +15,7 @@ use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
  use Image::ExifTool::Exif;
17
17
 
18
- $VERSION = '1.06';
18
+ $VERSION = '1.07';
19
19
 
20
20
  sub WritePhaseOne($$$);
21
21
  sub ProcessPhaseOne($$$);
@@ -73,10 +73,11 @@ my @formatName = ( undef, 'string', 'int16s', undef, 'int32s' );
73
73
  PrintConv => { #PH
74
74
  1 => 'RAW 1', #? (encrypted)
75
75
  2 => 'RAW 2', #? (encrypted)
76
- 3 => 'IIQ L',
76
+ 3 => 'IIQ L', # (now "L14", ref IB)
77
77
  # 4?
78
78
  5 => 'IIQ S',
79
- 6 => 'IIQ Sv2',
79
+ 6 => 'IIQ Sv2', # (now "S14" for "IIQ 14 Smart" and "IIQ 14 Sensor+", ref IB)
80
+ 8 => 'IIQ L16', #IB ("IIQ 16 Extended" and "IIQ 16 Large")
80
81
  },
81
82
  },
82
83
  0x010f => {
@@ -988,6 +988,12 @@ sub ProcessPhotoshop($$$)
988
988
  $size += 1 if $size & 0x01; # size is padded to an even # bytes
989
989
  $pos += $size;
990
990
  }
991
+ # warn about incorrect IPTCDigest
992
+ if ($$et{VALUE}{IPTCDigest} and $$et{VALUE}{CurrentIPTCDigest} and
993
+ $$et{VALUE}{IPTCDigest} ne $$et{VALUE}{CurrentIPTCDigest})
994
+ {
995
+ $et->WarnOnce('IPTCDigest is not current. XMP may be out of sync');
996
+ }
991
997
  delete $$et{LOW_PRIORITY_DIR}{'*'};
992
998
  return $success;
993
999
  }