exiftool-vendored.exe 12.31.0 → 12.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/LICENSE +254 -247
  2. package/bin/exiftool_files/Changes +130 -4
  3. package/bin/exiftool_files/README +45 -45
  4. package/bin/exiftool_files/arg_files/xmp2exif.args +2 -1
  5. package/bin/exiftool_files/exiftool.pl +143 -101
  6. package/bin/exiftool_files/lib/File/RandomAccess.pm +1 -1
  7. package/bin/exiftool_files/lib/File/RandomAccess.pod +2 -2
  8. package/bin/exiftool_files/lib/Image/ExifTool/AES.pm +1 -1
  9. package/bin/exiftool_files/lib/Image/ExifTool/AFCP.pm +1 -1
  10. package/bin/exiftool_files/lib/Image/ExifTool/AIFF.pm +1 -1
  11. package/bin/exiftool_files/lib/Image/ExifTool/APE.pm +1 -1
  12. package/bin/exiftool_files/lib/Image/ExifTool/APP12.pm +1 -1
  13. package/bin/exiftool_files/lib/Image/ExifTool/ASF.pm +1 -1
  14. package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +1 -1
  15. package/bin/exiftool_files/lib/Image/ExifTool/Audible.pm +1 -1
  16. package/bin/exiftool_files/lib/Image/ExifTool/BMP.pm +1 -1
  17. package/bin/exiftool_files/lib/Image/ExifTool/BPG.pm +1 -1
  18. package/bin/exiftool_files/lib/Image/ExifTool/BZZ.pm +1 -1
  19. package/bin/exiftool_files/lib/Image/ExifTool/BigTIFF.pm +1 -1
  20. package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +17 -5
  21. package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +331 -0
  22. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +171 -13
  23. package/bin/exiftool_files/lib/Image/ExifTool/CanonCustom.pm +13 -3
  24. package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +1 -1
  25. package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +1 -1
  26. package/bin/exiftool_files/lib/Image/ExifTool/CaptureOne.pm +1 -1
  27. package/bin/exiftool_files/lib/Image/ExifTool/Casio.pm +1 -1
  28. package/bin/exiftool_files/lib/Image/ExifTool/Charset.pm +3 -1
  29. package/bin/exiftool_files/lib/Image/ExifTool/DICOM.pm +1 -1
  30. package/bin/exiftool_files/lib/Image/ExifTool/DJI.pm +1 -1
  31. package/bin/exiftool_files/lib/Image/ExifTool/DNG.pm +1 -1
  32. package/bin/exiftool_files/lib/Image/ExifTool/DPX.pm +1 -1
  33. package/bin/exiftool_files/lib/Image/ExifTool/DV.pm +1 -1
  34. package/bin/exiftool_files/lib/Image/ExifTool/DarwinCore.pm +3 -3
  35. package/bin/exiftool_files/lib/Image/ExifTool/DjVu.pm +1 -1
  36. package/bin/exiftool_files/lib/Image/ExifTool/EXE.pm +1 -1
  37. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +118 -4
  38. package/bin/exiftool_files/lib/Image/ExifTool/FITS.pm +1 -1
  39. package/bin/exiftool_files/lib/Image/ExifTool/FLAC.pm +1 -1
  40. package/bin/exiftool_files/lib/Image/ExifTool/FLIF.pm +1 -1
  41. package/bin/exiftool_files/lib/Image/ExifTool/FLIR.pm +48 -11
  42. package/bin/exiftool_files/lib/Image/ExifTool/Fixup.pm +1 -1
  43. package/bin/exiftool_files/lib/Image/ExifTool/Flash.pm +1 -1
  44. package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +1 -1
  45. package/bin/exiftool_files/lib/Image/ExifTool/Font.pm +1 -1
  46. package/bin/exiftool_files/lib/Image/ExifTool/FotoStation.pm +1 -1
  47. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +1 -1
  48. package/bin/exiftool_files/lib/Image/ExifTool/GE.pm +1 -1
  49. package/bin/exiftool_files/lib/Image/ExifTool/GIF.pm +6 -2
  50. package/bin/exiftool_files/lib/Image/ExifTool/GIMP.pm +1 -1
  51. package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +15 -11
  52. package/bin/exiftool_files/lib/Image/ExifTool/GeoTiff.pm +1 -1
  53. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +14 -3
  54. package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +1 -1
  55. package/bin/exiftool_files/lib/Image/ExifTool/H264.pm +1 -1
  56. package/bin/exiftool_files/lib/Image/ExifTool/HP.pm +1 -1
  57. package/bin/exiftool_files/lib/Image/ExifTool/HTML.pm +1 -1
  58. package/bin/exiftool_files/lib/Image/ExifTool/HtmlDump.pm +1 -1
  59. package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +97 -5
  60. package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +1 -1
  61. package/bin/exiftool_files/lib/Image/ExifTool/IPTC.pm +1 -1
  62. package/bin/exiftool_files/lib/Image/ExifTool/ISO.pm +1 -1
  63. package/bin/exiftool_files/lib/Image/ExifTool/ITC.pm +1 -1
  64. package/bin/exiftool_files/lib/Image/ExifTool/Import.pm +1 -1
  65. package/bin/exiftool_files/lib/Image/ExifTool/InDesign.pm +1 -1
  66. package/bin/exiftool_files/lib/Image/ExifTool/JPEG.pm +6 -2
  67. package/bin/exiftool_files/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  68. package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +8 -4
  69. package/bin/exiftool_files/lib/Image/ExifTool/JVC.pm +1 -1
  70. package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +155 -25
  71. package/bin/exiftool_files/lib/Image/ExifTool/Kodak.pm +1 -1
  72. package/bin/exiftool_files/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  73. package/bin/exiftool_files/lib/Image/ExifTool/LIF.pm +1 -1
  74. package/bin/exiftool_files/lib/Image/ExifTool/LNK.pm +1 -1
  75. package/bin/exiftool_files/lib/Image/ExifTool/Lang/cs.pm +1 -1
  76. package/bin/exiftool_files/lib/Image/ExifTool/Lang/de.pm +1 -1
  77. package/bin/exiftool_files/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  78. package/bin/exiftool_files/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  79. package/bin/exiftool_files/lib/Image/ExifTool/Lang/es.pm +1 -1
  80. package/bin/exiftool_files/lib/Image/ExifTool/Lang/fi.pm +1 -1
  81. package/bin/exiftool_files/lib/Image/ExifTool/Lang/fr.pm +1 -1
  82. package/bin/exiftool_files/lib/Image/ExifTool/Lang/it.pm +1 -1
  83. package/bin/exiftool_files/lib/Image/ExifTool/Lang/ja.pm +1 -1
  84. package/bin/exiftool_files/lib/Image/ExifTool/Lang/ko.pm +1 -1
  85. package/bin/exiftool_files/lib/Image/ExifTool/Lang/nl.pm +1 -1
  86. package/bin/exiftool_files/lib/Image/ExifTool/Lang/pl.pm +1 -1
  87. package/bin/exiftool_files/lib/Image/ExifTool/Lang/ru.pm +1 -1
  88. package/bin/exiftool_files/lib/Image/ExifTool/Lang/sv.pm +1 -1
  89. package/bin/exiftool_files/lib/Image/ExifTool/Lang/tr.pm +1 -1
  90. package/bin/exiftool_files/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  91. package/bin/exiftool_files/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  92. package/bin/exiftool_files/lib/Image/ExifTool/Leaf.pm +1 -1
  93. package/bin/exiftool_files/lib/Image/ExifTool/Lytro.pm +1 -1
  94. package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +1 -1
  95. package/bin/exiftool_files/lib/Image/ExifTool/MIE.pm +1 -1
  96. package/bin/exiftool_files/lib/Image/ExifTool/MIEUnits.pod +1 -1
  97. package/bin/exiftool_files/lib/Image/ExifTool/MIFF.pm +1 -1
  98. package/bin/exiftool_files/lib/Image/ExifTool/MNG.pm +1 -1
  99. package/bin/exiftool_files/lib/Image/ExifTool/MOI.pm +1 -1
  100. package/bin/exiftool_files/lib/Image/ExifTool/MPC.pm +1 -1
  101. package/bin/exiftool_files/lib/Image/ExifTool/MPEG.pm +1 -1
  102. package/bin/exiftool_files/lib/Image/ExifTool/MPF.pm +1 -1
  103. package/bin/exiftool_files/lib/Image/ExifTool/MRC.pm +1 -1
  104. package/bin/exiftool_files/lib/Image/ExifTool/MWG.pm +1 -1
  105. package/bin/exiftool_files/lib/Image/ExifTool/MXF.pm +1 -1
  106. package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +3 -3
  107. package/bin/exiftool_files/lib/Image/ExifTool/MakerNotes.pm +1 -1
  108. package/bin/exiftool_files/lib/Image/ExifTool/Matroska.pm +9 -5
  109. package/bin/exiftool_files/lib/Image/ExifTool/Microsoft.pm +1 -1
  110. package/bin/exiftool_files/lib/Image/ExifTool/Minolta.pm +1 -1
  111. package/bin/exiftool_files/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  112. package/bin/exiftool_files/lib/Image/ExifTool/Motorola.pm +1 -1
  113. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +1895 -74
  114. package/bin/exiftool_files/lib/Image/ExifTool/NikonCapture.pm +1 -1
  115. package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +523 -6
  116. package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +150 -87
  117. package/bin/exiftool_files/lib/Image/ExifTool/Nintendo.pm +1 -1
  118. package/bin/exiftool_files/lib/Image/ExifTool/OOXML.pm +1 -1
  119. package/bin/exiftool_files/lib/Image/ExifTool/Ogg.pm +1 -1
  120. package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +6 -2
  121. package/bin/exiftool_files/lib/Image/ExifTool/OpenEXR.pm +5 -3
  122. package/bin/exiftool_files/lib/Image/ExifTool/Opus.pm +1 -1
  123. package/bin/exiftool_files/lib/Image/ExifTool/Other.pm +1 -1
  124. package/bin/exiftool_files/lib/Image/ExifTool/PCX.pm +1 -1
  125. package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +6 -4
  126. package/bin/exiftool_files/lib/Image/ExifTool/PGF.pm +1 -1
  127. package/bin/exiftool_files/lib/Image/ExifTool/PICT.pm +1 -1
  128. package/bin/exiftool_files/lib/Image/ExifTool/PLIST.pm +1 -1
  129. package/bin/exiftool_files/lib/Image/ExifTool/PLUS.pm +1 -1
  130. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +29 -8
  131. package/bin/exiftool_files/lib/Image/ExifTool/PPM.pm +1 -1
  132. package/bin/exiftool_files/lib/Image/ExifTool/PSP.pm +1 -1
  133. package/bin/exiftool_files/lib/Image/ExifTool/Palm.pm +1 -1
  134. package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +3 -3
  135. package/bin/exiftool_files/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  136. package/bin/exiftool_files/lib/Image/ExifTool/Parrot.pm +1 -1
  137. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +4 -2
  138. package/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm +1 -1
  139. package/bin/exiftool_files/lib/Image/ExifTool/PhotoCD.pm +1 -1
  140. package/bin/exiftool_files/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  141. package/bin/exiftool_files/lib/Image/ExifTool/Photoshop.pm +1 -1
  142. package/bin/exiftool_files/lib/Image/ExifTool/PostScript.pm +1 -1
  143. package/bin/exiftool_files/lib/Image/ExifTool/PrintIM.pm +1 -1
  144. package/bin/exiftool_files/lib/Image/ExifTool/Qualcomm.pm +1 -1
  145. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +25 -4
  146. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +125 -81
  147. package/bin/exiftool_files/lib/Image/ExifTool/README +9 -2
  148. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +1 -1
  149. package/bin/exiftool_files/lib/Image/ExifTool/RSRC.pm +1 -1
  150. package/bin/exiftool_files/lib/Image/ExifTool/RTF.pm +1 -1
  151. package/bin/exiftool_files/lib/Image/ExifTool/Radiance.pm +1 -1
  152. package/bin/exiftool_files/lib/Image/ExifTool/Rawzor.pm +1 -1
  153. package/bin/exiftool_files/lib/Image/ExifTool/Real.pm +1 -1
  154. package/bin/exiftool_files/lib/Image/ExifTool/Reconyx.pm +1 -1
  155. package/bin/exiftool_files/lib/Image/ExifTool/Red.pm +1 -1
  156. package/bin/exiftool_files/lib/Image/ExifTool/Ricoh.pm +1 -1
  157. package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +1 -1
  158. package/bin/exiftool_files/lib/Image/ExifTool/Sanyo.pm +1 -1
  159. package/bin/exiftool_files/lib/Image/ExifTool/Scalado.pm +1 -1
  160. package/bin/exiftool_files/lib/Image/ExifTool/Shift.pl +3 -1
  161. package/bin/exiftool_files/lib/Image/ExifTool/Shortcuts.pm +1 -1
  162. package/bin/exiftool_files/lib/Image/ExifTool/Sigma.pm +1 -1
  163. package/bin/exiftool_files/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  164. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +34 -14
  165. package/bin/exiftool_files/lib/Image/ExifTool/SonyIDC.pm +1 -1
  166. package/bin/exiftool_files/lib/Image/ExifTool/Stim.pm +1 -1
  167. package/bin/exiftool_files/lib/Image/ExifTool/TagInfoXML.pm +11 -6
  168. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +6589 -5877
  169. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +1681 -65
  170. package/bin/exiftool_files/lib/Image/ExifTool/Text.pm +1 -1
  171. package/bin/exiftool_files/lib/Image/ExifTool/Theora.pm +1 -1
  172. package/bin/exiftool_files/lib/Image/ExifTool/Torrent.pm +1 -1
  173. package/bin/exiftool_files/lib/Image/ExifTool/Unknown.pm +1 -1
  174. package/bin/exiftool_files/lib/Image/ExifTool/VCard.pm +1 -1
  175. package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +1 -1
  176. package/bin/exiftool_files/lib/Image/ExifTool/Vorbis.pm +1 -1
  177. package/bin/exiftool_files/lib/Image/ExifTool/WTV.pm +1 -1
  178. package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  179. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +1 -1
  180. package/bin/exiftool_files/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  181. package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -1
  182. package/bin/exiftool_files/lib/Image/ExifTool/WritePNG.pl +30 -10
  183. package/bin/exiftool_files/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  184. package/bin/exiftool_files/lib/Image/ExifTool/WritePostScript.pl +1 -1
  185. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +12 -1
  186. package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +11 -12
  187. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +56 -10
  188. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +164 -52
  189. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +6 -3
  190. package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +4 -2
  191. package/bin/exiftool_files/lib/Image/ExifTool/ZIP.pm +10 -2
  192. package/bin/exiftool_files/lib/Image/ExifTool/ZISRAW.pm +1 -1
  193. package/bin/exiftool_files/lib/Image/ExifTool/iWork.pm +1 -1
  194. package/bin/exiftool_files/lib/Image/ExifTool.pm +8939 -8864
  195. package/bin/exiftool_files/lib/Image/ExifTool.pod +76 -67
  196. package/package.json +3 -3
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
50
50
  use Image::ExifTool::GPS;
51
51
  require Exporter;
52
52
 
53
- $VERSION = '3.44';
53
+ $VERSION = '3.51';
54
54
  @ISA = qw(Exporter);
55
55
  @EXPORT_OK = qw(EscapeXML UnescapeXML);
56
56
 
@@ -192,6 +192,9 @@ my %xmpNS = (
192
192
  GettyImagesGIFT => 'http://xmp.gettyimages.com/gift/1.0/',
193
193
  LImage => 'http://ns.leiainc.com/photos/1.0/image/',
194
194
  Profile => 'http://ns.google.com/photos/dd/1.0/profile/',
195
+ sdc => 'http://ns.nikon.com/sdc/1.0/',
196
+ ast => 'http://ns.nikon.com/asteroid/1.0/',
197
+ nine => 'http://ns.nikon.com/nine/1.0/',
195
198
  );
196
199
 
197
200
  # build reverse namespace lookup
@@ -436,9 +439,38 @@ my %sOECF = (
436
439
  Names => { List => 'Seq' },
437
440
  Values => { List => 'Seq', Writable => 'rational' },
438
441
  );
439
-
442
+ my %sAreaModels = (
443
+ STRUCT_NAME => 'AreaModels',
444
+ NAMESPACE => 'crs',
445
+ ColorRangeMaskAreaSampleInfo => { FlatName => 'ColorSampleInfo' },
446
+ AreaComponents => { FlatName => 'Components', List => 'Seq' },
447
+ );
448
+ my %sCorrRangeMask = (
449
+ STRUCT_NAME => 'CorrRangeMask',
450
+ NAMESPACE => 'crs',
451
+ NOTES => 'Called CorrectionRangeMask by the spec.',
452
+ Version => { },
453
+ Type => { },
454
+ ColorAmount => { Writable => 'real' },
455
+ LumMin => { Writable => 'real' },
456
+ LumMax => { Writable => 'real' },
457
+ LumFeather => { Writable => 'real' },
458
+ DepthMin => { Writable => 'real' },
459
+ DepthMax => { Writable => 'real' },
460
+ DepthFeather=> { Writable => 'real' },
461
+ # new in LR 11.0
462
+ Invert => { Writable => 'boolean' },
463
+ SampleType => { Writable => 'integer' },
464
+ AreaModels => {
465
+ List => 'Seq',
466
+ Struct => \%sAreaModels,
467
+ },
468
+ LumRange => { },
469
+ LuminanceDepthSampleInfo => { },
470
+ );
440
471
  # new LR2 crs structures (PH)
441
- my %sCorrectionMask = (
472
+ my %sCorrectionMask;
473
+ %sCorrectionMask = (
442
474
  STRUCT_NAME => 'CorrectionMask',
443
475
  NAMESPACE => 'crs',
444
476
  # disable List behaviour of flattened Gradient/PaintBasedCorrections
@@ -473,19 +505,26 @@ my %sCorrectionMask = (
473
505
  Alpha => { Writable => 'real', List => 0 },
474
506
  CenterValue => { Writable => 'real', List => 0 },
475
507
  PerimeterValue=>{ Writable => 'real', List => 0 },
476
- );
477
- my %sCorrectionRangeMask = (
478
- STRUCT_NAME => 'CorrectionRangeMask',
479
- NAMESPACE => 'crs',
480
- Version => { },
481
- Type => { },
482
- ColorAmount => { Writable => 'real' },
483
- LumMin => { Writable => 'real' },
484
- LumMax => { Writable => 'real' },
485
- LumFeather => { Writable => 'real' },
486
- DepthMin => { Writable => 'real' },
487
- DepthMax => { Writable => 'real' },
488
- DepthFeather=> { Writable => 'real' },
508
+ # new in LR 11.0 MaskGroupBasedCorrections
509
+ MaskActive => { Writable => 'boolean', List => 0 },
510
+ MaskName => { List => 0 },
511
+ MaskBlendMode=> { Writable => 'integer', List => 0 },
512
+ MaskInverted => { Writable => 'boolean', List => 0 },
513
+ MaskSyncID => { List => 0 },
514
+ MaskVersion => { List => 0 },
515
+ MaskSubType => { List => 0 },
516
+ ReferencePoint => { List => 0 },
517
+ InputDigest => { List => 0 },
518
+ MaskDigest => { List => 0 },
519
+ WholeImageArea => { List => 0 },
520
+ Origin => { List => 0 },
521
+ Masks => { Struct => \%sCorrectionMask, NoSubStruct => 1 },
522
+ CorrectionRangeMask => {
523
+ Name => 'CorrRangeMask',
524
+ Notes => 'called CorrectionRangeMask by the spec',
525
+ FlatName => 'Range',
526
+ Struct => \%sCorrRangeMask,
527
+ },
489
528
  );
490
529
  my %sCorrection = (
491
530
  STRUCT_NAME => 'Correction',
@@ -499,8 +538,8 @@ my %sCorrection = (
499
538
  LocalClarity => { FlatName => 'Clarity', Writable => 'real', List => 0 },
500
539
  LocalSharpness => { FlatName => 'Sharpness', Writable => 'real', List => 0 },
501
540
  LocalBrightness => { FlatName => 'Brightness', Writable => 'real', List => 0 },
502
- LocalToningHue => { FlatName => 'Hue', Writable => 'real', List => 0 },
503
- LocalToningSaturation => { FlatName => 'Saturation', Writable => 'real', List => 0 },
541
+ LocalToningHue => { FlatName => 'ToningHue', Writable => 'real', List => 0 },
542
+ LocalToningSaturation => { FlatName => 'ToningSaturation', Writable => 'real', List => 0 },
504
543
  LocalExposure2012 => { FlatName => 'Exposure2012', Writable => 'real', List => 0 },
505
544
  LocalContrast2012 => { FlatName => 'Contrast2012', Writable => 'real', List => 0 },
506
545
  LocalHighlights2012 => { FlatName => 'Highlights2012', Writable => 'real', List => 0 },
@@ -516,15 +555,20 @@ my %sCorrection = (
516
555
  LocalBlacks2012 => { FlatName => 'Blacks2012', Writable => 'real', List => 0 },
517
556
  LocalDehaze => { FlatName => 'Dehaze', Writable => 'real', List => 0 },
518
557
  LocalTexture => { FlatName => 'Texture', Writable => 'real', List => 0 },
558
+ # new in LR 11.0
519
559
  CorrectionRangeMask => {
560
+ Name => 'CorrRangeMask',
561
+ Notes => 'called CorrectionRangeMask by the spec',
520
562
  FlatName => 'RangeMask',
521
- Struct => \%sCorrectionRangeMask,
563
+ Struct => \%sCorrRangeMask,
522
564
  },
523
565
  CorrectionMasks => {
524
566
  FlatName => 'Mask',
525
567
  Struct => \%sCorrectionMask,
526
568
  List => 'Seq',
527
569
  },
570
+ CorrectionName => { },
571
+ CorrectionSyncID => { },
528
572
  );
529
573
  my %sRetouchArea = (
530
574
  STRUCT_NAME => 'RetouchArea',
@@ -543,6 +587,30 @@ my %sRetouchArea = (
543
587
  List => 'Seq',
544
588
  },
545
589
  );
590
+ my %sMapInfo = (
591
+ STRUCT_NAME => 'MapInfo',
592
+ NAMESPACE => 'crs',
593
+ NOTES => q{
594
+ Called RangeMaskMapInfo by the specification, the same as the containing
595
+ structure.
596
+ },
597
+ RGBMin => { },
598
+ RGBMax => { },
599
+ LabMin => { },
600
+ LabMax => { },
601
+ LumEq => { List => 'Seq' },
602
+ );
603
+ my %sRangeMask = (
604
+ STRUCT_NAME => 'RangeMask',
605
+ NAMESPACE => 'crs',
606
+ NOTES => q{
607
+ This structure is actually called RangeMaskMapInfo, but it only contains one
608
+ element which is a RangeMaskMapInfo structure (Yes, really!). So these are
609
+ renamed to RangeMask and MapInfo respectively to avoid confusion and
610
+ redundancy in the tag names.
611
+ },
612
+ RangeMaskMapInfo => { FlatName => 'MapInfo', Struct => \%sMapInfo },
613
+ );
546
614
 
547
615
  # main XMP tag table (tag ID's are used for the family 1 group names)
548
616
  %Image::ExifTool::XMP::Main = (
@@ -813,6 +881,18 @@ my %sRetouchArea = (
813
881
  Name => 'Device',
814
882
  SubDirectory => { TagTable => 'Image::ExifTool::XMP::Device' },
815
883
  },
884
+ sdc => {
885
+ Name => 'sdc',
886
+ SubDirectory => { TagTable => 'Image::ExifTool::Nikon::sdc' },
887
+ },
888
+ ast => {
889
+ Name => 'ast',
890
+ SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ast' },
891
+ },
892
+ nine => {
893
+ Name => 'nine',
894
+ SubDirectory => { TagTable => 'Image::ExifTool::Nikon::nine' },
895
+ },
816
896
  );
817
897
 
818
898
  # hack to allow XML containing Dublin Core metadata to be handled like XMP (eg. EPUB - see ZIP.pm)
@@ -1533,6 +1613,9 @@ my %sPantryItem = (
1533
1613
  CameraProfile => { },
1534
1614
  LookTable => { },
1535
1615
  ToneCurvePV2012 => { List => 'Seq' },
1616
+ ToneCurvePV2012Red => { List => 'Seq' },
1617
+ ToneCurvePV2012Green => { List => 'Seq' },
1618
+ ToneCurvePV2012Blue => { List => 'Seq' },
1536
1619
  },
1537
1620
  },
1538
1621
  }
@@ -1578,6 +1661,14 @@ my %sPantryItem = (
1578
1661
  AutoToneDigestNoSat => { },
1579
1662
  ToggleStyleDigest => { },
1580
1663
  ToggleStyleAmount => { Writable => 'integer' },
1664
+ # new for LightRoom 11.0
1665
+ CompatibleVersion => { },
1666
+ MaskGroupBasedCorrections => {
1667
+ FlatName => 'MaskGroupBasedCorr',
1668
+ Struct => \%sCorrection,
1669
+ List => 'Seq',
1670
+ },
1671
+ RangeMaskMapInfo => { Name => 'RangeMask', Struct => \%sRangeMask, FlatName => 'RangeMask' },
1581
1672
  );
1582
1673
 
1583
1674
  # Tiff namespace properties (tiff)
@@ -1669,7 +1760,7 @@ my %sPantryItem = (
1669
1760
  Software => { },
1670
1761
  Artist => { Groups => { 2 => 'Author' } },
1671
1762
  Copyright => { Groups => { 2 => 'Author' }, Writable => 'lang-alt' },
1672
- NativeDigest => { }, #PH
1763
+ NativeDigest => { Avoid => 1 }, #PH
1673
1764
  );
1674
1765
 
1675
1766
  # Exif namespace properties (exif)
@@ -2058,8 +2149,8 @@ my %sPantryItem = (
2058
2149
  Groups => { 2 => 'Location' },
2059
2150
  Writable => 'integer',
2060
2151
  PrintConv => {
2061
- 2 => '2-Dimensional',
2062
- 3 => '3-Dimensional',
2152
+ 2 => '2-Dimensional Measurement',
2153
+ 3 => '3-Dimensional Measurement',
2063
2154
  },
2064
2155
  },
2065
2156
  GPSDOP => { Groups => { 2 => 'Location' }, Writable => 'rational' },
@@ -2139,8 +2230,8 @@ my %sPantryItem = (
2139
2230
  NAMESPACE => 'exifEX',
2140
2231
  PRIORITY => 0, # not as reliable as actual EXIF tags
2141
2232
  NOTES => q{
2142
- EXIF tags added by the EXIF 2.31 for XMP specification (see
2143
- L<http://www.cipa.jp/std/documents/e/DC-X010-2017.pdf>).
2233
+ EXIF tags added by the EXIF 2.32 for XMP specification (see
2234
+ L<https://cipa.jp/std/documents/download_e.html?DC-010-2020_E>).
2144
2235
  },
2145
2236
  Gamma => { Writable => 'rational' },
2146
2237
  PhotographicSensitivity => { Writable => 'integer' },
@@ -2304,6 +2395,7 @@ my %sPantryItem = (
2304
2395
  VignetteCorrectionAlreadyApplied => { Writable => 'boolean' },
2305
2396
  LateralChromaticAberrationCorrectionAlreadyApplied => { Writable => 'boolean' },
2306
2397
  LensDistortInfo => { }, # (LR 7.5.1, 4 signed rational values)
2398
+ NeutralDensityFactor => { }, # (LR 11.0 - rational value, but denominator seems significant)
2307
2399
  );
2308
2400
 
2309
2401
  # IPTC Core namespace properties (Iptc4xmpCore) (ref 4)
@@ -2346,6 +2438,9 @@ my %sPantryItem = (
2346
2438
  Scene => { Groups => { 2 => 'Other' }, List => 'Bag' },
2347
2439
  SubjectCode => { Groups => { 2 => 'Other' }, List => 'Bag' },
2348
2440
  # Copyright - have seen this in a sample (Jan 2021), but I think it is non-standard
2441
+ # new IPTC Core 1.3 properties
2442
+ AltTextAccessibility => { Groups => { 2 => 'Other' }, Writable => 'lang-alt' },
2443
+ ExtDescrAccessibility => { Groups => { 2 => 'Other' }, Writable => 'lang-alt' },
2349
2444
  );
2350
2445
 
2351
2446
  # Adobe Lightroom namespace properties (lr) (ref PH)
@@ -2357,6 +2452,7 @@ my %sPantryItem = (
2357
2452
  NOTES => 'Adobe Lightroom "lr" namespace tags.',
2358
2453
  privateRTKInfo => { },
2359
2454
  hierarchicalSubject => { List => 'Bag' },
2455
+ weightedFlatSubject => { List => 'Bag' },
2360
2456
  );
2361
2457
 
2362
2458
  # Adobe Album namespace properties (album) (ref PH)
@@ -3357,26 +3453,6 @@ NoLoop:
3357
3453
  my $key = $et->FoundTag($tagInfo, $val) or return 0;
3358
3454
  # save original components of rational numbers (used when copying)
3359
3455
  $$et{RATIONAL}{$key} = $rational if defined $rational;
3360
- # allow read-only subdirectories (eg. embedded base64 XMP/IPTC in NKSC files)
3361
- if ($$tagInfo{SubDirectory} and not $$et{IsWriting}) {
3362
- my $subdir = $$tagInfo{SubDirectory};
3363
- my $dataPt = ref $$et{VALUE}{$key} ? $$et{VALUE}{$key} : \$$et{VALUE}{$key};
3364
- # process subdirectory information
3365
- my %dirInfo = (
3366
- DirName => $$subdir{DirName} || $$tagInfo{Name},
3367
- DataPt => $dataPt,
3368
- DirLen => length $$dataPt,
3369
- IsExtended => 1, # (hack to avoid Duplicate warning for embedded XMP)
3370
- );
3371
- my $oldOrder = GetByteOrder();
3372
- SetByteOrder($$subdir{ByteOrder}) if $$subdir{ByteOrder};
3373
- my $oldNS = $$et{definedNS};
3374
- delete $$et{definedNS};
3375
- my $subTablePtr = GetTagTable($$subdir{TagTable}) || $tagTablePtr;
3376
- $et->ProcessDirectory(\%dirInfo, $subTablePtr, $$subdir{ProcessProc});
3377
- SetByteOrder($oldOrder);
3378
- $$et{definedNS} = $oldNS;
3379
- }
3380
3456
  # save structure/list information if necessary
3381
3457
  if (@structProps and (@structProps > 1 or defined $structProps[0][1]) and
3382
3458
  not $$et{NO_STRUCT})
@@ -3407,6 +3483,29 @@ NoLoop:
3407
3483
  my $tagID = join('/',@$props);
3408
3484
  $et->VerboseInfo($tagID, $tagInfo, Value => $rawVal || $val);
3409
3485
  }
3486
+ # allow read-only subdirectories (eg. embedded base64 XMP/IPTC in NKSC files)
3487
+ if ($$tagInfo{SubDirectory} and not $$et{IsWriting}) {
3488
+ my $subdir = $$tagInfo{SubDirectory};
3489
+ my $dataPt = ref $$et{VALUE}{$key} ? $$et{VALUE}{$key} : \$$et{VALUE}{$key};
3490
+ # decode if necessary (eg. Nikon XMP-ast:XMLPackets)
3491
+ $dataPt = DecodeBase64($$dataPt) if $$tagInfo{Encoding} and $$tagInfo{Encoding} eq 'Base64';
3492
+ # process subdirectory information
3493
+ my %dirInfo = (
3494
+ DirName => $$subdir{DirName} || $$tagInfo{Name},
3495
+ DataPt => $dataPt,
3496
+ DirLen => length $$dataPt,
3497
+ IgnoreProp => $$subdir{IgnoreProp}, # (allow XML to ignore specified properties)
3498
+ IsExtended => 1, # (hack to avoid Duplicate warning for embedded XMP)
3499
+ );
3500
+ my $oldOrder = GetByteOrder();
3501
+ SetByteOrder($$subdir{ByteOrder}) if $$subdir{ByteOrder};
3502
+ my $oldNS = $$et{definedNS};
3503
+ delete $$et{definedNS};
3504
+ my $subTablePtr = GetTagTable($$subdir{TagTable}) || $tagTablePtr;
3505
+ $et->ProcessDirectory(\%dirInfo, $subTablePtr, $$subdir{ProcessProc});
3506
+ SetByteOrder($oldOrder);
3507
+ $$et{definedNS} = $oldNS;
3508
+ }
3410
3509
  return 1;
3411
3510
  }
3412
3511
 
@@ -3499,6 +3598,17 @@ sub ParseXMPElement($$$;$$$$)
3499
3598
  }
3500
3599
  $start = pos($$dataPt); # start from here the next time around
3501
3600
 
3601
+ # ignore specified XMP namespaces/properties
3602
+ if ($$et{EXCL_XMP_LOOKUP} and not $isWriting and $prop =~ /^(.+):(.*)/) {
3603
+ my ($ns, $nm) = (lc($stdXlatNS{$1} || $1), lc($2));
3604
+ if ($$et{EXCL_XMP_LOOKUP}{"xmp-$ns:all"} or $$et{EXCL_XMP_LOOKUP}{"xmp-$ns:$nm"} or
3605
+ $$et{EXCL_XMP_LOOKUP}{"xmp-all:$nm"})
3606
+ {
3607
+ ++$count; # (pretend we found something so we don't store as a tag value)
3608
+ next;
3609
+ }
3610
+ }
3611
+
3502
3612
  # extract property attributes
3503
3613
  my ($parseResource, %attrs, @attrs);
3504
3614
  while ($attrs =~ m/(\S+?)\s*=\s*(['"])(.*?)\2/sg) {
@@ -3596,9 +3706,9 @@ sub ParseXMPElement($$$;$$$$)
3596
3706
  if ($nItems == 1000) {
3597
3707
  my ($tg,$ns) = GetXMPTagID($propList);
3598
3708
  if ($isWriting) {
3599
- $et->Warn("Excessive number of items for $ns:$tg. Processing may be slow", 1);
3709
+ $et->WarnOnce("Excessive number of items for $ns:$tg. Processing may be slow", 1);
3600
3710
  } elsif (not $$et{OPTIONS}{IgnoreMinorErrors}) {
3601
- $et->Warn("Extracted only 1000 $ns:$tg items. Ignore minor errors to extract all", 2);
3711
+ $et->WarnOnce("Extracted only 1000 $ns:$tg items. Ignore minor errors to extract all", 2);
3602
3712
  last;
3603
3713
  }
3604
3714
  }
@@ -3960,7 +4070,7 @@ sub ProcessXMP($$;$)
3960
4070
  } elsif ($1 eq 'REDXIF') {
3961
4071
  $type = 'RMD';
3962
4072
  $mime = 'application/xml';
3963
- } else {
4073
+ } elsif ($1 ne 'fcpxml') { # Final Cut Pro XML
3964
4074
  return 0;
3965
4075
  }
3966
4076
  } elsif ($buf2 =~ /<svg[\s>]/) {
@@ -3970,14 +4080,16 @@ sub ProcessXMP($$;$)
3970
4080
  } elsif ($buf2 =~ /<plist[\s>]/) {
3971
4081
  $type = 'PLIST';
3972
4082
  }
3973
- if ($isSVG and $$et{XMP_CAPTURE}) {
3974
- $et->Error("ExifTool does not yet support writing of SVG images");
3975
- return 0;
3976
- }
3977
4083
  }
3978
4084
  $isXML = 1;
3979
4085
  } elsif ($2 eq '<rdf:RDF') {
3980
4086
  $isRDF = 1; # recognize XMP without x:xmpmeta element
4087
+ } elsif ($2 eq '<svg') {
4088
+ $isSVG = $isXML = 1;
4089
+ }
4090
+ if ($isSVG and $$et{XMP_CAPTURE}) {
4091
+ $et->Error("ExifTool does not yet support writing of SVG images");
4092
+ return 0;
3981
4093
  }
3982
4094
  if ($buff =~ /^\0\0/) {
3983
4095
  $fmt = 'N'; # UTF-32 MM with or without BOM
@@ -4253,7 +4365,7 @@ information.
4253
4365
 
4254
4366
  =head1 AUTHOR
4255
4367
 
4256
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
4368
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
4257
4369
 
4258
4370
  This library is free software; you can redistribute it and/or modify it
4259
4371
  under the same terms as Perl itself.
@@ -16,6 +16,7 @@
16
16
  # 11) http://www.extensis.com/en/support/kb_article.jsp?articleNumber=6102211
17
17
  # 12) XMPSpecificationPart3_May2013, page 58
18
18
  # 13) https://developer.android.com/training/camera2/Dynamic-depth-v1.0.pdf
19
+ # 14) http://www.iptc.org/standards/photo-metadata/iptc-standard/
19
20
  #------------------------------------------------------------------------------
20
21
 
21
22
  package Image::ExifTool::XMP;
@@ -530,14 +531,14 @@ my %sImageRegion = ( # new in 1.5
530
531
  rRole => { Namespace => 'Iptc4xmpExt', FlatName => 'Role', List => 'Bag', Struct => \%sEntity },
531
532
  );
532
533
 
533
- # IPTC Extension namespace properties (Iptc4xmpExt) (ref 4)
534
+ # IPTC Extension namespace properties (Iptc4xmpExt) (ref 4, 14)
534
535
  %Image::ExifTool::XMP::iptcExt = (
535
536
  %xmpTableDefaults,
536
537
  GROUPS => { 1 => 'XMP-iptcExt', 2 => 'Author' },
537
538
  NAMESPACE => 'Iptc4xmpExt',
538
539
  TABLE_DESC => 'XMP IPTC Extension',
539
540
  NOTES => q{
540
- This table contains tags defined by the IPTC Extension schema version 1.5.
541
+ This table contains tags defined by the IPTC Extension schema version 1.6.
541
542
  The actual namespace prefix is "Iptc4xmpExt", but ExifTool shortens this for
542
543
  the family 1 group name. (see
543
544
  L<http://www.iptc.org/standards/photo-metadata/iptc-standard/>)
@@ -797,6 +798,8 @@ my %sImageRegion = ( # new in 1.5
797
798
  audioBitsPerSample => { Groups => { 2 => 'Audio' }, Writable => 'integer' },
798
799
  # new IPTC Extension schema 1.5 property
799
800
  ImageRegion => { Groups => { 2 => 'Image' }, List => 'Bag', Struct => \%sImageRegion },
801
+ # new Extension 1.6 property
802
+ EventId => { Name => 'EventID', List => 'Bag' },
800
803
  );
801
804
 
802
805
  #------------------------------------------------------------------------------
@@ -2123,7 +2126,7 @@ This file contains definitions for less common XMP namespaces.
2123
2126
 
2124
2127
  =head1 AUTHOR
2125
2128
 
2126
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
2129
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
2127
2130
 
2128
2131
  This library is free software; you can redistribute it and/or modify it
2129
2132
  under the same terms as Perl itself.
@@ -32,7 +32,9 @@ sub SerializeStruct($;$)
32
32
  my ($key, $val, @vals, $rtnVal);
33
33
 
34
34
  if (ref $obj eq 'HASH') {
35
- foreach $key (sort keys %$obj) {
35
+ # support hashes with ordered keys
36
+ my @keys = $$obj{_ordered_keys_} ? @{$$obj{_ordered_keys_}} : sort keys %$obj;
37
+ foreach $key (@keys) {
36
38
  push @vals, $key . '=' . SerializeStruct($$obj{$key}, '}');
37
39
  }
38
40
  $rtnVal = '{' . join(',', @vals) . '}';
@@ -853,7 +855,7 @@ information.
853
855
 
854
856
  =head1 AUTHOR
855
857
 
856
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
858
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
857
859
 
858
860
  This library is free software; you can redistribute it and/or modify it
859
861
  under the same terms as Perl itself.
@@ -19,7 +19,7 @@ use strict;
19
19
  use vars qw($VERSION $warnString);
20
20
  use Image::ExifTool qw(:DataAccess :Utils);
21
21
 
22
- $VERSION = '1.26';
22
+ $VERSION = '1.27';
23
23
 
24
24
  sub WarnProc($) { $warnString = $_[0]; }
25
25
 
@@ -125,6 +125,7 @@ my %iWorkType = (
125
125
  Name => 'ZipFileName',
126
126
  Format => 'string[$$self{ZipFileNameLength}]',
127
127
  },
128
+ _com => 'ZipFileComment',
128
129
  );
129
130
 
130
131
  # GNU ZIP tags (ref 3)
@@ -380,6 +381,8 @@ sub HandleMember($$;$)
380
381
  $et->HandleTag($tagTablePtr, 9, $member->compressedSize());
381
382
  $et->HandleTag($tagTablePtr, 11, $member->uncompressedSize());
382
383
  $et->HandleTag($tagTablePtr, 15, $member->fileName());
384
+ my $com = $member->fileComment();
385
+ $et->HandleTag($tagTablePtr, '_com', $com) if defined $com and length $com;
383
386
  }
384
387
 
385
388
  #------------------------------------------------------------------------------
@@ -448,6 +451,10 @@ sub ProcessZIP($$)
448
451
  $et->Warn("$err reading ZIP file");
449
452
  last;
450
453
  }
454
+ # extract zip file comment
455
+ my $comment = $zip->zipfileComment();
456
+ $et->FoundTag(Comment => $comment) if defined $comment and length $comment;
457
+
451
458
  $$dirInfo{ZIP} = $zip;
452
459
 
453
460
  # check for an Office Open file (DOCX, etc)
@@ -655,6 +662,7 @@ sub ProcessZIP($$)
655
662
  DataLen => 30 + $len,
656
663
  DirStart => 0,
657
664
  DirLen => 30 + $len,
665
+ MixedTags => 1, # (to ignore FileComment tag)
658
666
  );
659
667
  $et->ProcessDirectory(\%dirInfo, $tagTablePtr);
660
668
  my $flags = Get16u(\$buff, 6);
@@ -700,7 +708,7 @@ Electronic Publication (EPUB), and Sketch design files (SKETCH).
700
708
 
701
709
  =head1 AUTHOR
702
710
 
703
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
711
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
704
712
 
705
713
  This library is free software; you can redistribute it and/or modify it
706
714
  under the same terms as Perl itself.
@@ -220,7 +220,7 @@ metadata from Zeiss Integrated Software RAW (ZISRAW) CZI files.
220
220
 
221
221
  =head1 AUTHOR
222
222
 
223
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
223
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
224
224
 
225
225
  This library is free software; you can redistribute it and/or modify it
226
226
  under the same terms as Perl itself.
@@ -215,7 +215,7 @@ information from Apple iWork '09 XML+ZIP files.
215
215
 
216
216
  =head1 AUTHOR
217
217
 
218
- Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
218
+ Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
219
219
 
220
220
  This library is free software; you can redistribute it and/or modify it
221
221
  under the same terms as Perl itself.