exiftool_vendored 13.44.0 → 13.46.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 (219) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +33 -1
  3. data/bin/META.json +1 -1
  4. data/bin/META.yml +1 -1
  5. data/bin/README +3 -3
  6. data/bin/config_files/example.config +5 -2
  7. data/bin/exiftool +19 -11
  8. data/bin/lib/File/RandomAccess.pm +1 -1
  9. data/bin/lib/File/RandomAccess.pod +2 -2
  10. data/bin/lib/Image/ExifTool/AAC.pm +1 -1
  11. data/bin/lib/Image/ExifTool/AES.pm +1 -1
  12. data/bin/lib/Image/ExifTool/AFCP.pm +1 -1
  13. data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  14. data/bin/lib/Image/ExifTool/APE.pm +1 -1
  15. data/bin/lib/Image/ExifTool/APP12.pm +1 -1
  16. data/bin/lib/Image/ExifTool/ASF.pm +1 -1
  17. data/bin/lib/Image/ExifTool/Apple.pm +1 -1
  18. data/bin/lib/Image/ExifTool/Audible.pm +1 -1
  19. data/bin/lib/Image/ExifTool/BMP.pm +1 -1
  20. data/bin/lib/Image/ExifTool/BPG.pm +1 -1
  21. data/bin/lib/Image/ExifTool/BZZ.pm +1 -1
  22. data/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
  23. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +4 -4
  24. data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
  25. data/bin/lib/Image/ExifTool/Canon.pm +53 -11
  26. data/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
  27. data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  28. data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
  29. data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
  30. data/bin/lib/Image/ExifTool/Casio.pm +1 -1
  31. data/bin/lib/Image/ExifTool/Charset.pm +1 -1
  32. data/bin/lib/Image/ExifTool/DICOM.pm +1 -1
  33. data/bin/lib/Image/ExifTool/DJI.pm +1 -1
  34. data/bin/lib/Image/ExifTool/DNG.pm +1 -1
  35. data/bin/lib/Image/ExifTool/DPX.pm +1 -1
  36. data/bin/lib/Image/ExifTool/DSF.pm +1 -1
  37. data/bin/lib/Image/ExifTool/DV.pm +1 -1
  38. data/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
  39. data/bin/lib/Image/ExifTool/DjVu.pm +1 -1
  40. data/bin/lib/Image/ExifTool/EXE.pm +1 -1
  41. data/bin/lib/Image/ExifTool/Exif.pm +7 -5
  42. data/bin/lib/Image/ExifTool/FITS.pm +1 -1
  43. data/bin/lib/Image/ExifTool/FLAC.pm +1 -1
  44. data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
  45. data/bin/lib/Image/ExifTool/FLIR.pm +1 -1
  46. data/bin/lib/Image/ExifTool/Fixup.pm +1 -1
  47. data/bin/lib/Image/ExifTool/Flash.pm +1 -1
  48. data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
  49. data/bin/lib/Image/ExifTool/Font.pm +1 -1
  50. data/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
  51. data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -1
  52. data/bin/lib/Image/ExifTool/GE.pm +1 -1
  53. data/bin/lib/Image/ExifTool/GIF.pm +1 -1
  54. data/bin/lib/Image/ExifTool/GIMP.pm +1 -1
  55. data/bin/lib/Image/ExifTool/GM.pm +1 -1
  56. data/bin/lib/Image/ExifTool/GPS.pm +1 -1
  57. data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
  58. data/bin/lib/Image/ExifTool/Geolocation.pm +1 -1
  59. data/bin/lib/Image/ExifTool/Geotag.pm +61 -20
  60. data/bin/lib/Image/ExifTool/GoPro.pm +1 -1
  61. data/bin/lib/Image/ExifTool/Google.pm +3 -2
  62. data/bin/lib/Image/ExifTool/H264.pm +1 -1
  63. data/bin/lib/Image/ExifTool/HP.pm +1 -1
  64. data/bin/lib/Image/ExifTool/HTML.pm +1 -1
  65. data/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
  66. data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
  67. data/bin/lib/Image/ExifTool/ICO.pm +1 -1
  68. data/bin/lib/Image/ExifTool/ID3.pm +1 -1
  69. data/bin/lib/Image/ExifTool/IPTC.pm +1 -1
  70. data/bin/lib/Image/ExifTool/ISO.pm +1 -1
  71. data/bin/lib/Image/ExifTool/ITC.pm +1 -1
  72. data/bin/lib/Image/ExifTool/Import.pm +1 -1
  73. data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  74. data/bin/lib/Image/ExifTool/InfiRay.pm +1 -1
  75. data/bin/lib/Image/ExifTool/JPEG.pm +6 -2
  76. data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  77. data/bin/lib/Image/ExifTool/JSON.pm +1 -1
  78. data/bin/lib/Image/ExifTool/JVC.pm +1 -1
  79. data/bin/lib/Image/ExifTool/Jpeg2000.pm +1 -1
  80. data/bin/lib/Image/ExifTool/Kandao.pm +3 -3
  81. data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
  82. data/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  83. data/bin/lib/Image/ExifTool/LIF.pm +1 -1
  84. data/bin/lib/Image/ExifTool/LNK.pm +1 -1
  85. data/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
  86. data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
  87. data/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  88. data/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  89. data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  90. data/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
  91. data/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
  92. data/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
  93. data/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
  94. data/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
  95. data/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
  96. data/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
  97. data/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
  98. data/bin/lib/Image/ExifTool/Lang/sk.pm +1 -1
  99. data/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
  100. data/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
  101. data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  102. data/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  103. data/bin/lib/Image/ExifTool/Leaf.pm +1 -1
  104. data/bin/lib/Image/ExifTool/LigoGPS.pm +1 -1
  105. data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  106. data/bin/lib/Image/ExifTool/M2TS.pm +1 -1
  107. data/bin/lib/Image/ExifTool/MIE.pm +1 -1
  108. data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
  109. data/bin/lib/Image/ExifTool/MIFF.pm +1 -1
  110. data/bin/lib/Image/ExifTool/MISB.pm +1 -1
  111. data/bin/lib/Image/ExifTool/MNG.pm +1 -1
  112. data/bin/lib/Image/ExifTool/MOI.pm +1 -1
  113. data/bin/lib/Image/ExifTool/MPC.pm +1 -1
  114. data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  115. data/bin/lib/Image/ExifTool/MPF.pm +1 -1
  116. data/bin/lib/Image/ExifTool/MRC.pm +1 -1
  117. data/bin/lib/Image/ExifTool/MWG.pm +1 -1
  118. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  119. data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
  120. data/bin/lib/Image/ExifTool/MakerNotes.pm +4 -2
  121. data/bin/lib/Image/ExifTool/Matroska.pm +1 -1
  122. data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  123. data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  124. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  125. data/bin/lib/Image/ExifTool/Motorola.pm +1 -1
  126. data/bin/lib/Image/ExifTool/Nikon.pm +9 -11
  127. data/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
  128. data/bin/lib/Image/ExifTool/NikonCustom.pm +6 -3
  129. data/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
  130. data/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
  131. data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
  132. data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  133. data/bin/lib/Image/ExifTool/Olympus.pm +1 -1
  134. data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
  135. data/bin/lib/Image/ExifTool/Opus.pm +1 -1
  136. data/bin/lib/Image/ExifTool/Other.pm +1 -1
  137. data/bin/lib/Image/ExifTool/PCAP.pm +1 -1
  138. data/bin/lib/Image/ExifTool/PCX.pm +1 -1
  139. data/bin/lib/Image/ExifTool/PDF.pm +1 -1
  140. data/bin/lib/Image/ExifTool/PGF.pm +1 -1
  141. data/bin/lib/Image/ExifTool/PICT.pm +1 -1
  142. data/bin/lib/Image/ExifTool/PLIST.pm +1 -1
  143. data/bin/lib/Image/ExifTool/PLUS.pm +1 -1
  144. data/bin/lib/Image/ExifTool/PNG.pm +1 -1
  145. data/bin/lib/Image/ExifTool/PPM.pm +1 -1
  146. data/bin/lib/Image/ExifTool/PSP.pm +1 -1
  147. data/bin/lib/Image/ExifTool/Palm.pm +1 -1
  148. data/bin/lib/Image/ExifTool/Panasonic.pm +7 -2
  149. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  150. data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  151. data/bin/lib/Image/ExifTool/Pentax.pm +13 -4
  152. data/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
  153. data/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
  154. data/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  155. data/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
  156. data/bin/lib/Image/ExifTool/Plot.pm +1 -1
  157. data/bin/lib/Image/ExifTool/PostScript.pm +1 -1
  158. data/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
  159. data/bin/lib/Image/ExifTool/Protobuf.pm +41 -15
  160. data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
  161. data/bin/lib/Image/ExifTool/QuickTime.pm +8 -4
  162. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
  163. data/bin/lib/Image/ExifTool/RIFF.pm +1 -1
  164. data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
  165. data/bin/lib/Image/ExifTool/RTF.pm +1 -1
  166. data/bin/lib/Image/ExifTool/Radiance.pm +1 -1
  167. data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  168. data/bin/lib/Image/ExifTool/Real.pm +1 -1
  169. data/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
  170. data/bin/lib/Image/ExifTool/Red.pm +1 -1
  171. data/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
  172. data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
  173. data/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
  174. data/bin/lib/Image/ExifTool/Scalado.pm +1 -1
  175. data/bin/lib/Image/ExifTool/Shift.pl +1 -1
  176. data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
  177. data/bin/lib/Image/ExifTool/Sigma.pm +1 -1
  178. data/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  179. data/bin/lib/Image/ExifTool/Sony.pm +19 -3
  180. data/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
  181. data/bin/lib/Image/ExifTool/Stim.pm +1 -1
  182. data/bin/lib/Image/ExifTool/TNEF.pm +1 -1
  183. data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
  184. data/bin/lib/Image/ExifTool/TagLookup.pm +6976 -6967
  185. data/bin/lib/Image/ExifTool/TagNames.pod +23 -7
  186. data/bin/lib/Image/ExifTool/Text.pm +1 -1
  187. data/bin/lib/Image/ExifTool/Theora.pm +1 -1
  188. data/bin/lib/Image/ExifTool/Torrent.pm +1 -1
  189. data/bin/lib/Image/ExifTool/Trailer.pm +1 -1
  190. data/bin/lib/Image/ExifTool/Unknown.pm +1 -1
  191. data/bin/lib/Image/ExifTool/VCard.pm +1 -1
  192. data/bin/lib/Image/ExifTool/Validate.pm +5 -5
  193. data/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
  194. data/bin/lib/Image/ExifTool/WPG.pm +1 -1
  195. data/bin/lib/Image/ExifTool/WTV.pm +1 -1
  196. data/bin/lib/Image/ExifTool/WavPack.pm +1 -1
  197. data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  198. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  199. data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  200. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
  201. data/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
  202. data/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  203. data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
  204. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +8 -4
  205. data/bin/lib/Image/ExifTool/WriteRIFF.pl +1 -1
  206. data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
  207. data/bin/lib/Image/ExifTool/Writer.pl +7 -4
  208. data/bin/lib/Image/ExifTool/XISF.pm +1 -1
  209. data/bin/lib/Image/ExifTool/XMP.pm +1 -1
  210. data/bin/lib/Image/ExifTool/XMP2.pl +1 -1
  211. data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  212. data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  213. data/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
  214. data/bin/lib/Image/ExifTool/iWork.pm +1 -1
  215. data/bin/lib/Image/ExifTool.pm +35 -29
  216. data/bin/lib/Image/ExifTool.pod +20 -2
  217. data/bin/perl-Image-ExifTool.spec +1 -1
  218. data/lib/exiftool_vendored/version.rb +1 -1
  219. metadata +1 -1
@@ -383,7 +383,7 @@ This file contains tag definitions for the Darwin Core XMP namespace.
383
383
 
384
384
  =head1 AUTHOR
385
385
 
386
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
386
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
387
387
 
388
388
  This library is free software; you can redistribute it and/or modify it
389
389
  under the same terms as Perl itself.
@@ -353,7 +353,7 @@ Image::ExifTool::AIFF.
353
353
 
354
354
  =head1 AUTHOR
355
355
 
356
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
356
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
357
357
 
358
358
  This library is free software; you can redistribute it and/or modify it
359
359
  under the same terms as Perl itself.
@@ -1553,7 +1553,7 @@ library files.
1553
1553
 
1554
1554
  =head1 AUTHOR
1555
1555
 
1556
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1556
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1557
1557
 
1558
1558
  This library is free software; you can redistribute it and/or modify it
1559
1559
  under the same terms as Perl itself.
@@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
57
57
  use Image::ExifTool qw(:DataAccess :Utils);
58
58
  use Image::ExifTool::MakerNotes;
59
59
 
60
- $VERSION = '4.61';
60
+ $VERSION = '4.63';
61
61
 
62
62
  sub ProcessExif($$$);
63
63
  sub WriteExif($$$);
@@ -213,7 +213,7 @@ $formatName[129] = 'utf8'; # (Exif 3.0)
213
213
  10 => 'JBIG Color', #3
214
214
  99 => 'JPEG', #16
215
215
  262 => 'Kodak 262', #16
216
- 32766 => 'Next', #3
216
+ 32766 => 'NeXt or Sony ARW Compressed 2', #3/Milos
217
217
  32767 => 'Sony ARW Compressed', #16
218
218
  32769 => 'Packed RAW', #PH (used by Epson, Nikon, Samsung)
219
219
  32770 => 'Samsung SRW Compressed', #PH
@@ -1431,6 +1431,7 @@ my %opcodeInfo = (
1431
1431
  WriteGroup => 'IFD0',
1432
1432
  Mandatory => 1,
1433
1433
  PrintConv => {
1434
+ # 0 - written by Adobe DNG converter 18.1 when converting from CR3
1434
1435
  1 => 'Centered',
1435
1436
  2 => 'Co-sited',
1436
1437
  },
@@ -1598,7 +1599,7 @@ my %opcodeInfo = (
1598
1599
  2 => 'Sony Compressed RAW', # (lossy, ref IB)
1599
1600
  3 => 'Sony Lossless Compressed RAW', #IB
1600
1601
  4 => 'Sony Lossless Compressed RAW 2', #JR (ILCE-1)
1601
- 6 => 'Sony Compressed RAW HQ', # ILCE-7M5
1602
+ 6 => 'Sony Compressed RAW 2', # ILCE-7M5
1602
1603
  },
1603
1604
  },
1604
1605
  # 0x7001 - int16u[1] (in SubIFD of Sony ARW images) - values: 0,1
@@ -3591,6 +3592,7 @@ my %opcodeInfo = (
3591
3592
  Condition => '$$valPt =~ /^\[ae_dbg_info:/',
3592
3593
  MakerNotes => 1,
3593
3594
  Binary => 1,
3595
+ NotIFD => 1,
3594
3596
  WriteGroup => 'IFD0', # (for Validate)
3595
3597
  SubDirectory => { TagTable => 'Image::ExifTool::DJI::Info' },
3596
3598
  Format => 'undef',
@@ -4697,7 +4699,7 @@ my %subSecConv = (
4697
4699
  PrintConv => 'sprintf("%.1f",$val)',
4698
4700
  },
4699
4701
  FocalLength35efl => { #26/PH
4700
- Description => 'Focal Length',
4702
+ Description => 'Focal Length 35mm Equiv',
4701
4703
  Notes => 'this value may be incorrect if the image has been resized',
4702
4704
  Groups => { 2 => 'Camera' },
4703
4705
  Require => {
@@ -7155,7 +7157,7 @@ EXIF and TIFF meta information.
7155
7157
 
7156
7158
  =head1 AUTHOR
7157
7159
 
7158
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
7160
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
7159
7161
 
7160
7162
  This library is free software; you can redistribute it and/or modify it
7161
7163
  under the same terms as Perl itself.
@@ -137,7 +137,7 @@ information from FITS (Flexible Image Transport System) images.
137
137
 
138
138
  =head1 AUTHOR
139
139
 
140
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
140
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
141
141
 
142
142
  This library is free software; you can redistribute it and/or modify it
143
143
  under the same terms as Perl itself.
@@ -298,7 +298,7 @@ information from Free Lossless Audio Codec (FLAC) audio files.
298
298
 
299
299
  =head1 AUTHOR
300
300
 
301
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
301
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
302
302
 
303
303
  This library is free software; you can redistribute it and/or modify it
304
304
  under the same terms as Perl itself.
@@ -329,7 +329,7 @@ meta information in FLIF (Free Lossless Image Format) images.
329
329
 
330
330
  =head1 AUTHOR
331
331
 
332
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
332
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
333
333
 
334
334
  This library is free software; you can redistribute it and/or modify it
335
335
  under the same terms as Perl itself.
@@ -1633,7 +1633,7 @@ Systems Inc. thermal image files (FFF, FPF and JPEG format).
1633
1633
 
1634
1634
  =head1 AUTHOR
1635
1635
 
1636
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1636
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1637
1637
 
1638
1638
  This library is free software; you can redistribute it and/or modify it
1639
1639
  under the same terms as Perl itself.
@@ -354,7 +354,7 @@ linear list when ApplyFixups() is called.
354
354
 
355
355
  =head1 AUTHOR
356
356
 
357
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
357
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
358
358
 
359
359
  This library is free software; you can redistribute it and/or modify it
360
360
  under the same terms as Perl itself.
@@ -721,7 +721,7 @@ will add AMF3 support.
721
721
 
722
722
  =head1 AUTHOR
723
723
 
724
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
724
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
725
725
 
726
726
  This library is free software; you can redistribute it and/or modify it
727
727
  under the same terms as Perl itself.
@@ -2402,7 +2402,7 @@ JPEG images.
2402
2402
 
2403
2403
  =head1 AUTHOR
2404
2404
 
2405
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2405
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
2406
2406
 
2407
2407
  This library is free software; you can redistribute it and/or modify it
2408
2408
  under the same terms as Perl itself.
@@ -896,7 +896,7 @@ WOFF2.
896
896
 
897
897
  =head1 AUTHOR
898
898
 
899
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
899
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
900
900
 
901
901
  This library is free software; you can redistribute it and/or modify it
902
902
  under the same terms as Perl itself.
@@ -243,7 +243,7 @@ write information from the FotoWare FotoStation trailer.
243
243
 
244
244
  =head1 AUTHOR
245
245
 
246
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
246
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
247
247
 
248
248
  This library is free software; you can redistribute it and/or modify it
249
249
  under the same terms as Perl itself.
@@ -2029,7 +2029,7 @@ FujiFilm maker notes in EXIF information, and to read/write FujiFilm RAW
2029
2029
 
2030
2030
  =head1 AUTHOR
2031
2031
 
2032
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2032
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
2033
2033
 
2034
2034
  This library is free software; you can redistribute it and/or modify it
2035
2035
  under the same terms as Perl itself.
@@ -68,7 +68,7 @@ General Imaging maker notes.
68
68
 
69
69
  =head1 AUTHOR
70
70
 
71
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
71
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
72
72
 
73
73
  This library is free software; you can redistribute it and/or modify it
74
74
  under the same terms as Perl itself.
@@ -596,7 +596,7 @@ write GIF meta information.
596
596
 
597
597
  =head1 AUTHOR
598
598
 
599
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
599
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
600
600
 
601
601
  This library is free software; you can redistribute it and/or modify it
602
602
  under the same terms as Perl itself.
@@ -270,7 +270,7 @@ GIMP software.
270
270
 
271
271
  =head1 AUTHOR
272
272
 
273
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
273
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
274
274
 
275
275
  This library is free software; you can redistribute it and/or modify it
276
276
  under the same terms as Perl itself.
@@ -531,7 +531,7 @@ metadata from videos written by some GM models such as Corvette and Camero.
531
531
 
532
532
  =head1 AUTHOR
533
533
 
534
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
534
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
535
535
 
536
536
  This library is free software; you can redistribute it and/or modify it
537
537
  under the same terms as Perl itself.
@@ -619,7 +619,7 @@ GPS (Global Positioning System) meta information in EXIF data.
619
619
 
620
620
  =head1 AUTHOR
621
621
 
622
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
622
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
623
623
 
624
624
  This library is free software; you can redistribute it and/or modify it
625
625
  under the same terms as Perl itself.
@@ -2242,7 +2242,7 @@ coordinates.
2242
2242
 
2243
2243
  =head1 AUTHOR
2244
2244
 
2245
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2245
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
2246
2246
 
2247
2247
  This library is free software; you can redistribute it and/or modify it
2248
2248
  under the same terms as Perl itself.
@@ -1020,7 +1020,7 @@ the input arguments of the AddEntry method.
1020
1020
 
1021
1021
  =head1 AUTHOR
1022
1022
 
1023
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1023
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1024
1024
 
1025
1025
  This library is free software; you can redistribute it and/or modify it
1026
1026
  under the same terms as Perl itself. The associated database files are
@@ -21,6 +21,7 @@
21
21
  # 2024/11/05 - PH Added support for Google Maps "Export timeline data"
22
22
  # JSON format
23
23
  # 2025/09/22 - PH Added ability to read Columbus CSV log files
24
+ # 2026/01/24 - PH Added GeoUserTag feature
24
25
  #
25
26
  # References: 1) http://www.topografix.com/GPX/1/1/
26
27
  # 2) http://www.gpsinformation.org/dale/nmea.htm#GSA
@@ -35,7 +36,7 @@ use vars qw($VERSION);
35
36
  use Image::ExifTool qw(:Public);
36
37
  use Image::ExifTool::GPS;
37
38
 
38
- $VERSION = '1.83';
39
+ $VERSION = '1.85';
39
40
 
40
41
  sub JITTER() { return 2 } # maximum time jitter
41
42
 
@@ -43,6 +44,7 @@ sub GetTime($);
43
44
  sub SetGeoValues($$;$);
44
45
  sub PrintFixTime($);
45
46
  sub PrintFix($@);
47
+ sub InitUserTags($);
46
48
 
47
49
  # XML tags that we recognize (keys are forced to lower case)
48
50
  my %xmlTag = (
@@ -82,6 +84,8 @@ my %xmlTag = (
82
84
  placemark => '', # KML
83
85
  );
84
86
 
87
+ my %userTag; # user-defined XML tags
88
+
85
89
  # fix information keys which must be interpolated around a circle
86
90
  my %cyclical = (lon => 1, track => 1, dir => 1, pitch => 1, roll => 1);
87
91
  my %cyc180 = (lon => 1, pitch => 1, roll => 1); # wraps from 180 to -180
@@ -174,6 +178,8 @@ sub LoadTrackLog($$;$)
174
178
  unless (eval { require Time::Local }) {
175
179
  return 'Geotag feature requires Time::Local installed';
176
180
  }
181
+ InitUserTags($et);
182
+
177
183
  # add data to existing track
178
184
  my $geotag = $et->GetNewValue('Geotag') || { };
179
185
 
@@ -357,16 +363,24 @@ sub LoadTrackLog($$;$)
357
363
  # XML format (GPX, KML, Garmin XML/TCX etc)
358
364
  #
359
365
  if ($format eq 'XML') {
360
- my ($arg, $tok, $td);
361
- s/\s*=\s*(['"])\s*/=$1/g; # remove unnecessary white space in attributes
362
- # Workaround for KML generated by Google Location History:
363
- # lat/lon/alt are space-separated; we want commas.
364
- s{(\S+)\s+(\S+)\s+(\S+)(</gx:coord>)}{$1,$2,$3$4};
365
- foreach $arg (split) {
366
+ my (@args, $arg, $tok, $td, $value);
367
+ if (/^([^<]+<\/[^>]+>)/) {
368
+ # handle simple property
369
+ s/^\s+</</; # remove whitespace if only whitespace before "<"
370
+ # Workaround for KML generated by Google Location History:
371
+ # lat/lon/alt are space-separated; we want commas.
372
+ s{(\S+)\s+(\S+)\s+(\S+)(</gx:coord>)}{$1,$2,$3$4};
373
+ push @args, $_;
374
+ } else {
375
+ # handle property with attributes
376
+ s/\s*=\s*(['"])\s*/=$1/g; # remove unnecessary white space in attributes
377
+ push @args, split;
378
+ }
379
+ foreach $arg (@args) {
366
380
  # parse attributes (eg. GPX 'lat' and 'lon')
367
381
  # (note: ignore namespace prefixes if they exist)
368
382
  if ($arg =~ /^(\w+:)?(\w+)=(['"])(.*?)\3/g) {
369
- my $tag = $xmlTag{lc $2};
383
+ my $tag = $xmlTag{lc $2} || $userTag{lc $2};
370
384
  if ($tag) {
371
385
  $$fix{$tag} = $4;
372
386
  if ($keyCategory{$tag}) {
@@ -382,7 +396,8 @@ sub LoadTrackLog($$;$)
382
396
  }
383
397
  # loop through XML elements
384
398
  while ($arg =~ m{([^<>]*)<(/)?(\w+:)?(\w+)(>|$)}g) {
385
- my $tag = $xmlTag{$tok = lc $4};
399
+ $tok = lc $4;
400
+ my $tag = $xmlTag{$tok} || $userTag{$tok};
386
401
  # parse as a simple property if this element has a value
387
402
  if (defined $tag and not $tag) {
388
403
  # a containing property was opened or closed
@@ -1137,20 +1152,20 @@ sub SetGeoValues($$;$)
1137
1152
  my $p1 = $$points{$t1};
1138
1153
  # check to see if we are extrapolating before the first entry in a track
1139
1154
  my $maxSecs = ($$p1{first} and $geoMaxIntSecs) ? $geoMaxExtSecs : $geoMaxIntSecs;
1155
+ my $tn; # find time of nearest fix
1156
+ if ($time - $t0 < $t1 - $time) {
1157
+ $tn = $t0;
1158
+ $iExt = $i0;
1159
+ } else {
1160
+ $tn = $t1;
1161
+ $iExt = $i1;
1162
+ }
1140
1163
  # don't interpolate if fixes are too far apart
1141
1164
  # (but always interpolate fixes inside the same TimeSpan)
1142
1165
  if ($t1 - $t0 > $maxSecs and (not $$p1{span} or not $$points{$t0}{span} or
1143
1166
  $$p1{span} != $$points{$t0}{span}))
1144
1167
  {
1145
1168
  # treat as an extrapolation -- use nearest fix if close enough
1146
- my $tn;
1147
- if ($time - $t0 < $t1 - $time) {
1148
- $tn = $t0;
1149
- $iExt = $i0;
1150
- } else {
1151
- $tn = $t1;
1152
- $iExt = $i1;
1153
- }
1154
1169
  if (abs($time - $tn) > $geoMaxExtSecs) {
1155
1170
  $err or $err = 'Time is too far from nearest GPS fix';
1156
1171
  $et->VPrint(2, ' Nearest fix: ', PrintFixTime($tn), ' (',
@@ -1167,6 +1182,8 @@ sub SetGeoValues($$;$)
1167
1182
  $et->VPrint(2, " Interpolating between fixes (f=$f0):\n",
1168
1183
  PrintFix($points, $t0, $t1)) if $verbose > 2;
1169
1184
  $fix = { };
1185
+ # copy user-defined tags from nearest fix
1186
+ $$fix{$_} = $$points{$tn}{$_} foreach values %userTag;
1170
1187
  # loop through available fix information categories
1171
1188
  # (pos, track, alt, orient)
1172
1189
  my ($category, $key);
@@ -1379,11 +1396,19 @@ Category: foreach $category (qw{pos track alt orient atemp err dop}) {
1379
1396
  unless ($exif) {
1380
1397
  @r = $et->SetNewValue(GPSDateTime => "$gpsDate $gpsTime", %opts);
1381
1398
  }
1399
+ # set user-defined tags
1400
+ foreach (sort values %userTag) {
1401
+ @r = $et->SetNewValue(substr($_, 1) => $$fix{$_}) if defined $$fix{$_};
1402
+ }
1382
1403
  } else {
1383
1404
  my %opts = ( IgnorePermanent => 1 );
1384
1405
  $opts{Replace} = 2 if defined $val; # remove existing new values
1406
+ # reset user-defined GPX tags
1407
+ InitUserTags($et); # (won't be set yet because we didn't read a GPX file)
1408
+ foreach (values %userTag) {
1409
+ my @r = $et->SetNewValue(substr($_, 1), undef, %opts);
1410
+ }
1385
1411
  $opts{Group} = $writeGroup if $writeGroup;
1386
-
1387
1412
  # reset any GPS values we might have already set
1388
1413
  foreach (qw(GPSLatitude GPSLatitudeRef GPSLongitude GPSLongitudeRef
1389
1414
  GPSAltitude GPSAltitudeRef GPSDateStamp GPSTimeStamp GPSDateTime
@@ -1530,7 +1555,7 @@ sub PrintFixTime($)
1530
1555
  {
1531
1556
  my $time = $_[0] + 0.0005; # round off to nearest ms
1532
1557
  my $fsec = int(($time - int($time)) * 1000);
1533
- return sprintf('%s.%.3d UTC', Image::ExifTool::ConvertUnixTime($time), $fsec);
1558
+ return Image::ExifTool::ConvertUnixTime($time, undef, 3) . ' UTC';
1534
1559
  }
1535
1560
 
1536
1561
  #------------------------------------------------------------------------------
@@ -1556,6 +1581,22 @@ sub PrintFix($@)
1556
1581
  return $str;
1557
1582
  }
1558
1583
 
1584
+ #------------------------------------------------------------------------------
1585
+ # Initialize %userTag for reading user-defined GPX tags
1586
+ # Inputs: 0) ExifTool ref
1587
+ sub InitUserTags($)
1588
+ {
1589
+ my $et = shift;
1590
+ %userTag = ( );
1591
+ if ($$et{OPTIONS}{GeoUserTag}) {
1592
+ foreach (split /\s*,\s*/, $$et{OPTIONS}{GeoUserTag}) {
1593
+ next unless /^(.+)=(.+)$/;
1594
+ $xmlTag{lc $2} and $et->Warn("User-defined GPX tag '${2}' conflicts with existing tag"), next;
1595
+ $userTag{lc $2} = "_$1"; # (leading underline prevents conflicts)
1596
+ }
1597
+ }
1598
+ }
1599
+
1559
1600
  #------------------------------------------------------------------------------
1560
1601
  1; # end
1561
1602
 
@@ -1590,7 +1631,7 @@ user-defined tag GPSRoll, must be active.
1590
1631
 
1591
1632
  =head1 AUTHOR
1592
1633
 
1593
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1634
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1594
1635
 
1595
1636
  This library is free software; you can redistribute it and/or modify it
1596
1637
  under the same terms as Perl itself.
@@ -918,7 +918,7 @@ metadata from GoPro MP4 videos.
918
918
 
919
919
  =head1 AUTHOR
920
920
 
921
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
921
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
922
922
 
923
923
  This library is free software; you can redistribute it and/or modify it
924
924
  under the same terms as Perl itself.
@@ -130,7 +130,8 @@ my %sAppInfo = (
130
130
  NAMESPACE => 'GPano',
131
131
  NOTES => q{
132
132
  Panorama tags written by Google Photosphere. See
133
- L<https://developers.google.com/panorama/metadata/> for the specification.
133
+ L<https://developers.google.com/streetview/spherical-metadata> for the
134
+ specification.
134
135
  },
135
136
  UsePanoramaViewer => { Writable => 'boolean' },
136
137
  CaptureSoftware => { },
@@ -793,7 +794,7 @@ Google maker notes and write Google XMP tags.
793
794
 
794
795
  =head1 AUTHOR
795
796
 
796
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
797
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
797
798
 
798
799
  This library is free software; you can redistribute it and/or modify it
799
800
  under the same terms as Perl itself.
@@ -1123,7 +1123,7 @@ information from H.264 video streams.
1123
1123
 
1124
1124
  =head1 AUTHOR
1125
1125
 
1126
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1126
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1127
1127
 
1128
1128
  This library is free software; you can redistribute it and/or modify it
1129
1129
  under the same terms as Perl itself.
@@ -250,7 +250,7 @@ Hewlett-Packard maker notes.
250
250
 
251
251
  =head1 AUTHOR
252
252
 
253
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
253
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
254
254
 
255
255
  This library is free software; you can redistribute it and/or modify it
256
256
  under the same terms as Perl itself.
@@ -555,7 +555,7 @@ meta information from HTML documents.
555
555
 
556
556
  =head1 AUTHOR
557
557
 
558
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
558
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
559
559
 
560
560
  This library is free software; you can redistribute it and/or modify it
561
561
  under the same terms as Perl itself.
@@ -920,7 +920,7 @@ page.
920
920
 
921
921
  =head1 AUTHOR
922
922
 
923
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
923
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
924
924
 
925
925
  This library is free software; you can redistribute it and/or modify it
926
926
  under the same terms as Perl itself.
@@ -1437,7 +1437,7 @@ data created on one device into another device's native color space.
1437
1437
 
1438
1438
  =head1 AUTHOR
1439
1439
 
1440
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1440
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1441
1441
 
1442
1442
  This library is free software; you can redistribute it and/or modify it
1443
1443
  under the same terms as Perl itself.
@@ -121,7 +121,7 @@ information from Windows ICO (icon) and CUR (cursor) files.
121
121
 
122
122
  =head1 AUTHOR
123
123
 
124
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
124
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
125
125
 
126
126
  This library is free software; you can redistribute it and/or modify it
127
127
  under the same terms as Perl itself.
@@ -1747,7 +1747,7 @@ other types of audio files.
1747
1747
 
1748
1748
  =head1 AUTHOR
1749
1749
 
1750
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1750
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1751
1751
 
1752
1752
  This library is free software; you can redistribute it and/or modify it
1753
1753
  under the same terms as Perl itself.
@@ -1287,7 +1287,7 @@ image files.
1287
1287
 
1288
1288
  =head1 AUTHOR
1289
1289
 
1290
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1290
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
1291
1291
 
1292
1292
  This library is free software; you can redistribute it and/or modify it
1293
1293
  under the same terms as Perl itself.
@@ -184,7 +184,7 @@ information from ISO 9660 disk images.
184
184
 
185
185
  =head1 AUTHOR
186
186
 
187
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
187
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
188
188
 
189
189
  This library is free software; you can redistribute it and/or modify it
190
190
  under the same terms as Perl itself.
@@ -191,7 +191,7 @@ information (including artwork images) from iTunes Cover Flow files.
191
191
 
192
192
  =head1 AUTHOR
193
193
 
194
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
194
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
195
195
 
196
196
  This library is free software; you can redistribute it and/or modify it
197
197
  under the same terms as Perl itself.
@@ -356,7 +356,7 @@ ARRAY reference in a special "_ordered_keys_" element of this hash.
356
356
 
357
357
  =head1 AUTHOR
358
358
 
359
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
359
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
360
360
 
361
361
  This library is free software; you can redistribute it and/or modify it
362
362
  under the same terms as Perl itself.
@@ -277,7 +277,7 @@ them and the LargeFileSupport option is enabled.
277
277
 
278
278
  =head1 AUTHOR
279
279
 
280
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
280
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
281
281
 
282
282
  This library is free software; you can redistribute it and/or modify it
283
283
  under the same terms as Perl itself.
@@ -206,7 +206,7 @@ IJPEG SDK, used in cameras such as the P2 Pro.
206
206
 
207
207
  =head1 AUTHOR
208
208
 
209
- Copyright 2003-2025, Marcos Del Sol Vives (marcos at orca.pet)
209
+ Copyright 2003-2026, Marcos Del Sol Vives (marcos at orca.pet)
210
210
 
211
211
  This library is free software; you can redistribute it and/or modify it
212
212
  under the same terms as Perl itself.
@@ -11,7 +11,7 @@ use strict;
11
11
  use vars qw($VERSION);
12
12
  use Image::ExifTool qw(:DataAccess :Utils);
13
13
 
14
- $VERSION = '1.39';
14
+ $VERSION = '1.40';
15
15
 
16
16
  sub ProcessOcad($$$);
17
17
  sub ProcessJPEG_HDR($$$);
@@ -212,6 +212,10 @@ sub ProcessJPEG_HDR($$$);
212
212
  Name => 'Pentax',
213
213
  Condition => '$$valPt =~ /^PENTAX \0/',
214
214
  SubDirectory => { TagTable => 'Image::ExifTool::Pentax::Main' },
215
+ }, {
216
+ Name => 'Ricoh',
217
+ Condition => '$$valPt =~ /^RICOH\0/',
218
+ SubDirectory => { TagTable => 'Image::ExifTool::Pentax::Main' },
215
219
  }, {
216
220
  Name => 'Huawei',
217
221
  Condition => '$$valPt =~ /^HUAWEI\0\0/',
@@ -817,7 +821,7 @@ segments are included in the Image::ExifTool module itself.
817
821
 
818
822
  =head1 AUTHOR
819
823
 
820
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
824
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
821
825
 
822
826
  This library is free software; you can redistribute it and/or modify it
823
827
  under the same terms as Perl itself.
@@ -2590,7 +2590,7 @@ estimated JPEG quality if requested.
2590
2590
 
2591
2591
  =head1 AUTHOR
2592
2592
 
2593
- Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2593
+ Copyright 2003-2026, Phil Harvey (philharvey66 at gmail.com)
2594
2594
 
2595
2595
  This library is free software; you can redistribute it and/or modify it
2596
2596
  under the same terms as Perl itself.