mini_exiftool_vendored 8.9.7.v2 → 9.2.7.v1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1023) hide show
  1. checksums.yaml +7 -0
  2. data/lib/mini_exiftool_vendored.rb +1 -1
  3. data/lib/mini_exiftool_vendored/version.rb +2 -2
  4. data/mini_exiftool_vendored.gemspec +1 -1
  5. data/vendor/Image-ExifTool-9.27/Changes +6162 -0
  6. data/vendor/Image-ExifTool-9.27/MANIFEST +858 -0
  7. data/vendor/Image-ExifTool-9.27/META.yml +26 -0
  8. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/Makefile.PL +0 -0
  9. data/vendor/Image-ExifTool-9.27/README +227 -0
  10. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/exif2iptc.args +0 -0
  11. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/exif2xmp.args +0 -0
  12. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/gps2xmp.args +0 -0
  13. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/iptc2exif.args +0 -0
  14. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/iptc2xmp.args +0 -0
  15. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/iptcCore.args +0 -0
  16. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/pdf2xmp.args +0 -0
  17. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/xmp2exif.args +0 -0
  18. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/xmp2gps.args +0 -0
  19. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/xmp2iptc.args +0 -0
  20. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/arg_files}/xmp2pdf.args +0 -0
  21. data/vendor/Image-ExifTool-9.27/config_files/ExifTool_config +299 -0
  22. data/vendor/Image-ExifTool-9.27/config_files/convert_regions.config +81 -0
  23. data/vendor/Image-ExifTool-9.27/exiftool +5655 -0
  24. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/fmt_files}/gpx.fmt +0 -0
  25. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27/fmt_files}/gpx_wpt.fmt +0 -0
  26. data/vendor/Image-ExifTool-9.27/fmt_files/kml.fmt +53 -0
  27. data/vendor/Image-ExifTool-9.27/html/ExifTool.html +1951 -0
  28. data/vendor/Image-ExifTool-9.27/html/MIE1.1-20070121.pdf +0 -0
  29. data/vendor/Image-ExifTool-9.27/html/Shift.html +173 -0
  30. data/vendor/Image-ExifTool-9.27/html/TagNames/AFCP.html +49 -0
  31. data/vendor/Image-ExifTool-9.27/html/TagNames/AIFF.html +146 -0
  32. data/vendor/Image-ExifTool-9.27/html/TagNames/APE.html +149 -0
  33. data/vendor/Image-ExifTool-9.27/html/TagNames/APP12.html +188 -0
  34. data/vendor/Image-ExifTool-9.27/html/TagNames/ASF.html +1075 -0
  35. data/vendor/Image-ExifTool-9.27/html/TagNames/BMP.html +110 -0
  36. data/vendor/Image-ExifTool-9.27/html/TagNames/Canon.html +8021 -0
  37. data/vendor/Image-ExifTool-9.27/html/TagNames/CanonCustom.html +2044 -0
  38. data/vendor/Image-ExifTool-9.27/html/TagNames/CanonRaw.html +561 -0
  39. data/vendor/Image-ExifTool-9.27/html/TagNames/CanonVRD.html +1222 -0
  40. data/vendor/Image-ExifTool-9.27/html/TagNames/Casio.html +1569 -0
  41. data/vendor/Image-ExifTool-9.27/html/TagNames/Composite.html +659 -0
  42. data/vendor/Image-ExifTool-9.27/html/TagNames/DICOM.html +15762 -0
  43. data/vendor/Image-ExifTool-9.27/html/TagNames/DNG.html +273 -0
  44. data/vendor/Image-ExifTool-9.27/html/TagNames/DV.html +75 -0
  45. data/vendor/Image-ExifTool-9.27/html/TagNames/DarwinCore.html +1445 -0
  46. data/vendor/Image-ExifTool-9.27/html/TagNames/DjVu.html +312 -0
  47. data/vendor/Image-ExifTool-9.27/html/TagNames/EXE.html +697 -0
  48. data/vendor/Image-ExifTool-9.27/html/TagNames/EXIF.html +3244 -0
  49. data/vendor/Image-ExifTool-9.27/html/TagNames/Extra.html +300 -0
  50. data/vendor/Image-ExifTool-9.27/html/TagNames/FLAC.html +183 -0
  51. data/vendor/Image-ExifTool-9.27/html/TagNames/FLIR.html +615 -0
  52. data/vendor/Image-ExifTool-9.27/html/TagNames/Flash.html +419 -0
  53. data/vendor/Image-ExifTool-9.27/html/TagNames/FlashPix.html +1435 -0
  54. data/vendor/Image-ExifTool-9.27/html/TagNames/Font.html +485 -0
  55. data/vendor/Image-ExifTool-9.27/html/TagNames/FotoStation.html +103 -0
  56. data/vendor/Image-ExifTool-9.27/html/TagNames/FujiFilm.html +636 -0
  57. data/vendor/Image-ExifTool-9.27/html/TagNames/GE.html +40 -0
  58. data/vendor/Image-ExifTool-9.27/html/TagNames/GIF.html +116 -0
  59. data/vendor/Image-ExifTool-9.27/html/TagNames/GIMP.html +140 -0
  60. data/vendor/Image-ExifTool-9.27/html/TagNames/GPS.html +221 -0
  61. data/vendor/Image-ExifTool-9.27/html/TagNames/GeoTiff.html +2177 -0
  62. data/vendor/Image-ExifTool-9.27/html/TagNames/H264.html +387 -0
  63. data/vendor/Image-ExifTool-9.27/html/TagNames/HP.html +155 -0
  64. data/vendor/Image-ExifTool-9.27/html/TagNames/HTML.html +666 -0
  65. data/vendor/Image-ExifTool-9.27/html/TagNames/ICC_Profile.html +710 -0
  66. data/vendor/Image-ExifTool-9.27/html/TagNames/ID3.html +1429 -0
  67. data/vendor/Image-ExifTool-9.27/html/TagNames/IPTC.html +895 -0
  68. data/vendor/Image-ExifTool-9.27/html/TagNames/ITC.html +90 -0
  69. data/vendor/Image-ExifTool-9.27/html/TagNames/JFIF.html +61 -0
  70. data/vendor/Image-ExifTool-9.27/html/TagNames/JPEG.html +523 -0
  71. data/vendor/Image-ExifTool-9.27/html/TagNames/JVC.html +56 -0
  72. data/vendor/Image-ExifTool-9.27/html/TagNames/Jpeg2000.html +464 -0
  73. data/vendor/Image-ExifTool-9.27/html/TagNames/Kodak.html +1759 -0
  74. data/vendor/Image-ExifTool-9.27/html/TagNames/KyoceraRaw.html +92 -0
  75. data/vendor/Image-ExifTool-9.27/html/TagNames/LNK.html +478 -0
  76. data/vendor/Image-ExifTool-9.27/html/TagNames/Leaf.html +870 -0
  77. data/vendor/Image-ExifTool-9.27/html/TagNames/M2TS.html +133 -0
  78. data/vendor/Image-ExifTool-9.27/html/TagNames/MIE.html +1026 -0
  79. data/vendor/Image-ExifTool-9.27/html/TagNames/MIFF.html +196 -0
  80. data/vendor/Image-ExifTool-9.27/html/TagNames/MNG.html +847 -0
  81. data/vendor/Image-ExifTool-9.27/html/TagNames/MPC.html +97 -0
  82. data/vendor/Image-ExifTool-9.27/html/TagNames/MPEG.html +249 -0
  83. data/vendor/Image-ExifTool-9.27/html/TagNames/MPF.html +199 -0
  84. data/vendor/Image-ExifTool-9.27/html/TagNames/MWG.html +519 -0
  85. data/vendor/Image-ExifTool-9.27/html/TagNames/MXF.html +6673 -0
  86. data/vendor/Image-ExifTool-9.27/html/TagNames/Matroska.html +1069 -0
  87. data/vendor/Image-ExifTool-9.27/html/TagNames/Microsoft.html +2066 -0
  88. data/vendor/Image-ExifTool-9.27/html/TagNames/Minolta.html +2550 -0
  89. data/vendor/Image-ExifTool-9.27/html/TagNames/MinoltaRaw.html +326 -0
  90. data/vendor/Image-ExifTool-9.27/html/TagNames/Nikon.html +4453 -0
  91. data/vendor/Image-ExifTool-9.27/html/TagNames/NikonCapture.html +776 -0
  92. data/vendor/Image-ExifTool-9.27/html/TagNames/NikonCustom.html +3835 -0
  93. data/vendor/Image-ExifTool-9.27/html/TagNames/OOXML.html +280 -0
  94. data/vendor/Image-ExifTool-9.27/html/TagNames/Ogg.html +44 -0
  95. data/vendor/Image-ExifTool-9.27/html/TagNames/Olympus.html +3331 -0
  96. data/vendor/Image-ExifTool-9.27/html/TagNames/OpenEXR.html +222 -0
  97. data/vendor/Image-ExifTool-9.27/html/TagNames/PDF.html +745 -0
  98. data/vendor/Image-ExifTool-9.27/html/TagNames/PGF.html +80 -0
  99. data/vendor/Image-ExifTool-9.27/html/TagNames/PICT.html +753 -0
  100. data/vendor/Image-ExifTool-9.27/html/TagNames/PLIST.html +86 -0
  101. data/vendor/Image-ExifTool-9.27/html/TagNames/PNG.html +515 -0
  102. data/vendor/Image-ExifTool-9.27/html/TagNames/PSP.html +160 -0
  103. data/vendor/Image-ExifTool-9.27/html/TagNames/Panasonic.html +1359 -0
  104. data/vendor/Image-ExifTool-9.27/html/TagNames/PanasonicRaw.html +214 -0
  105. data/vendor/Image-ExifTool-9.27/html/TagNames/Pentax.html +4329 -0
  106. data/vendor/Image-ExifTool-9.27/html/TagNames/PhaseOne.html +258 -0
  107. data/vendor/Image-ExifTool-9.27/html/TagNames/PhotoCD.html +402 -0
  108. data/vendor/Image-ExifTool-9.27/html/TagNames/PhotoMechanic.html +196 -0
  109. data/vendor/Image-ExifTool-9.27/html/TagNames/Photoshop.html +460 -0
  110. data/vendor/Image-ExifTool-9.27/html/TagNames/PostScript.html +125 -0
  111. data/vendor/Image-ExifTool-9.27/html/TagNames/PrintIM.html +31 -0
  112. data/vendor/Image-ExifTool-9.27/html/TagNames/Qualcomm.html +4778 -0
  113. data/vendor/Image-ExifTool-9.27/html/TagNames/QuickTime.html +2967 -0
  114. data/vendor/Image-ExifTool-9.27/html/TagNames/RIFF.html +1164 -0
  115. data/vendor/Image-ExifTool-9.27/html/TagNames/RSRC.html +74 -0
  116. data/vendor/Image-ExifTool-9.27/html/TagNames/RTF.html +150 -0
  117. data/vendor/Image-ExifTool-9.27/html/TagNames/Radiance.html +87 -0
  118. data/vendor/Image-ExifTool-9.27/html/TagNames/Rawzor.html +45 -0
  119. data/vendor/Image-ExifTool-9.27/html/TagNames/Real.html +780 -0
  120. data/vendor/Image-ExifTool-9.27/html/TagNames/Reconyx.html +132 -0
  121. data/vendor/Image-ExifTool-9.27/html/TagNames/Ricoh.html +456 -0
  122. data/vendor/Image-ExifTool-9.27/html/TagNames/Samsung.html +377 -0
  123. data/vendor/Image-ExifTool-9.27/html/TagNames/Sanyo.html +366 -0
  124. data/vendor/Image-ExifTool-9.27/html/TagNames/Shortcuts.html +237 -0
  125. data/vendor/Image-ExifTool-9.27/html/TagNames/Sigma.html +372 -0
  126. data/vendor/Image-ExifTool-9.27/html/TagNames/SigmaRaw.html +403 -0
  127. data/vendor/Image-ExifTool-9.27/html/TagNames/Sony.html +4052 -0
  128. data/vendor/Image-ExifTool-9.27/html/TagNames/SonyIDC.html +267 -0
  129. data/vendor/Image-ExifTool-9.27/html/TagNames/Stim.html +200 -0
  130. data/vendor/Image-ExifTool-9.27/html/TagNames/Theora.html +102 -0
  131. data/vendor/Image-ExifTool-9.27/html/TagNames/Unknown.html +31 -0
  132. data/vendor/Image-ExifTool-9.27/html/TagNames/Vorbis.html +228 -0
  133. data/vendor/Image-ExifTool-9.27/html/TagNames/XMP.html +7188 -0
  134. data/vendor/Image-ExifTool-9.27/html/TagNames/ZIP.html +204 -0
  135. data/vendor/Image-ExifTool-9.27/html/TagNames/iWork.html +49 -0
  136. data/vendor/Image-ExifTool-9.27/html/TagNames/index.html +192 -0
  137. data/vendor/Image-ExifTool-9.27/html/TagNames/style.css +31 -0
  138. data/vendor/Image-ExifTool-9.27/html/ancient_history.html +6564 -0
  139. data/vendor/Image-ExifTool-9.27/html/canon_raw.html +366 -0
  140. data/vendor/Image-ExifTool-9.27/html/commentary.html +319 -0
  141. data/vendor/Image-ExifTool-9.27/html/config.html +312 -0
  142. data/vendor/Image-ExifTool-9.27/html/data_members.html +264 -0
  143. data/vendor/Image-ExifTool-9.27/html/exiftool_pod.html +2325 -0
  144. data/vendor/Image-ExifTool-9.27/html/faq.html +1427 -0
  145. data/vendor/Image-ExifTool-9.27/html/filename.html +281 -0
  146. data/vendor/Image-ExifTool-9.27/html/geotag.html +642 -0
  147. data/vendor/Image-ExifTool-9.27/html/history.html +433 -0
  148. data/vendor/Image-ExifTool-9.27/html/htmldump.html +732 -0
  149. data/vendor/Image-ExifTool-9.27/html/idiosyncracies.html +251 -0
  150. data/vendor/Image-ExifTool-9.27/html/index.html +1266 -0
  151. data/vendor/Image-ExifTool-9.27/html/install.html +239 -0
  152. data/vendor/Image-ExifTool-9.27/html/metafiles.html +266 -0
  153. data/vendor/Image-ExifTool-9.27/html/overview.png +0 -0
  154. data/vendor/Image-ExifTool-9.27/html/standards.html +277 -0
  155. data/vendor/Image-ExifTool-9.27/html/struct.html +342 -0
  156. data/vendor/Image-ExifTool-9.27/html/style.css +31 -0
  157. data/vendor/Image-ExifTool-9.27/html/under.html +120 -0
  158. data/vendor/Image-ExifTool-9.27/html/verbose.html +195 -0
  159. data/vendor/Image-ExifTool-9.27/html/writing.html +239 -0
  160. data/vendor/Image-ExifTool-9.27/lib/File/RandomAccess.pm +378 -0
  161. data/vendor/Image-ExifTool-9.27/lib/File/RandomAccess.pod +231 -0
  162. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool.pm +6811 -0
  163. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool.pod +2353 -0
  164. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/AES.pm +501 -0
  165. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/AFCP.pm +280 -0
  166. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/AIFF.pm +271 -0
  167. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/APE.pm +262 -0
  168. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/APP12.pm +322 -0
  169. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/ASF.pm +871 -0
  170. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/BMP.pm +179 -0
  171. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/BZZ.pm +472 -0
  172. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/BigTIFF.pm +282 -0
  173. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/BuildTagLookup.pm +2391 -0
  174. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Canon.pm +7736 -0
  175. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/CanonCustom.pm +2523 -0
  176. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/CanonRaw.pm +931 -0
  177. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/CanonVRD.pm +1481 -0
  178. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/CaptureOne.pm +235 -0
  179. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Casio.pm +2013 -0
  180. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Charset.pm +396 -0
  181. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Arabic.pm +0 -0
  182. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Baltic.pm +0 -0
  183. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Cyrillic.pm +0 -0
  184. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Greek.pm +0 -0
  185. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Hebrew.pm +0 -0
  186. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/JIS.pm +0 -0
  187. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Latin.pm +0 -0
  188. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Latin2.pm +0 -0
  189. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacArabic.pm +0 -0
  190. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacChineseCN.pm +0 -0
  191. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacChineseTW.pm +0 -0
  192. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacCroatian.pm +0 -0
  193. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacCyrillic.pm +0 -0
  194. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacGreek.pm +0 -0
  195. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacHebrew.pm +0 -0
  196. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacIceland.pm +0 -0
  197. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacJapanese.pm +0 -0
  198. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacKorean.pm +0 -0
  199. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacLatin2.pm +0 -0
  200. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacRSymbol.pm +0 -0
  201. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacRoman.pm +0 -0
  202. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacRomanian.pm +0 -0
  203. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacThai.pm +0 -0
  204. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/MacTurkish.pm +0 -0
  205. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/PDFDoc.pm +0 -0
  206. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/ShiftJIS.pm +0 -0
  207. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Symbol.pm +0 -0
  208. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Thai.pm +0 -0
  209. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Turkish.pm +0 -0
  210. data/vendor/{Image-ExifTool-8.97 → Image-ExifTool-9.27}/lib/Image/ExifTool/Charset/Vietnam.pm +0 -0
  211. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/DICOM.pm +3835 -0
  212. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/DNG.pm +835 -0
  213. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/DV.pm +319 -0
  214. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/DarwinCore.pm +317 -0
  215. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/DjVu.pm +373 -0
  216. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/EXE.pm +1228 -0
  217. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Exif.pm +4526 -0
  218. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/FLAC.pm +296 -0
  219. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/FLIR.pm +672 -0
  220. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Fixup.pm +354 -0
  221. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Flash.pm +755 -0
  222. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/FlashPix.pm +1882 -0
  223. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Font.pm +643 -0
  224. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/FotoStation.pm +258 -0
  225. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/FujiFilm.pm +1019 -0
  226. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/GE.pm +80 -0
  227. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/GIF.pm +542 -0
  228. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/GIMP.pm +258 -0
  229. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/GPS.pm +511 -0
  230. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/GeoTiff.pm +2187 -0
  231. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Geotag.pm +1173 -0
  232. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/H264.pm +1097 -0
  233. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/HP.pm +262 -0
  234. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/HTML.pm +576 -0
  235. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/HtmlDump.pm +895 -0
  236. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/ICC_Profile.pm +999 -0
  237. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/ID3.pm +1486 -0
  238. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/IPTC.pm +1244 -0
  239. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/ITC.pm +215 -0
  240. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Import.pm +308 -0
  241. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/InDesign.pm +277 -0
  242. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/JPEG.pm +588 -0
  243. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/JPEGDigest.pm +2511 -0
  244. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/JVC.pm +130 -0
  245. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Jpeg2000.pm +881 -0
  246. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Kodak.pm +2014 -0
  247. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/KyoceraRaw.pm +173 -0
  248. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/LNK.pm +723 -0
  249. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/cs.pm +1586 -0
  250. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/de.pm +7356 -0
  251. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/en_ca.pm +557 -0
  252. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/en_gb.pm +572 -0
  253. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/es.pm +4016 -0
  254. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/fi.pm +2856 -0
  255. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/fr.pm +4720 -0
  256. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/it.pm +7917 -0
  257. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/ja.pm +5815 -0
  258. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/ko.pm +2332 -0
  259. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/nl.pm +3220 -0
  260. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/pl.pm +1140 -0
  261. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/ru.pm +769 -0
  262. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/sv.pm +639 -0
  263. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/tr.pm +544 -0
  264. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/zh_cn.pm +1329 -0
  265. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Lang/zh_tw.pm +802 -0
  266. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Leaf.pm +515 -0
  267. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/M2TS.pm +729 -0
  268. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MIE.pm +2561 -0
  269. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MIEUnits.pod +377 -0
  270. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MIFF.pm +279 -0
  271. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MNG.pm +684 -0
  272. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MPC.pm +156 -0
  273. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MPEG.pm +736 -0
  274. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MPF.pm +289 -0
  275. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MWG.pm +736 -0
  276. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MXF.pm +3032 -0
  277. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MakerNotes.pm +1569 -0
  278. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Matroska.pm +891 -0
  279. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Microsoft.pm +879 -0
  280. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Minolta.pm +2823 -0
  281. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/MinoltaRaw.pm +534 -0
  282. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Nikon.pm +6105 -0
  283. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/NikonCapture.pm +911 -0
  284. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/NikonCustom.pm +4405 -0
  285. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/OOXML.pm +409 -0
  286. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Ogg.pm +237 -0
  287. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Olympus.pm +3540 -0
  288. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/OpenEXR.pm +324 -0
  289. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PDF.pm +2327 -0
  290. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PGF.pm +143 -0
  291. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PICT.pm +1260 -0
  292. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PLIST.pm +449 -0
  293. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PNG.pm +1100 -0
  294. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PPM.pm +169 -0
  295. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PSP.pm +305 -0
  296. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Panasonic.pm +1921 -0
  297. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PanasonicRaw.pm +535 -0
  298. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Pentax.pm +5486 -0
  299. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PhaseOne.pm +557 -0
  300. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PhotoCD.pm +507 -0
  301. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PhotoMechanic.pm +256 -0
  302. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Photoshop.pm +597 -0
  303. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PostScript.pm +693 -0
  304. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/PrintIM.pm +125 -0
  305. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Qualcomm.pm +1344 -0
  306. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/QuickTime.pm +3316 -0
  307. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/README +943 -0
  308. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/RIFF.pm +1322 -0
  309. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/RSRC.pm +241 -0
  310. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/RTF.pm +383 -0
  311. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Radiance.pm +144 -0
  312. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Rawzor.pm +190 -0
  313. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Real.pm +736 -0
  314. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Reconyx.pm +190 -0
  315. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Ricoh.pm +740 -0
  316. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Samsung.pm +769 -0
  317. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Sanyo.pm +439 -0
  318. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Shift.pl +594 -0
  319. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Shortcuts.pm +291 -0
  320. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Sigma.pm +574 -0
  321. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/SigmaRaw.pm +649 -0
  322. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Sony.pm +5388 -0
  323. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/SonyIDC.pm +330 -0
  324. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Stim.pm +196 -0
  325. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/TagInfoXML.pm +792 -0
  326. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/TagLookup.pm +7911 -0
  327. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/TagNames.pod +25645 -0
  328. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Theora.pm +145 -0
  329. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Unknown.pm +66 -0
  330. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Vorbis.pm +237 -0
  331. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/WriteCanonRaw.pl +637 -0
  332. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/WriteExif.pl +3674 -0
  333. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/WriteIPTC.pl +702 -0
  334. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/WritePDF.pl +759 -0
  335. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/WritePNG.pl +330 -0
  336. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/WritePhotoshop.pl +266 -0
  337. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/WritePostScript.pl +777 -0
  338. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/WriteXMP.pl +1318 -0
  339. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/Writer.pl +5755 -0
  340. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/XMP.pm +3535 -0
  341. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/XMP2.pl +1298 -0
  342. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/XMPStruct.pl +813 -0
  343. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/ZIP.pm +623 -0
  344. data/vendor/Image-ExifTool-9.27/lib/Image/ExifTool/iWork.pm +223 -0
  345. data/vendor/Image-ExifTool-9.27/perl-Image-ExifTool.spec +104 -0
  346. data/vendor/Image-ExifTool-9.27/t/AFCP.t +44 -0
  347. data/vendor/Image-ExifTool-9.27/t/AFCP_2.out +37 -0
  348. data/vendor/Image-ExifTool-9.27/t/AFCP_3.out +20 -0
  349. data/vendor/Image-ExifTool-9.27/t/AIFF.t +28 -0
  350. data/vendor/Image-ExifTool-9.27/t/AIFF_2.out +31 -0
  351. data/vendor/Image-ExifTool-9.27/t/APE.t +38 -0
  352. data/vendor/Image-ExifTool-9.27/t/APE_2.out +28 -0
  353. data/vendor/Image-ExifTool-9.27/t/APE_3.out +57 -0
  354. data/vendor/Image-ExifTool-9.27/t/ASF.t +28 -0
  355. data/vendor/Image-ExifTool-9.27/t/ASF_2.out +48 -0
  356. data/vendor/Image-ExifTool-9.27/t/BMP.t +28 -0
  357. data/vendor/Image-ExifTool-9.27/t/BMP_2.out +21 -0
  358. data/vendor/Image-ExifTool-9.27/t/BigTIFF.t +28 -0
  359. data/vendor/Image-ExifTool-9.27/t/BigTIFF_2.out +19 -0
  360. data/vendor/Image-ExifTool-9.27/t/Canon.t +41 -0
  361. data/vendor/Image-ExifTool-9.27/t/CanonRaw.t +126 -0
  362. data/vendor/Image-ExifTool-9.27/t/CanonRaw_2.out +165 -0
  363. data/vendor/Image-ExifTool-9.27/t/CanonRaw_4.out +214 -0
  364. data/vendor/Image-ExifTool-9.27/t/CanonRaw_5.out +207 -0
  365. data/vendor/Image-ExifTool-9.27/t/CanonRaw_6.out +231 -0
  366. data/vendor/Image-ExifTool-9.27/t/CanonRaw_7.out +246 -0
  367. data/vendor/Image-ExifTool-9.27/t/CanonVRD.t +129 -0
  368. data/vendor/Image-ExifTool-9.27/t/CanonVRD_11.out +118 -0
  369. data/vendor/Image-ExifTool-9.27/t/CanonVRD_12.out +12 -0
  370. data/vendor/Image-ExifTool-9.27/t/CanonVRD_2.out +116 -0
  371. data/vendor/Image-ExifTool-9.27/t/CanonVRD_3.out +116 -0
  372. data/vendor/Image-ExifTool-9.27/t/CanonVRD_4.out +2 -0
  373. data/vendor/Image-ExifTool-9.27/t/CanonVRD_5.out +3 -0
  374. data/vendor/Image-ExifTool-9.27/t/CanonVRD_6.out +3 -0
  375. data/vendor/Image-ExifTool-9.27/t/CanonVRD_7.out +2 -0
  376. data/vendor/Image-ExifTool-9.27/t/CanonVRD_8.out +2 -0
  377. data/vendor/Image-ExifTool-9.27/t/CanonVRD_9.out +1 -0
  378. data/vendor/Image-ExifTool-9.27/t/Canon_2.out +350 -0
  379. data/vendor/Image-ExifTool-9.27/t/Canon_3.out +3 -0
  380. data/vendor/Image-ExifTool-9.27/t/Casio.t +54 -0
  381. data/vendor/Image-ExifTool-9.27/t/Casio_2.out +70 -0
  382. data/vendor/Image-ExifTool-9.27/t/Casio_3.out +100 -0
  383. data/vendor/Image-ExifTool-9.27/t/Casio_4.out +26 -0
  384. data/vendor/Image-ExifTool-9.27/t/Casio_5.out +78 -0
  385. data/vendor/Image-ExifTool-9.27/t/Casio_6.out +115 -0
  386. data/vendor/Image-ExifTool-9.27/t/DICOM.t +28 -0
  387. data/vendor/Image-ExifTool-9.27/t/DICOM_2.out +108 -0
  388. data/vendor/Image-ExifTool-9.27/t/DNG.t +39 -0
  389. data/vendor/Image-ExifTool-9.27/t/DNG_2.out +326 -0
  390. data/vendor/Image-ExifTool-9.27/t/DNG_3.out +4 -0
  391. data/vendor/Image-ExifTool-9.27/t/DV.t +27 -0
  392. data/vendor/Image-ExifTool-9.27/t/DV_2.out +24 -0
  393. data/vendor/Image-ExifTool-9.27/t/DjVu.t +28 -0
  394. data/vendor/Image-ExifTool-9.27/t/DjVu_2.out +44 -0
  395. data/vendor/Image-ExifTool-9.27/t/EXE.t +31 -0
  396. data/vendor/Image-ExifTool-9.27/t/EXE_2.out +40 -0
  397. data/vendor/Image-ExifTool-9.27/t/EXE_3.out +15 -0
  398. data/vendor/Image-ExifTool-9.27/t/EXE_4.out +14 -0
  399. data/vendor/Image-ExifTool-9.27/t/ExifTool.t +284 -0
  400. data/vendor/Image-ExifTool-9.27/t/ExifTool_16.out +180 -0
  401. data/vendor/Image-ExifTool-9.27/t/ExifTool_17.out +594 -0
  402. data/vendor/Image-ExifTool-9.27/t/ExifTool_2.out +399 -0
  403. data/vendor/Image-ExifTool-9.27/t/ExifTool_20.out +1 -0
  404. data/vendor/Image-ExifTool-9.27/t/ExifTool_21.out +1 -0
  405. data/vendor/Image-ExifTool-9.27/t/ExifTool_22.out +1 -0
  406. data/vendor/Image-ExifTool-9.27/t/ExifTool_23.out +6 -0
  407. data/vendor/Image-ExifTool-9.27/t/ExifTool_24.out +3 -0
  408. data/vendor/Image-ExifTool-9.27/t/ExifTool_25.out +13 -0
  409. data/vendor/Image-ExifTool-9.27/t/ExifTool_26.out +12 -0
  410. data/vendor/Image-ExifTool-9.27/t/ExifTool_3.out +87 -0
  411. data/vendor/Image-ExifTool-9.27/t/ExifTool_4.out +41 -0
  412. data/vendor/Image-ExifTool-9.27/t/ExifTool_5.out +6 -0
  413. data/vendor/Image-ExifTool-9.27/t/ExifTool_6.out +68 -0
  414. data/vendor/Image-ExifTool-9.27/t/ExifTool_7.out +125 -0
  415. data/vendor/Image-ExifTool-9.27/t/ExifTool_8.out +125 -0
  416. data/vendor/Image-ExifTool-9.27/t/ExifTool_9.out +33 -0
  417. data/vendor/Image-ExifTool-9.27/t/FLAC.t +37 -0
  418. data/vendor/Image-ExifTool-9.27/t/FLAC_2.out +25 -0
  419. data/vendor/Image-ExifTool-9.27/t/FLAC_3.out +19 -0
  420. data/vendor/Image-ExifTool-9.27/t/FLIR.t +30 -0
  421. data/vendor/Image-ExifTool-9.27/t/FLIR_2.out +93 -0
  422. data/vendor/Image-ExifTool-9.27/t/FLIR_3.out +47 -0
  423. data/vendor/Image-ExifTool-9.27/t/Flash.t +37 -0
  424. data/vendor/Image-ExifTool-9.27/t/FlashPix.t +30 -0
  425. data/vendor/Image-ExifTool-9.27/t/FlashPix_2.out +48 -0
  426. data/vendor/Image-ExifTool-9.27/t/Flash_2.out +20 -0
  427. data/vendor/Image-ExifTool-9.27/t/Flash_3.out +53 -0
  428. data/vendor/Image-ExifTool-9.27/t/Font.t +30 -0
  429. data/vendor/Image-ExifTool-9.27/t/Font_2.out +23 -0
  430. data/vendor/Image-ExifTool-9.27/t/Font_3.out +35 -0
  431. data/vendor/Image-ExifTool-9.27/t/Font_4.out +26 -0
  432. data/vendor/Image-ExifTool-9.27/t/Font_5.out +26 -0
  433. data/vendor/Image-ExifTool-9.27/t/Font_6.out +36 -0
  434. data/vendor/Image-ExifTool-9.27/t/Font_7.out +36 -0
  435. data/vendor/Image-ExifTool-9.27/t/FotoStation.t +38 -0
  436. data/vendor/Image-ExifTool-9.27/t/FotoStation_2.out +39 -0
  437. data/vendor/Image-ExifTool-9.27/t/FotoStation_3.out +3 -0
  438. data/vendor/Image-ExifTool-9.27/t/FujiFilm.t +78 -0
  439. data/vendor/Image-ExifTool-9.27/t/FujiFilm_2.out +87 -0
  440. data/vendor/Image-ExifTool-9.27/t/FujiFilm_3.out +88 -0
  441. data/vendor/Image-ExifTool-9.27/t/FujiFilm_4.out +117 -0
  442. data/vendor/Image-ExifTool-9.27/t/FujiFilm_5.out +1 -0
  443. data/vendor/Image-ExifTool-9.27/t/GE.t +46 -0
  444. data/vendor/Image-ExifTool-9.27/t/GE_2.out +84 -0
  445. data/vendor/Image-ExifTool-9.27/t/GE_3.out +84 -0
  446. data/vendor/Image-ExifTool-9.27/t/GIF.t +83 -0
  447. data/vendor/Image-ExifTool-9.27/t/GIF_2.out +40 -0
  448. data/vendor/Image-ExifTool-9.27/t/GIF_3.out +41 -0
  449. data/vendor/Image-ExifTool-9.27/t/GIF_4.out +16 -0
  450. data/vendor/Image-ExifTool-9.27/t/GIMP.t +27 -0
  451. data/vendor/Image-ExifTool-9.27/t/GIMP_2.out +63 -0
  452. data/vendor/Image-ExifTool-9.27/t/GPS.t +42 -0
  453. data/vendor/Image-ExifTool-9.27/t/GPS_2.out +94 -0
  454. data/vendor/Image-ExifTool-9.27/t/GPS_3.out +96 -0
  455. data/vendor/Image-ExifTool-9.27/t/GeoTiff.t +36 -0
  456. data/vendor/Image-ExifTool-9.27/t/GeoTiff_2.out +36 -0
  457. data/vendor/Image-ExifTool-9.27/t/GeoTiff_3.out +36 -0
  458. data/vendor/Image-ExifTool-9.27/t/Geotag.t +164 -0
  459. data/vendor/Image-ExifTool-9.27/t/Geotag_2.out +9 -0
  460. data/vendor/Image-ExifTool-9.27/t/Geotag_3.out +6 -0
  461. data/vendor/Image-ExifTool-9.27/t/Geotag_5.out +1 -0
  462. data/vendor/Image-ExifTool-9.27/t/Geotag_6.out +9 -0
  463. data/vendor/Image-ExifTool-9.27/t/Geotag_7.out +53 -0
  464. data/vendor/Image-ExifTool-9.27/t/Geotag_8.out +15 -0
  465. data/vendor/Image-ExifTool-9.27/t/HTML.t +28 -0
  466. data/vendor/Image-ExifTool-9.27/t/HTML_2.out +68 -0
  467. data/vendor/Image-ExifTool-9.27/t/IPTC.t +157 -0
  468. data/vendor/Image-ExifTool-9.27/t/IPTC_2.out +58 -0
  469. data/vendor/Image-ExifTool-9.27/t/IPTC_4.out +56 -0
  470. data/vendor/Image-ExifTool-9.27/t/IPTC_5.out +1 -0
  471. data/vendor/Image-ExifTool-9.27/t/IPTC_6.out +2 -0
  472. data/vendor/Image-ExifTool-9.27/t/IPTC_7.out +1 -0
  473. data/vendor/Image-ExifTool-9.27/t/IPTC_8.out +20 -0
  474. data/vendor/Image-ExifTool-9.27/t/ITC.t +28 -0
  475. data/vendor/Image-ExifTool-9.27/t/ITC_2.out +19 -0
  476. data/vendor/Image-ExifTool-9.27/t/InDesign.t +61 -0
  477. data/vendor/Image-ExifTool-9.27/t/InDesign_2.out +19 -0
  478. data/vendor/Image-ExifTool-9.27/t/InDesign_3.out +21 -0
  479. data/vendor/Image-ExifTool-9.27/t/InDesign_4.out +11 -0
  480. data/vendor/Image-ExifTool-9.27/t/JVC.t +36 -0
  481. data/vendor/Image-ExifTool-9.27/t/JVC_2.out +3 -0
  482. data/vendor/Image-ExifTool-9.27/t/JVC_3.out +3 -0
  483. data/vendor/Image-ExifTool-9.27/t/Jpeg2000.t +49 -0
  484. data/vendor/Image-ExifTool-9.27/t/Jpeg2000_2.out +63 -0
  485. data/vendor/Image-ExifTool-9.27/t/Jpeg2000_3.out +51 -0
  486. data/vendor/Image-ExifTool-9.27/t/Jpeg2000_4.out +15 -0
  487. data/vendor/Image-ExifTool-9.27/t/Kodak.t +40 -0
  488. data/vendor/Image-ExifTool-9.27/t/Kodak_2.out +109 -0
  489. data/vendor/Image-ExifTool-9.27/t/Kodak_3.out +119 -0
  490. data/vendor/Image-ExifTool-9.27/t/KyoceraRaw.t +28 -0
  491. data/vendor/Image-ExifTool-9.27/t/KyoceraRaw_2.out +27 -0
  492. data/vendor/Image-ExifTool-9.27/t/LNK.t +28 -0
  493. data/vendor/Image-ExifTool-9.27/t/LNK_2.out +45 -0
  494. data/vendor/Image-ExifTool-9.27/t/Lang.t +40 -0
  495. data/vendor/Image-ExifTool-9.27/t/Lang_1.out +1 -0
  496. data/vendor/Image-ExifTool-9.27/t/Lang_10.out +46 -0
  497. data/vendor/Image-ExifTool-9.27/t/Lang_11.out +46 -0
  498. data/vendor/Image-ExifTool-9.27/t/Lang_12.out +46 -0
  499. data/vendor/Image-ExifTool-9.27/t/Lang_13.out +46 -0
  500. data/vendor/Image-ExifTool-9.27/t/Lang_14.out +46 -0
  501. data/vendor/Image-ExifTool-9.27/t/Lang_15.out +46 -0
  502. data/vendor/Image-ExifTool-9.27/t/Lang_16.out +46 -0
  503. data/vendor/Image-ExifTool-9.27/t/Lang_17.out +46 -0
  504. data/vendor/Image-ExifTool-9.27/t/Lang_18.out +46 -0
  505. data/vendor/Image-ExifTool-9.27/t/Lang_2.out +46 -0
  506. data/vendor/Image-ExifTool-9.27/t/Lang_3.out +46 -0
  507. data/vendor/Image-ExifTool-9.27/t/Lang_4.out +46 -0
  508. data/vendor/Image-ExifTool-9.27/t/Lang_5.out +46 -0
  509. data/vendor/Image-ExifTool-9.27/t/Lang_6.out +46 -0
  510. data/vendor/Image-ExifTool-9.27/t/Lang_7.out +46 -0
  511. data/vendor/Image-ExifTool-9.27/t/Lang_8.out +46 -0
  512. data/vendor/Image-ExifTool-9.27/t/Lang_9.out +46 -0
  513. data/vendor/Image-ExifTool-9.27/t/M2TS.t +29 -0
  514. data/vendor/Image-ExifTool-9.27/t/M2TS_2.out +27 -0
  515. data/vendor/Image-ExifTool-9.27/t/MIE.t +82 -0
  516. data/vendor/Image-ExifTool-9.27/t/MIE_2.out +67 -0
  517. data/vendor/Image-ExifTool-9.27/t/MIE_3.out +134 -0
  518. data/vendor/Image-ExifTool-9.27/t/MIE_5.out +1 -0
  519. data/vendor/Image-ExifTool-9.27/t/MIE_6.out +1 -0
  520. data/vendor/Image-ExifTool-9.27/t/MIFF.t +28 -0
  521. data/vendor/Image-ExifTool-9.27/t/MIFF_2.out +108 -0
  522. data/vendor/Image-ExifTool-9.27/t/MP3.t +29 -0
  523. data/vendor/Image-ExifTool-9.27/t/MP3_2.out +45 -0
  524. data/vendor/Image-ExifTool-9.27/t/MWG.t +72 -0
  525. data/vendor/Image-ExifTool-9.27/t/MWG_2.out +13 -0
  526. data/vendor/Image-ExifTool-9.27/t/MWG_3.out +8 -0
  527. data/vendor/Image-ExifTool-9.27/t/MWG_4.out +5 -0
  528. data/vendor/Image-ExifTool-9.27/t/MWG_5.out +22 -0
  529. data/vendor/Image-ExifTool-9.27/t/MXF.t +27 -0
  530. data/vendor/Image-ExifTool-9.27/t/MXF_2.out +78 -0
  531. data/vendor/Image-ExifTool-9.27/t/Matroska.t +29 -0
  532. data/vendor/Image-ExifTool-9.27/t/Matroska_2.out +64 -0
  533. data/vendor/Image-ExifTool-9.27/t/Minolta.t +50 -0
  534. data/vendor/Image-ExifTool-9.27/t/Minolta_2.out +133 -0
  535. data/vendor/Image-ExifTool-9.27/t/Minolta_3.out +146 -0
  536. data/vendor/Image-ExifTool-9.27/t/Minolta_4.out +148 -0
  537. data/vendor/Image-ExifTool-9.27/t/Nikon.t +114 -0
  538. data/vendor/Image-ExifTool-9.27/t/Nikon_2.out +82 -0
  539. data/vendor/Image-ExifTool-9.27/t/Nikon_3.out +98 -0
  540. data/vendor/Image-ExifTool-9.27/t/Nikon_4.out +173 -0
  541. data/vendor/Image-ExifTool-9.27/t/Nikon_5.out +167 -0
  542. data/vendor/Image-ExifTool-9.27/t/Nikon_7.out +260 -0
  543. data/vendor/Image-ExifTool-9.27/t/Nikon_8.out +4 -0
  544. data/vendor/Image-ExifTool-9.27/t/Olympus.t +85 -0
  545. data/vendor/Image-ExifTool-9.27/t/Olympus_2.out +79 -0
  546. data/vendor/Image-ExifTool-9.27/t/Olympus_3.out +81 -0
  547. data/vendor/Image-ExifTool-9.27/t/Olympus_4.out +192 -0
  548. data/vendor/Image-ExifTool-9.27/t/Olympus_5.out +264 -0
  549. data/vendor/Image-ExifTool-9.27/t/Olympus_6.out +151 -0
  550. data/vendor/Image-ExifTool-9.27/t/Olympus_7.out +482 -0
  551. data/vendor/Image-ExifTool-9.27/t/OpenEXR.t +28 -0
  552. data/vendor/Image-ExifTool-9.27/t/OpenEXR_2.out +23 -0
  553. data/vendor/Image-ExifTool-9.27/t/PDF.t +295 -0
  554. data/vendor/Image-ExifTool-9.27/t/PDF_10.out +10 -0
  555. data/vendor/Image-ExifTool-9.27/t/PDF_11.out +10 -0
  556. data/vendor/Image-ExifTool-9.27/t/PDF_12.out +9 -0
  557. data/vendor/Image-ExifTool-9.27/t/PDF_14.out +5 -0
  558. data/vendor/Image-ExifTool-9.27/t/PDF_15.out +6 -0
  559. data/vendor/Image-ExifTool-9.27/t/PDF_16.out +4 -0
  560. data/vendor/Image-ExifTool-9.27/t/PDF_17.out +4 -0
  561. data/vendor/Image-ExifTool-9.27/t/PDF_18.out +5 -0
  562. data/vendor/Image-ExifTool-9.27/t/PDF_19.out +6 -0
  563. data/vendor/Image-ExifTool-9.27/t/PDF_2.out +117 -0
  564. data/vendor/Image-ExifTool-9.27/t/PDF_20.out +4 -0
  565. data/vendor/Image-ExifTool-9.27/t/PDF_22.out +3 -0
  566. data/vendor/Image-ExifTool-9.27/t/PDF_4.out +12 -0
  567. data/vendor/Image-ExifTool-9.27/t/PDF_5.out +8 -0
  568. data/vendor/Image-ExifTool-9.27/t/PDF_6.out +9 -0
  569. data/vendor/Image-ExifTool-9.27/t/PDF_7.out +11 -0
  570. data/vendor/Image-ExifTool-9.27/t/PDF_8.out +9 -0
  571. data/vendor/Image-ExifTool-9.27/t/PDF_9.out +9 -0
  572. data/vendor/Image-ExifTool-9.27/t/PGF.t +28 -0
  573. data/vendor/Image-ExifTool-9.27/t/PGF_2.out +32 -0
  574. data/vendor/Image-ExifTool-9.27/t/PICT.t +28 -0
  575. data/vendor/Image-ExifTool-9.27/t/PICT_2.out +15 -0
  576. data/vendor/Image-ExifTool-9.27/t/PLIST.t +31 -0
  577. data/vendor/Image-ExifTool-9.27/t/PLIST_2.out +20 -0
  578. data/vendor/Image-ExifTool-9.27/t/PLIST_3.out +20 -0
  579. data/vendor/Image-ExifTool-9.27/t/PNG.t +75 -0
  580. data/vendor/Image-ExifTool-9.27/t/PNG_2.out +22 -0
  581. data/vendor/Image-ExifTool-9.27/t/PNG_3.out +118 -0
  582. data/vendor/Image-ExifTool-9.27/t/PNG_4.out +12 -0
  583. data/vendor/Image-ExifTool-9.27/t/PPM.t +40 -0
  584. data/vendor/Image-ExifTool-9.27/t/PPM_2.out +15 -0
  585. data/vendor/Image-ExifTool-9.27/t/PPM_3.out +9 -0
  586. data/vendor/Image-ExifTool-9.27/t/PSP.t +28 -0
  587. data/vendor/Image-ExifTool-9.27/t/PSP_2.out +32 -0
  588. data/vendor/Image-ExifTool-9.27/t/Panasonic.t +60 -0
  589. data/vendor/Image-ExifTool-9.27/t/Panasonic_2.out +99 -0
  590. data/vendor/Image-ExifTool-9.27/t/Panasonic_3.out +119 -0
  591. data/vendor/Image-ExifTool-9.27/t/Panasonic_4.out +177 -0
  592. data/vendor/Image-ExifTool-9.27/t/Panasonic_5.out +228 -0
  593. data/vendor/Image-ExifTool-9.27/t/Pentax.t +50 -0
  594. data/vendor/Image-ExifTool-9.27/t/Pentax_2.out +219 -0
  595. data/vendor/Image-ExifTool-9.27/t/Pentax_3.out +262 -0
  596. data/vendor/Image-ExifTool-9.27/t/Pentax_4.out +123 -0
  597. data/vendor/Image-ExifTool-9.27/t/PhotoCD.t +28 -0
  598. data/vendor/Image-ExifTool-9.27/t/PhotoCD_2.out +35 -0
  599. data/vendor/Image-ExifTool-9.27/t/PhotoMechanic.t +38 -0
  600. data/vendor/Image-ExifTool-9.27/t/PhotoMechanic_2.out +81 -0
  601. data/vendor/Image-ExifTool-9.27/t/PhotoMechanic_3.out +2 -0
  602. data/vendor/Image-ExifTool-9.27/t/Photoshop.t +42 -0
  603. data/vendor/Image-ExifTool-9.27/t/Photoshop_2.out +96 -0
  604. data/vendor/Image-ExifTool-9.27/t/Photoshop_3.out +108 -0
  605. data/vendor/Image-ExifTool-9.27/t/PostScript.t +49 -0
  606. data/vendor/Image-ExifTool-9.27/t/PostScript_2.out +64 -0
  607. data/vendor/Image-ExifTool-9.27/t/PostScript_3.out +132 -0
  608. data/vendor/Image-ExifTool-9.27/t/QuickTime.t +31 -0
  609. data/vendor/Image-ExifTool-9.27/t/QuickTime_2.out +128 -0
  610. data/vendor/Image-ExifTool-9.27/t/QuickTime_3.out +69 -0
  611. data/vendor/Image-ExifTool-9.27/t/RIFF.t +31 -0
  612. data/vendor/Image-ExifTool-9.27/t/RIFF_2.out +24 -0
  613. data/vendor/Image-ExifTool-9.27/t/RIFF_3.out +52 -0
  614. data/vendor/Image-ExifTool-9.27/t/RIFF_4.out +16 -0
  615. data/vendor/Image-ExifTool-9.27/t/RTF.t +27 -0
  616. data/vendor/Image-ExifTool-9.27/t/RTF_2.out +20 -0
  617. data/vendor/Image-ExifTool-9.27/t/Radiance.t +28 -0
  618. data/vendor/Image-ExifTool-9.27/t/Radiance_2.out +22 -0
  619. data/vendor/Image-ExifTool-9.27/t/Real.t +46 -0
  620. data/vendor/Image-ExifTool-9.27/t/Real_2.out +68 -0
  621. data/vendor/Image-ExifTool-9.27/t/Real_3.out +18 -0
  622. data/vendor/Image-ExifTool-9.27/t/Real_4.out +11 -0
  623. data/vendor/Image-ExifTool-9.27/t/Ricoh.t +47 -0
  624. data/vendor/Image-ExifTool-9.27/t/Ricoh_2.out +70 -0
  625. data/vendor/Image-ExifTool-9.27/t/Ricoh_3.out +98 -0
  626. data/vendor/Image-ExifTool-9.27/t/Ricoh_4.out +112 -0
  627. data/vendor/Image-ExifTool-9.27/t/Sanyo.t +39 -0
  628. data/vendor/Image-ExifTool-9.27/t/Sanyo_2.out +101 -0
  629. data/vendor/Image-ExifTool-9.27/t/Sanyo_3.out +111 -0
  630. data/vendor/Image-ExifTool-9.27/t/Sigma.t +60 -0
  631. data/vendor/Image-ExifTool-9.27/t/Sigma_2.out +91 -0
  632. data/vendor/Image-ExifTool-9.27/t/Sigma_3.out +94 -0
  633. data/vendor/Image-ExifTool-9.27/t/Sigma_4.out +63 -0
  634. data/vendor/Image-ExifTool-9.27/t/Sigma_5.out +192 -0
  635. data/vendor/Image-ExifTool-9.27/t/Sony.t +62 -0
  636. data/vendor/Image-ExifTool-9.27/t/Sony_2.out +84 -0
  637. data/vendor/Image-ExifTool-9.27/t/Sony_3.out +85 -0
  638. data/vendor/Image-ExifTool-9.27/t/Sony_5.out +32 -0
  639. data/vendor/Image-ExifTool-9.27/t/TestLib.pm +417 -0
  640. data/vendor/Image-ExifTool-9.27/t/Unknown.t +36 -0
  641. data/vendor/Image-ExifTool-9.27/t/Unknown_2.out +90 -0
  642. data/vendor/Image-ExifTool-9.27/t/Unknown_3.out +90 -0
  643. data/vendor/Image-ExifTool-9.27/t/Vorbis.t +28 -0
  644. data/vendor/Image-ExifTool-9.27/t/Vorbis_2.out +28 -0
  645. data/vendor/Image-ExifTool-9.27/t/Writer.t +896 -0
  646. data/vendor/Image-ExifTool-9.27/t/Writer_10.out +239 -0
  647. data/vendor/Image-ExifTool-9.27/t/Writer_11.out +37 -0
  648. data/vendor/Image-ExifTool-9.27/t/Writer_13.out +160 -0
  649. data/vendor/Image-ExifTool-9.27/t/Writer_14.out +67 -0
  650. data/vendor/Image-ExifTool-9.27/t/Writer_15.out +171 -0
  651. data/vendor/Image-ExifTool-9.27/t/Writer_16.out +1 -0
  652. data/vendor/Image-ExifTool-9.27/t/Writer_17.out +1 -0
  653. data/vendor/Image-ExifTool-9.27/t/Writer_18.out +3 -0
  654. data/vendor/Image-ExifTool-9.27/t/Writer_19.out +34 -0
  655. data/vendor/Image-ExifTool-9.27/t/Writer_2.out +168 -0
  656. data/vendor/Image-ExifTool-9.27/t/Writer_22.out +4 -0
  657. data/vendor/Image-ExifTool-9.27/t/Writer_24.out +1 -0
  658. data/vendor/Image-ExifTool-9.27/t/Writer_25.out +38 -0
  659. data/vendor/Image-ExifTool-9.27/t/Writer_26.out +32 -0
  660. data/vendor/Image-ExifTool-9.27/t/Writer_27.out +14 -0
  661. data/vendor/Image-ExifTool-9.27/t/Writer_28.out +1 -0
  662. data/vendor/Image-ExifTool-9.27/t/Writer_29.out +2 -0
  663. data/vendor/Image-ExifTool-9.27/t/Writer_30.out +2 -0
  664. data/vendor/Image-ExifTool-9.27/t/Writer_31.out +97 -0
  665. data/vendor/Image-ExifTool-9.27/t/Writer_32.out +3 -0
  666. data/vendor/Image-ExifTool-9.27/t/Writer_33.out +3 -0
  667. data/vendor/Image-ExifTool-9.27/t/Writer_34.out +3 -0
  668. data/vendor/Image-ExifTool-9.27/t/Writer_35.out +187 -0
  669. data/vendor/Image-ExifTool-9.27/t/Writer_36.out +2 -0
  670. data/vendor/Image-ExifTool-9.27/t/Writer_37.out +2 -0
  671. data/vendor/Image-ExifTool-9.27/t/Writer_38.out +62 -0
  672. data/vendor/Image-ExifTool-9.27/t/Writer_39.out +4 -0
  673. data/vendor/Image-ExifTool-9.27/t/Writer_4.out +85 -0
  674. data/vendor/Image-ExifTool-9.27/t/Writer_40.out +4 -0
  675. data/vendor/Image-ExifTool-9.27/t/Writer_41.out +3 -0
  676. data/vendor/Image-ExifTool-9.27/t/Writer_42.out +5 -0
  677. data/vendor/Image-ExifTool-9.27/t/Writer_43.out +5 -0
  678. data/vendor/Image-ExifTool-9.27/t/Writer_44.out +2 -0
  679. data/vendor/Image-ExifTool-9.27/t/Writer_45.out +1 -0
  680. data/vendor/Image-ExifTool-9.27/t/Writer_46.out +77 -0
  681. data/vendor/Image-ExifTool-9.27/t/Writer_47.out +56 -0
  682. data/vendor/Image-ExifTool-9.27/t/Writer_48.out +29 -0
  683. data/vendor/Image-ExifTool-9.27/t/Writer_50.out +3 -0
  684. data/vendor/Image-ExifTool-9.27/t/Writer_6.out +182 -0
  685. data/vendor/Image-ExifTool-9.27/t/Writer_7.out +149 -0
  686. data/vendor/Image-ExifTool-9.27/t/Writer_9.out +236 -0
  687. data/vendor/Image-ExifTool-9.27/t/XMP.t +521 -0
  688. data/vendor/Image-ExifTool-9.27/t/XMP_10.out +33 -0
  689. data/vendor/Image-ExifTool-9.27/t/XMP_11.out +59 -0
  690. data/vendor/Image-ExifTool-9.27/t/XMP_12.out +4 -0
  691. data/vendor/Image-ExifTool-9.27/t/XMP_13.out +5 -0
  692. data/vendor/Image-ExifTool-9.27/t/XMP_14.out +3 -0
  693. data/vendor/Image-ExifTool-9.27/t/XMP_15.out +3 -0
  694. data/vendor/Image-ExifTool-9.27/t/XMP_16.out +5 -0
  695. data/vendor/Image-ExifTool-9.27/t/XMP_17.out +6 -0
  696. data/vendor/Image-ExifTool-9.27/t/XMP_18.out +10 -0
  697. data/vendor/Image-ExifTool-9.27/t/XMP_19.out +35 -0
  698. data/vendor/Image-ExifTool-9.27/t/XMP_2.out +138 -0
  699. data/vendor/Image-ExifTool-9.27/t/XMP_20.out +35 -0
  700. data/vendor/Image-ExifTool-9.27/t/XMP_21.out +37 -0
  701. data/vendor/Image-ExifTool-9.27/t/XMP_22.out +37 -0
  702. data/vendor/Image-ExifTool-9.27/t/XMP_23.out +9 -0
  703. data/vendor/Image-ExifTool-9.27/t/XMP_24.out +31 -0
  704. data/vendor/Image-ExifTool-9.27/t/XMP_25.out +28 -0
  705. data/vendor/Image-ExifTool-9.27/t/XMP_26.out +52 -0
  706. data/vendor/Image-ExifTool-9.27/t/XMP_27.out +93 -0
  707. data/vendor/Image-ExifTool-9.27/t/XMP_28.out +44 -0
  708. data/vendor/Image-ExifTool-9.27/t/XMP_29.out +24 -0
  709. data/vendor/Image-ExifTool-9.27/t/XMP_3.out +136 -0
  710. data/vendor/Image-ExifTool-9.27/t/XMP_30.out +90 -0
  711. data/vendor/Image-ExifTool-9.27/t/XMP_31.out +19 -0
  712. data/vendor/Image-ExifTool-9.27/t/XMP_32.out +2 -0
  713. data/vendor/Image-ExifTool-9.27/t/XMP_34.out +2 -0
  714. data/vendor/Image-ExifTool-9.27/t/XMP_36.out +18 -0
  715. data/vendor/Image-ExifTool-9.27/t/XMP_37.out +35 -0
  716. data/vendor/Image-ExifTool-9.27/t/XMP_39.out +44 -0
  717. data/vendor/Image-ExifTool-9.27/t/XMP_40.out +3 -0
  718. data/vendor/Image-ExifTool-9.27/t/XMP_41.out +175 -0
  719. data/vendor/Image-ExifTool-9.27/t/XMP_5.out +29 -0
  720. data/vendor/Image-ExifTool-9.27/t/XMP_6.out +87 -0
  721. data/vendor/Image-ExifTool-9.27/t/XMP_7.out +118 -0
  722. data/vendor/Image-ExifTool-9.27/t/XMP_8.out +17 -0
  723. data/vendor/Image-ExifTool-9.27/t/XMP_9.out +36 -0
  724. data/vendor/Image-ExifTool-9.27/t/ZIP.t +69 -0
  725. data/vendor/Image-ExifTool-9.27/t/ZIP_2.out +18 -0
  726. data/vendor/Image-ExifTool-9.27/t/ZIP_3.out +17 -0
  727. data/vendor/Image-ExifTool-9.27/t/ZIP_4.out +213 -0
  728. data/vendor/Image-ExifTool-9.27/t/ZIP_5.out +134 -0
  729. data/vendor/Image-ExifTool-9.27/t/ZIP_6.out +49 -0
  730. data/vendor/Image-ExifTool-9.27/t/ZIP_7.out +28 -0
  731. data/vendor/Image-ExifTool-9.27/t/images/AFCP.jpg +0 -0
  732. data/vendor/Image-ExifTool-9.27/t/images/AIFF.aif +0 -0
  733. data/vendor/Image-ExifTool-9.27/t/images/APE.ape +0 -0
  734. data/vendor/Image-ExifTool-9.27/t/images/APE.mpc +0 -0
  735. data/vendor/Image-ExifTool-9.27/t/images/ASF.wmv +0 -0
  736. data/vendor/Image-ExifTool-9.27/t/images/BMP.bmp +0 -0
  737. data/vendor/Image-ExifTool-9.27/t/images/BigTIFF.btf +0 -0
  738. data/vendor/Image-ExifTool-9.27/t/images/Canon.jpg +0 -0
  739. data/vendor/Image-ExifTool-9.27/t/images/Canon1DmkIII.jpg +0 -0
  740. data/vendor/Image-ExifTool-9.27/t/images/CanonRaw.cr2 +0 -0
  741. data/vendor/Image-ExifTool-9.27/t/images/CanonRaw.crw +0 -0
  742. data/vendor/Image-ExifTool-9.27/t/images/CanonVRD.vrd +0 -0
  743. data/vendor/Image-ExifTool-9.27/t/images/CaptureOne.eip +0 -0
  744. data/vendor/Image-ExifTool-9.27/t/images/Casio.jpg +0 -0
  745. data/vendor/Image-ExifTool-9.27/t/images/Casio2.jpg +0 -0
  746. data/vendor/Image-ExifTool-9.27/t/images/CasioQVCI.jpg +0 -0
  747. data/vendor/Image-ExifTool-9.27/t/images/DICOM.dcm +0 -0
  748. data/vendor/Image-ExifTool-9.27/t/images/DNG.dng +0 -0
  749. data/vendor/Image-ExifTool-9.27/t/images/DV.dv +0 -0
  750. data/vendor/Image-ExifTool-9.27/t/images/DjVu.djvu +0 -0
  751. data/vendor/Image-ExifTool-9.27/t/images/EXE.elf +0 -0
  752. data/vendor/Image-ExifTool-9.27/t/images/EXE.exe +0 -0
  753. data/vendor/Image-ExifTool-9.27/t/images/EXE.macho +0 -0
  754. data/vendor/Image-ExifTool-9.27/t/images/ExifTool.jpg +0 -0
  755. data/vendor/Image-ExifTool-9.27/t/images/ExifTool.tif +0 -0
  756. data/vendor/Image-ExifTool-9.27/t/images/ExtendedXMP.jpg +0 -0
  757. data/vendor/Image-ExifTool-9.27/t/images/FLAC.flac +0 -0
  758. data/vendor/Image-ExifTool-9.27/t/images/FLAC.ogg +0 -0
  759. data/vendor/Image-ExifTool-9.27/t/images/FLIR.fpf +0 -0
  760. data/vendor/Image-ExifTool-9.27/t/images/FLIR.jpg +0 -0
  761. data/vendor/Image-ExifTool-9.27/t/images/Flash.flv +0 -0
  762. data/vendor/Image-ExifTool-9.27/t/images/Flash.swf +0 -0
  763. data/vendor/Image-ExifTool-9.27/t/images/FlashPix.ppt +0 -0
  764. data/vendor/Image-ExifTool-9.27/t/images/Font.afm +28 -0
  765. data/vendor/Image-ExifTool-9.27/t/images/Font.dfont +0 -0
  766. data/vendor/Image-ExifTool-9.27/t/images/Font.pfa +38 -0
  767. data/vendor/Image-ExifTool-9.27/t/images/Font.pfb +0 -0
  768. data/vendor/Image-ExifTool-9.27/t/images/Font.pfm +0 -0
  769. data/vendor/Image-ExifTool-9.27/t/images/Font.ttf +0 -0
  770. data/vendor/Image-ExifTool-9.27/t/images/FotoStation.jpg +0 -0
  771. data/vendor/Image-ExifTool-9.27/t/images/FujiFilm.jpg +0 -0
  772. data/vendor/Image-ExifTool-9.27/t/images/FujiFilm.raf +0 -0
  773. data/vendor/Image-ExifTool-9.27/t/images/GE.jpg +0 -0
  774. data/vendor/Image-ExifTool-9.27/t/images/GIF.gif +0 -0
  775. data/vendor/Image-ExifTool-9.27/t/images/GIMP.xcf +0 -0
  776. data/vendor/Image-ExifTool-9.27/t/images/GPS.jpg +0 -0
  777. data/vendor/Image-ExifTool-9.27/t/images/GeoTiff.tif +0 -0
  778. data/vendor/Image-ExifTool-9.27/t/images/Geotag.gpx +23 -0
  779. data/vendor/Image-ExifTool-9.27/t/images/Geotag.igc +24 -0
  780. data/vendor/Image-ExifTool-9.27/t/images/Geotag.log +13 -0
  781. data/vendor/Image-ExifTool-9.27/t/images/Geotag.xml +23 -0
  782. data/vendor/Image-ExifTool-9.27/t/images/Geotag2.log +7 -0
  783. data/vendor/Image-ExifTool-9.27/t/images/HTML.html +77 -0
  784. data/vendor/Image-ExifTool-9.27/t/images/IPTC.jpg +0 -0
  785. data/vendor/Image-ExifTool-9.27/t/images/ITC.itc +0 -0
  786. data/vendor/Image-ExifTool-9.27/t/images/InDesign.indd +0 -0
  787. data/vendor/Image-ExifTool-9.27/t/images/JVC.jpg +0 -0
  788. data/vendor/Image-ExifTool-9.27/t/images/JVC2.jpg +0 -0
  789. data/vendor/Image-ExifTool-9.27/t/images/Jpeg2000.j2c +0 -0
  790. data/vendor/Image-ExifTool-9.27/t/images/Jpeg2000.jp2 +0 -0
  791. data/vendor/Image-ExifTool-9.27/t/images/Kodak.jpg +0 -0
  792. data/vendor/Image-ExifTool-9.27/t/images/KyoceraRaw.raw +0 -0
  793. data/vendor/Image-ExifTool-9.27/t/images/LNK.lnk +0 -0
  794. data/vendor/Image-ExifTool-9.27/t/images/M2TS.mts +0 -0
  795. data/vendor/Image-ExifTool-9.27/t/images/MIE.mie +0 -0
  796. data/vendor/Image-ExifTool-9.27/t/images/MIFF.miff +0 -0
  797. data/vendor/Image-ExifTool-9.27/t/images/MP3.mp3 +0 -0
  798. data/vendor/Image-ExifTool-9.27/t/images/MWG.jpg +0 -0
  799. data/vendor/Image-ExifTool-9.27/t/images/MXF.mxf +0 -0
  800. data/vendor/Image-ExifTool-9.27/t/images/Matroska.mkv +0 -0
  801. data/vendor/Image-ExifTool-9.27/t/images/Minolta.jpg +0 -0
  802. data/vendor/Image-ExifTool-9.27/t/images/Minolta.mrw +0 -0
  803. data/vendor/Image-ExifTool-9.27/t/images/Nikon.jpg +0 -0
  804. data/vendor/Image-ExifTool-9.27/t/images/Nikon.nef +0 -0
  805. data/vendor/Image-ExifTool-9.27/t/images/NikonD2Hs.jpg +0 -0
  806. data/vendor/Image-ExifTool-9.27/t/images/NikonD70.jpg +0 -0
  807. data/vendor/Image-ExifTool-9.27/t/images/OOXML.docx +0 -0
  808. data/vendor/Image-ExifTool-9.27/t/images/Olympus.jpg +0 -0
  809. data/vendor/Image-ExifTool-9.27/t/images/Olympus2.jpg +0 -0
  810. data/vendor/Image-ExifTool-9.27/t/images/OlympusE1.jpg +0 -0
  811. data/vendor/Image-ExifTool-9.27/t/images/OpenDoc.ods +0 -0
  812. data/vendor/Image-ExifTool-9.27/t/images/OpenEXR.exr +0 -0
  813. data/vendor/Image-ExifTool-9.27/t/images/PDF.pdf +0 -0
  814. data/vendor/Image-ExifTool-9.27/t/images/PDF2.pdf +0 -0
  815. data/vendor/Image-ExifTool-9.27/t/images/PGF.pgf +0 -0
  816. data/vendor/Image-ExifTool-9.27/t/images/PICT.pict +0 -0
  817. data/vendor/Image-ExifTool-9.27/t/images/PLIST-bin.plist +0 -0
  818. data/vendor/Image-ExifTool-9.27/t/images/PLIST-xml.plist +35 -0
  819. data/vendor/Image-ExifTool-9.27/t/images/PNG.png +0 -0
  820. data/vendor/Image-ExifTool-9.27/t/images/PPM.ppm +5 -0
  821. data/vendor/Image-ExifTool-9.27/t/images/PSP.psp +0 -0
  822. data/vendor/Image-ExifTool-9.27/t/images/Panasonic.jpg +0 -0
  823. data/vendor/Image-ExifTool-9.27/t/images/Panasonic.rw2 +0 -0
  824. data/vendor/Image-ExifTool-9.27/t/images/Pentax.avi +0 -0
  825. data/vendor/Image-ExifTool-9.27/t/images/Pentax.jpg +0 -0
  826. data/vendor/Image-ExifTool-9.27/t/images/PhotoCD.pcd +0 -0
  827. data/vendor/Image-ExifTool-9.27/t/images/PhotoMechanic.jpg +0 -0
  828. data/vendor/Image-ExifTool-9.27/t/images/Photoshop.psd +0 -0
  829. data/vendor/Image-ExifTool-9.27/t/images/PostScript.eps +108 -0
  830. data/vendor/Image-ExifTool-9.27/t/images/QuickTime.m4a +0 -0
  831. data/vendor/Image-ExifTool-9.27/t/images/QuickTime.mov +0 -0
  832. data/vendor/Image-ExifTool-9.27/t/images/RIFF.avi +0 -0
  833. data/vendor/Image-ExifTool-9.27/t/images/RIFF.wav +0 -0
  834. data/vendor/Image-ExifTool-9.27/t/images/RIFF.webp +0 -0
  835. data/vendor/Image-ExifTool-9.27/t/images/RTF.rtf +25 -0
  836. data/vendor/Image-ExifTool-9.27/t/images/Radiance.hdr +0 -0
  837. data/vendor/Image-ExifTool-9.27/t/images/Real.ra +0 -0
  838. data/vendor/Image-ExifTool-9.27/t/images/Real.ram +1 -0
  839. data/vendor/Image-ExifTool-9.27/t/images/Real.rm +0 -0
  840. data/vendor/Image-ExifTool-9.27/t/images/Ricoh.jpg +0 -0
  841. data/vendor/Image-ExifTool-9.27/t/images/Ricoh2.jpg +0 -0
  842. data/vendor/Image-ExifTool-9.27/t/images/Sanyo.jpg +0 -0
  843. data/vendor/Image-ExifTool-9.27/t/images/Sigma.jpg +0 -0
  844. data/vendor/Image-ExifTool-9.27/t/images/Sigma.x3f +0 -0
  845. data/vendor/Image-ExifTool-9.27/t/images/SigmaDP2.x3f +0 -0
  846. data/vendor/Image-ExifTool-9.27/t/images/Sony.jpg +0 -0
  847. data/vendor/Image-ExifTool-9.27/t/images/Sony.pmp +0 -0
  848. data/vendor/Image-ExifTool-9.27/t/images/Unknown.jpg +0 -0
  849. data/vendor/Image-ExifTool-9.27/t/images/Vorbis.ogg +0 -0
  850. data/vendor/Image-ExifTool-9.27/t/images/Writer.jpg +0 -0
  851. data/vendor/Image-ExifTool-9.27/t/images/XMP.inx +108 -0
  852. data/vendor/Image-ExifTool-9.27/t/images/XMP.jpg +0 -0
  853. data/vendor/Image-ExifTool-9.27/t/images/XMP.svg +33 -0
  854. data/vendor/Image-ExifTool-9.27/t/images/XMP.xml +98 -0
  855. data/vendor/Image-ExifTool-9.27/t/images/XMP.xmp +99 -0
  856. data/vendor/Image-ExifTool-9.27/t/images/XMP2.xmp +25 -0
  857. data/vendor/Image-ExifTool-9.27/t/images/XMP3.xmp +43 -0
  858. data/vendor/Image-ExifTool-9.27/t/images/XMP4.xmp +93 -0
  859. data/vendor/Image-ExifTool-9.27/t/images/XMP5.xmp +158 -0
  860. data/vendor/Image-ExifTool-9.27/t/images/ZIP.gz +0 -0
  861. data/vendor/Image-ExifTool-9.27/t/images/ZIP.zip +0 -0
  862. data/vendor/Image-ExifTool-9.27/t/images/iWork.numbers +0 -0
  863. metadata +868 -218
  864. data/vendor/Image-ExifTool-8.97/.DS_Store +0 -0
  865. data/vendor/Image-ExifTool-8.97/Changes +0 -5753
  866. data/vendor/Image-ExifTool-8.97/ExifTool_config +0 -299
  867. data/vendor/Image-ExifTool-8.97/MANIFEST +0 -831
  868. data/vendor/Image-ExifTool-8.97/META.yml +0 -26
  869. data/vendor/Image-ExifTool-8.97/README +0 -221
  870. data/vendor/Image-ExifTool-8.97/exiftool +0 -5207
  871. data/vendor/Image-ExifTool-8.97/kml.fmt +0 -63
  872. data/vendor/Image-ExifTool-8.97/lib/File/RandomAccess.pm +0 -378
  873. data/vendor/Image-ExifTool-8.97/lib/File/RandomAccess.pod +0 -231
  874. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool.pm +0 -6623
  875. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool.pod +0 -2276
  876. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/AES.pm +0 -501
  877. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/AFCP.pm +0 -280
  878. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/AIFF.pm +0 -271
  879. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/APE.pm +0 -254
  880. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/APP12.pm +0 -322
  881. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/ASF.pm +0 -871
  882. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/BMP.pm +0 -179
  883. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/BZZ.pm +0 -472
  884. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/BigTIFF.pm +0 -286
  885. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/BuildTagLookup.pm +0 -2311
  886. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Canon.pm +0 -7435
  887. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/CanonCustom.pm +0 -2484
  888. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/CanonRaw.pm +0 -927
  889. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/CanonVRD.pm +0 -1481
  890. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/CaptureOne.pm +0 -235
  891. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Casio.pm +0 -2013
  892. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Charset.pm +0 -396
  893. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/DICOM.pm +0 -3832
  894. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/DNG.pm +0 -835
  895. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/DV.pm +0 -319
  896. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/DjVu.pm +0 -373
  897. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/EXE.pm +0 -1228
  898. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Exif.pm +0 -4344
  899. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/FLAC.pm +0 -296
  900. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Fixup.pm +0 -333
  901. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Flash.pm +0 -755
  902. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/FlashPix.pm +0 -1882
  903. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Font.pm +0 -643
  904. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/FotoStation.pm +0 -258
  905. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/FujiFilm.pm +0 -968
  906. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/GE.pm +0 -80
  907. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/GIF.pm +0 -525
  908. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/GIMP.pm +0 -258
  909. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/GPS.pm +0 -511
  910. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/GeoTiff.pm +0 -2187
  911. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Geotag.pm +0 -1171
  912. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/H264.pm +0 -1093
  913. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/HP.pm +0 -262
  914. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/HTML.pm +0 -576
  915. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/HtmlDump.pm +0 -886
  916. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/ICC_Profile.pm +0 -997
  917. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/ID3.pm +0 -1276
  918. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/IPTC.pm +0 -1233
  919. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/ITC.pm +0 -215
  920. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Import.pm +0 -307
  921. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/InDesign.pm +0 -277
  922. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/JPEG.pm +0 -584
  923. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/JPEGDigest.pm +0 -2511
  924. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/JVC.pm +0 -130
  925. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Jpeg2000.pm +0 -823
  926. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Kodak.pm +0 -2012
  927. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/KyoceraRaw.pm +0 -173
  928. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/LNK.pm +0 -723
  929. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/cs.pm +0 -1581
  930. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/de.pm +0 -5503
  931. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/en_ca.pm +0 -557
  932. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/en_gb.pm +0 -572
  933. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/es.pm +0 -1718
  934. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/fi.pm +0 -2831
  935. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/fr.pm +0 -4716
  936. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/it.pm +0 -2201
  937. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/ja.pm +0 -5793
  938. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/ko.pm +0 -2324
  939. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/nl.pm +0 -3212
  940. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/pl.pm +0 -1134
  941. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/ru.pm +0 -761
  942. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/sv.pm +0 -632
  943. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/tr.pm +0 -539
  944. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/zh_cn.pm +0 -1320
  945. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Lang/zh_tw.pm +0 -794
  946. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Leaf.pm +0 -515
  947. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/M2TS.pm +0 -729
  948. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MIE.pm +0 -2552
  949. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MIEUnits.pod +0 -377
  950. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MIFF.pm +0 -279
  951. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MNG.pm +0 -684
  952. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MPC.pm +0 -156
  953. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MPEG.pm +0 -736
  954. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MPF.pm +0 -286
  955. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MWG.pm +0 -586
  956. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MXF.pm +0 -3032
  957. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MakerNotes.pm +0 -1551
  958. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Matroska.pm +0 -891
  959. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Microsoft.pm +0 -861
  960. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Minolta.pm +0 -2786
  961. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/MinoltaRaw.pm +0 -534
  962. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Nikon.pm +0 -5568
  963. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/NikonCapture.pm +0 -911
  964. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/NikonCustom.pm +0 -3724
  965. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/OOXML.pm +0 -409
  966. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Ogg.pm +0 -237
  967. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Olympus.pm +0 -4027
  968. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/OpenEXR.pm +0 -324
  969. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PDF.pm +0 -1986
  970. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PGF.pm +0 -143
  971. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PICT.pm +0 -1260
  972. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PNG.pm +0 -1100
  973. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PPM.pm +0 -169
  974. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PSP.pm +0 -305
  975. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Panasonic.pm +0 -1852
  976. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PanasonicRaw.pm +0 -383
  977. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Pentax.pm +0 -5044
  978. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PhotoCD.pm +0 -507
  979. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PhotoMechanic.pm +0 -250
  980. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Photoshop.pm +0 -594
  981. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PostScript.pm +0 -691
  982. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/PrintIM.pm +0 -125
  983. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Qualcomm.pm +0 -1344
  984. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/QuickTime.pm +0 -2920
  985. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/README +0 -922
  986. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/RIFF.pm +0 -1278
  987. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/RSRC.pm +0 -240
  988. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/RTF.pm +0 -383
  989. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Radiance.pm +0 -144
  990. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Rawzor.pm +0 -190
  991. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Real.pm +0 -736
  992. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Reconyx.pm +0 -190
  993. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Ricoh.pm +0 -714
  994. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Samsung.pm +0 -764
  995. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Sanyo.pm +0 -439
  996. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Shift.pl +0 -594
  997. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Shortcuts.pm +0 -289
  998. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Sigma.pm +0 -488
  999. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/SigmaRaw.pm +0 -676
  1000. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Sony.pm +0 -3844
  1001. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/SonyIDC.pm +0 -330
  1002. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Stim.pm +0 -196
  1003. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/TagInfoXML.pm +0 -763
  1004. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/TagLookup.pm +0 -7305
  1005. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/TagNames.pod +0 -24147
  1006. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Theora.pm +0 -145
  1007. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Unknown.pm +0 -66
  1008. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Vorbis.pm +0 -221
  1009. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/WriteCanonRaw.pl +0 -637
  1010. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/WriteExif.pl +0 -3513
  1011. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/WriteIPTC.pl +0 -700
  1012. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/WritePDF.pl +0 -757
  1013. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/WritePNG.pl +0 -329
  1014. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/WritePhotoshop.pl +0 -266
  1015. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/WritePostScript.pl +0 -776
  1016. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/WriteXMP.pl +0 -1296
  1017. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/Writer.pl +0 -5577
  1018. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/XMP.pm +0 -3589
  1019. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/XMP2.pl +0 -1315
  1020. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/XMPStruct.pl +0 -814
  1021. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/ZIP.pm +0 -623
  1022. data/vendor/Image-ExifTool-8.97/lib/Image/ExifTool/iWork.pm +0 -223
  1023. data/vendor/Image-ExifTool-8.97/perl-Image-ExifTool.spec +0 -103
@@ -1,1882 +0,0 @@
1
- #------------------------------------------------------------------------------
2
- # File: FlashPix.pm
3
- #
4
- # Description: Read FlashPix meta information
5
- #
6
- # Revisions: 05/29/2006 - P. Harvey Created
7
- #
8
- # References: 1) http://www.exif.org/Exif2-2.PDF
9
- # 2) http://www.graphcomp.com/info/specs/livepicture/fpx.pdf
10
- # 3) http://search.cpan.org/~jdb/libwin32/
11
- # 4) http://msdn.microsoft.com/en-us/library/aa380374.aspx
12
- #------------------------------------------------------------------------------
13
-
14
- package Image::ExifTool::FlashPix;
15
-
16
- use strict;
17
- use vars qw($VERSION);
18
- use Image::ExifTool qw(:DataAccess :Utils);
19
- use Image::ExifTool::Exif;
20
- use Image::ExifTool::ASF; # for GetGUID()
21
-
22
- $VERSION = '1.20';
23
-
24
- sub ProcessFPX($$);
25
- sub ProcessFPXR($$$);
26
- sub ProcessProperties($$$);
27
- sub ReadFPXValue($$$$$;$$);
28
- sub ProcessHyperlinks($$);
29
- sub ProcessContents($$$);
30
- sub SetDocNum($$;$$$);
31
-
32
- # sector type constants
33
- sub HDR_SIZE () { 512; }
34
- sub DIF_SECT () { 0xfffffffc; }
35
- sub FAT_SECT () { 0xfffffffd; }
36
- sub END_OF_CHAIN () { 0xfffffffe; }
37
- sub FREE_SECT () { 0xffffffff; }
38
-
39
- # format flags
40
- sub VT_VECTOR () { 0x1000; }
41
- sub VT_ARRAY () { 0x2000; }
42
- sub VT_BYREF () { 0x4000; }
43
- sub VT_RESERVED () { 0x8000; }
44
-
45
- # other constants
46
- sub VT_VARIANT () { 12; }
47
- sub VT_LPSTR () { 30; }
48
-
49
- # list of OLE format codes (unsupported codes commented out)
50
- my %oleFormat = (
51
- 0 => undef, # VT_EMPTY
52
- 1 => undef, # VT_NULL
53
- 2 => 'int16s', # VT_I2
54
- 3 => 'int32s', # VT_I4
55
- 4 => 'float', # VT_R4
56
- 5 => 'double', # VT_R8
57
- 6 => undef, # VT_CY
58
- 7 => 'VT_DATE', # VT_DATE (double, number of days since Dec 30, 1899)
59
- 8 => 'VT_BSTR', # VT_BSTR (int32u count, followed by binary string)
60
- # 9 => 'VT_DISPATCH',
61
- 10 => 'int32s', # VT_ERROR
62
- 11 => 'int16s', # VT_BOOL
63
- 12 => 'VT_VARIANT', # VT_VARIANT
64
- # 13 => 'VT_UNKNOWN',
65
- # 14 => 'VT_DECIMAL',
66
- 16 => 'int8s', # VT_I1
67
- 17 => 'int8u', # VT_UI1
68
- 18 => 'int16u', # VT_UI2
69
- 19 => 'int32u', # VT_UI4
70
- 20 => 'int64s', # VT_I8
71
- 21 => 'int64u', # VT_UI8
72
- # 22 => 'VT_INT',
73
- # 23 => 'VT_UINT',
74
- # 24 => 'VT_VOID',
75
- # 25 => 'VT_HRESULT',
76
- # 26 => 'VT_PTR',
77
- # 27 => 'VT_SAFEARRAY',
78
- # 28 => 'VT_CARRAY',
79
- # 29 => 'VT_USERDEFINED',
80
- 30 => 'VT_LPSTR', # VT_LPSTR (int32u count, followed by string)
81
- 31 => 'VT_LPWSTR', # VT_LPWSTR (int32u word count, followed by Unicode string)
82
- 64 => 'VT_FILETIME',# VT_FILETIME (int64u, number of nanoseconds since Jan 1, 1601)
83
- 65 => 'VT_BLOB', # VT_BLOB
84
- # 66 => 'VT_STREAM',
85
- # 67 => 'VT_STORAGE',
86
- # 68 => 'VT_STREAMED_OBJECT',
87
- # 69 => 'VT_STORED_OBJECT',
88
- # 70 => 'VT_BLOB_OBJECT',
89
- 71 => 'VT_CF', # VT_CF
90
- 72 => 'VT_CLSID', # VT_CLSID
91
- );
92
-
93
- # OLE flag codes (high nibble of property type)
94
- my %oleFlags = (
95
- 0x1000 => 'VT_VECTOR',
96
- 0x2000 => 'VT_ARRAY', # not yet supported
97
- 0x4000 => 'VT_BYREF', # ditto
98
- 0x8000 => 'VT_RESERVED',
99
- );
100
-
101
- # byte sizes for supported VT_* format and flag types
102
- my %oleFormatSize = (
103
- VT_DATE => 8,
104
- VT_BSTR => 4, # (+ string length)
105
- VT_VARIANT => 4, # (+ data length)
106
- VT_LPSTR => 4, # (+ string length)
107
- VT_LPWSTR => 4, # (+ string character length)
108
- VT_FILETIME => 8,
109
- VT_BLOB => 4, # (+ data length)
110
- VT_CF => 4, # (+ data length)
111
- VT_CLSID => 16,
112
- VT_VECTOR => 4, # (+ vector elements)
113
- );
114
-
115
- # names for each type of directory entry
116
- my @dirEntryType = qw(INVALID STORAGE STREAM LOCKBYTES PROPERTY ROOT);
117
-
118
- # list of code pages used by Microsoft
119
- # (ref http://msdn.microsoft.com/en-us/library/dd317756(VS.85).aspx)
120
- my %codePage = (
121
- 037 => 'IBM EBCDIC US-Canada',
122
- 437 => 'DOS United States',
123
- 500 => 'IBM EBCDIC International',
124
- 708 => 'Arabic (ASMO 708)',
125
- 709 => 'Arabic (ASMO-449+, BCON V4)',
126
- 710 => 'Arabic - Transparent Arabic',
127
- 720 => 'DOS Arabic (Transparent ASMO)',
128
- 737 => 'DOS Greek (formerly 437G)',
129
- 775 => 'DOS Baltic',
130
- 850 => 'DOS Latin 1 (Western European)',
131
- 852 => 'DOS Latin 2 (Central European)',
132
- 855 => 'DOS Cyrillic (primarily Russian)',
133
- 857 => 'DOS Turkish',
134
- 858 => 'DOS Multilingual Latin 1 with Euro',
135
- 860 => 'DOS Portuguese',
136
- 861 => 'DOS Icelandic',
137
- 862 => 'DOS Hebrew',
138
- 863 => 'DOS French Canadian',
139
- 864 => 'DOS Arabic',
140
- 865 => 'DOS Nordic',
141
- 866 => 'DOS Russian (Cyrillic)',
142
- 869 => 'DOS Modern Greek',
143
- 870 => 'IBM EBCDIC Multilingual/ROECE (Latin 2)',
144
- 874 => 'Windows Thai (same as 28605, ISO 8859-15)',
145
- 875 => 'IBM EBCDIC Greek Modern',
146
- 932 => 'Windows Japanese (Shift-JIS)',
147
- 936 => 'Windows Simplified Chinese (PRC, Singapore)',
148
- 949 => 'Windows Korean (Unified Hangul Code)',
149
- 950 => 'Windows Traditional Chinese (Taiwan)',
150
- 1026 => 'IBM EBCDIC Turkish (Latin 5)',
151
- 1047 => 'IBM EBCDIC Latin 1/Open System',
152
- 1140 => 'IBM EBCDIC US-Canada with Euro',
153
- 1141 => 'IBM EBCDIC Germany with Euro',
154
- 1142 => 'IBM EBCDIC Denmark-Norway with Euro',
155
- 1143 => 'IBM EBCDIC Finland-Sweden with Euro',
156
- 1144 => 'IBM EBCDIC Italy with Euro',
157
- 1145 => 'IBM EBCDIC Latin America-Spain with Euro',
158
- 1146 => 'IBM EBCDIC United Kingdom with Euro',
159
- 1147 => 'IBM EBCDIC France with Euro',
160
- 1148 => 'IBM EBCDIC International with Euro',
161
- 1149 => 'IBM EBCDIC Icelandic with Euro',
162
- 1200 => 'Unicode UTF-16, little endian',
163
- 1201 => 'Unicode UTF-16, big endian',
164
- 1250 => 'Windows Latin 2 (Central European)',
165
- 1251 => 'Windows Cyrillic',
166
- 1252 => 'Windows Latin 1 (Western European)',
167
- 1253 => 'Windows Greek',
168
- 1254 => 'Windows Turkish',
169
- 1255 => 'Windows Hebrew',
170
- 1256 => 'Windows Arabic',
171
- 1257 => 'Windows Baltic',
172
- 1258 => 'Windows Vietnamese',
173
- 1361 => 'Korean (Johab)',
174
- 10000 => 'Mac Roman (Western European)',
175
- 10001 => 'Mac Japanese',
176
- 10002 => 'Mac Traditional Chinese',
177
- 10003 => 'Mac Korean',
178
- 10004 => 'Mac Arabic',
179
- 10005 => 'Mac Hebrew',
180
- 10006 => 'Mac Greek',
181
- 10007 => 'Mac Cyrillic',
182
- 10008 => 'Mac Simplified Chinese',
183
- 10010 => 'Mac Romanian',
184
- 10017 => 'Mac Ukrainian',
185
- 10021 => 'Mac Thai',
186
- 10029 => 'Mac Latin 2 (Central European)',
187
- 10079 => 'Mac Icelandic',
188
- 10081 => 'Mac Turkish',
189
- 10082 => 'Mac Croatian',
190
- 12000 => 'Unicode UTF-32, little endian',
191
- 12001 => 'Unicode UTF-32, big endian',
192
- 20000 => 'CNS Taiwan',
193
- 20001 => 'TCA Taiwan',
194
- 20002 => 'Eten Taiwan',
195
- 20003 => 'IBM5550 Taiwan',
196
- 20004 => 'TeleText Taiwan',
197
- 20005 => 'Wang Taiwan',
198
- 20105 => 'IA5 (IRV International Alphabet No. 5, 7-bit)',
199
- 20106 => 'IA5 German (7-bit)',
200
- 20107 => 'IA5 Swedish (7-bit)',
201
- 20108 => 'IA5 Norwegian (7-bit)',
202
- 20127 => 'US-ASCII (7-bit)',
203
- 20261 => 'T.61',
204
- 20269 => 'ISO 6937 Non-Spacing Accent',
205
- 20273 => 'IBM EBCDIC Germany',
206
- 20277 => 'IBM EBCDIC Denmark-Norway',
207
- 20278 => 'IBM EBCDIC Finland-Sweden',
208
- 20280 => 'IBM EBCDIC Italy',
209
- 20284 => 'IBM EBCDIC Latin America-Spain',
210
- 20285 => 'IBM EBCDIC United Kingdom',
211
- 20290 => 'IBM EBCDIC Japanese Katakana Extended',
212
- 20297 => 'IBM EBCDIC France',
213
- 20420 => 'IBM EBCDIC Arabic',
214
- 20423 => 'IBM EBCDIC Greek',
215
- 20424 => 'IBM EBCDIC Hebrew',
216
- 20833 => 'IBM EBCDIC Korean Extended',
217
- 20838 => 'IBM EBCDIC Thai',
218
- 20866 => 'Russian/Cyrillic (KOI8-R)',
219
- 20871 => 'IBM EBCDIC Icelandic',
220
- 20880 => 'IBM EBCDIC Cyrillic Russian',
221
- 20905 => 'IBM EBCDIC Turkish',
222
- 20924 => 'IBM EBCDIC Latin 1/Open System with Euro',
223
- 20932 => 'Japanese (JIS 0208-1990 and 0121-1990)',
224
- 20936 => 'Simplified Chinese (GB2312)',
225
- 20949 => 'Korean Wansung',
226
- 21025 => 'IBM EBCDIC Cyrillic Serbian-Bulgarian',
227
- 21027 => 'Extended Alpha Lowercase (deprecated)',
228
- 21866 => 'Ukrainian/Cyrillic (KOI8-U)',
229
- 28591 => 'ISO 8859-1 Latin 1 (Western European)',
230
- 28592 => 'ISO 8859-2 (Central European)',
231
- 28593 => 'ISO 8859-3 Latin 3',
232
- 28594 => 'ISO 8859-4 Baltic',
233
- 28595 => 'ISO 8859-5 Cyrillic',
234
- 28596 => 'ISO 8859-6 Arabic',
235
- 28597 => 'ISO 8859-7 Greek',
236
- 28598 => 'ISO 8859-8 Hebrew (Visual)',
237
- 28599 => 'ISO 8859-9 Turkish',
238
- 28603 => 'ISO 8859-13 Estonian',
239
- 28605 => 'ISO 8859-15 Latin 9',
240
- 29001 => 'Europa 3',
241
- 38598 => 'ISO 8859-8 Hebrew (Logical)',
242
- 50220 => 'ISO 2022 Japanese with no halfwidth Katakana (JIS)',
243
- 50221 => 'ISO 2022 Japanese with halfwidth Katakana (JIS-Allow 1 byte Kana)',
244
- 50222 => 'ISO 2022 Japanese JIS X 0201-1989 (JIS-Allow 1 byte Kana - SO/SI)',
245
- 50225 => 'ISO 2022 Korean',
246
- 50227 => 'ISO 2022 Simplified Chinese',
247
- 50229 => 'ISO 2022 Traditional Chinese',
248
- 50930 => 'EBCDIC Japanese (Katakana) Extended',
249
- 50931 => 'EBCDIC US-Canada and Japanese',
250
- 50933 => 'EBCDIC Korean Extended and Korean',
251
- 50935 => 'EBCDIC Simplified Chinese Extended and Simplified Chinese',
252
- 50936 => 'EBCDIC Simplified Chinese',
253
- 50937 => 'EBCDIC US-Canada and Traditional Chinese',
254
- 50939 => 'EBCDIC Japanese (Latin) Extended and Japanese',
255
- 51932 => 'EUC Japanese',
256
- 51936 => 'EUC Simplified Chinese',
257
- 51949 => 'EUC Korean',
258
- 51950 => 'EUC Traditional Chinese',
259
- 52936 => 'HZ-GB2312 Simplified Chinese',
260
- 54936 => 'Windows XP and later: GB18030 Simplified Chinese (4 byte)',
261
- 57002 => 'ISCII Devanagari',
262
- 57003 => 'ISCII Bengali',
263
- 57004 => 'ISCII Tamil',
264
- 57005 => 'ISCII Telugu',
265
- 57006 => 'ISCII Assamese',
266
- 57007 => 'ISCII Oriya',
267
- 57008 => 'ISCII Kannada',
268
- 57009 => 'ISCII Malayalam',
269
- 57010 => 'ISCII Gujarati',
270
- 57011 => 'ISCII Punjabi',
271
- 65000 => 'Unicode (UTF-7)',
272
- 65001 => 'Unicode (UTF-8)',
273
- );
274
-
275
- # test for file extensions which may be variants of the FPX format
276
- # (have seen one password-protected DOCX file that is FPX-like, so assume
277
- # that all the rest could be as well)
278
- my %fpxFileType = (
279
- DOC => 1, DOCX => 1, DOCM => 1,
280
- DOT => 1, DOTX => 1, DOTM => 1,
281
- POT => 1, POTX => 1, POTM => 1,
282
- PPS => 1, PPSX => 1, PPSM => 1,
283
- PPT => 1, PPTX => 1, PPTM => 1, THMX => 1,
284
- XLA => 1, XLAM => 1,
285
- XLS => 1, XLSX => 1, XLSM => 1, XLSB => 1,
286
- XLT => 1, XLTX => 1, XLTM => 1,
287
- # non MSOffice types
288
- FLA => 1, VSD => 1,
289
- );
290
-
291
- %Image::ExifTool::FlashPix::Main = (
292
- PROCESS_PROC => \&ProcessFPXR,
293
- GROUPS => { 2 => 'Image' },
294
- NOTES => q{
295
- The FlashPix file format, introduced in 1996, was developed by Kodak,
296
- Hewlett-Packard and Microsoft. Internally the FPX file structure mimics
297
- that of an old DOS disk with fixed-sized "sectors" (usually 512 bytes) and a
298
- "file allocation table" (FAT). No wonder this image format never became
299
- popular. However, some of the structures used in FlashPix streams are part
300
- of the EXIF specification, and are still being used in the APP2 FPXR segment
301
- of JPEG images by some Kodak and Hewlett-Packard digital cameras.
302
-
303
- ExifTool extracts FlashPix information from both FPX images and the APP2
304
- FPXR segment of JPEG images. As well, FlashPix information is extracted
305
- from DOC, PPT, XLS (Microsoft Word, PowerPoint and Excel) documents, VSD
306
- (Microsoft Visio) drawings, and FLA (Macromedia/Adobe Flash project) files
307
- since these are based on the same file format as FlashPix (the Windows
308
- Compound Binary File format). See
309
- L<http://graphcomp.com/info/specs/livepicture/fpx.pdf> for the FlashPix
310
- specification.
311
- },
312
- "\x05SummaryInformation" => {
313
- Name => 'SummaryInfo',
314
- SubDirectory => {
315
- TagTable => 'Image::ExifTool::FlashPix::SummaryInfo',
316
- },
317
- },
318
- "\x05DocumentSummaryInformation" => {
319
- Name => 'DocumentInfo',
320
- Multi => 1, # flag to process UserDefined information after this
321
- SubDirectory => {
322
- TagTable => 'Image::ExifTool::FlashPix::DocumentInfo',
323
- },
324
- },
325
- "\x01CompObj" => {
326
- Name => 'CompObj',
327
- SubDirectory => {
328
- TagTable => 'Image::ExifTool::FlashPix::CompObj',
329
- DirStart => 0x1c, # skip stream header
330
- },
331
- },
332
- "\x05Image Info" => {
333
- Name => 'ImageInfo',
334
- SubDirectory => {
335
- TagTable => 'Image::ExifTool::FlashPix::ImageInfo',
336
- },
337
- },
338
- "\x05Image Contents" => {
339
- Name => 'Image',
340
- SubDirectory => {
341
- TagTable => 'Image::ExifTool::FlashPix::Image',
342
- },
343
- },
344
- "Contents" => {
345
- Name => 'Contents',
346
- Notes => 'found in FLA files; may contain XMP',
347
- SubDirectory => {
348
- TagTable => 'Image::ExifTool::XMP::Main',
349
- ProcessProc => \&ProcessContents,
350
- },
351
- },
352
- "ICC Profile 0001" => {
353
- Name => 'ICC_Profile',
354
- SubDirectory => {
355
- TagTable => 'Image::ExifTool::ICC_Profile::Main',
356
- DirStart => 0x1c, # skip stream header
357
- },
358
- },
359
- "\x05Extension List" => {
360
- Name => 'Extensions',
361
- SubDirectory => {
362
- TagTable => 'Image::ExifTool::FlashPix::Extensions',
363
- },
364
- },
365
- 'Subimage 0000 Header' => {
366
- Name => 'SubimageHdr',
367
- SubDirectory => {
368
- TagTable => 'Image::ExifTool::FlashPix::SubimageHdr',
369
- DirStart => 0x1c, # skip stream header
370
- },
371
- },
372
- # 'Subimage 0000 Data'
373
- "\x05Data Object" => { # plus instance number (ie. " 000000")
374
- Name => 'DataObject',
375
- SubDirectory => {
376
- TagTable => 'Image::ExifTool::FlashPix::DataObject',
377
- },
378
- },
379
- # "\x05Data Object Store" => { # plus instance number (ie. " 000000")
380
- "\x05Transform" => { # plus instance number (ie. " 000000")
381
- Name => 'Transform',
382
- SubDirectory => {
383
- TagTable => 'Image::ExifTool::FlashPix::Transform',
384
- },
385
- },
386
- "\x05Operation" => { # plus instance number (ie. " 000000")
387
- Name => 'Operation',
388
- SubDirectory => {
389
- TagTable => 'Image::ExifTool::FlashPix::Operation',
390
- },
391
- },
392
- "\x05Global Info" => {
393
- Name => 'GlobalInfo',
394
- SubDirectory => {
395
- TagTable => 'Image::ExifTool::FlashPix::GlobalInfo',
396
- },
397
- },
398
- "\x05Screen Nail" => { # plus class ID (ie. "_bd0100609719a180")
399
- Name => 'ScreenNail',
400
- Groups => { 2 => 'Other' },
401
- # strip off stream header
402
- ValueConv => 'length($val) > 0x1c and $val = substr($val, 0x1c); \$val',
403
- },
404
- "\x05Audio Info" => {
405
- Name => 'AudioInfo',
406
- SubDirectory => {
407
- TagTable => 'Image::ExifTool::FlashPix::AudioInfo',
408
- },
409
- },
410
- 'Audio Stream' => { # plus instance number (ie. " 000000")
411
- Name => 'AudioStream',
412
- Groups => { 2 => 'Audio' },
413
- # strip off stream header
414
- ValueConv => 'length($val) > 0x1c and $val = substr($val, 0x1c); \$val',
415
- },
416
- 'Current User' => { #PH
417
- Name => 'CurrentUser',
418
- # not sure what the rest of this data is, but extract ASCII name from it - PH
419
- ValueConv => q{
420
- return undef if length $val < 12;
421
- my ($size,$pos) = unpack('x4VV', $val);
422
- my $len = $size - $pos - 4;
423
- return undef if $len < 0 or length $val < $size + 8;
424
- return substr($val, 8 + $pos, $len);
425
- },
426
- },
427
- );
428
-
429
- # Summary Information properties
430
- %Image::ExifTool::FlashPix::SummaryInfo = (
431
- PROCESS_PROC => \&ProcessProperties,
432
- GROUPS => { 2 => 'Document' },
433
- NOTES => q{
434
- The Dictionary, CodePage and LocalIndicator tags are common to all FlashPix
435
- property tables, even though they are only listed in the SummaryInfo table.
436
- },
437
- 0x00 => { Name => 'Dictionary', Groups => { 2 => 'Other' }, Binary => 1 },
438
- 0x01 => {
439
- Name => 'CodePage',
440
- Groups => { 2 => 'Other' },
441
- PrintConv => \%codePage,
442
- },
443
- 0x02 => 'Title',
444
- 0x03 => 'Subject',
445
- 0x04 => { Name => 'Author', Groups => { 2 => 'Author' } },
446
- 0x05 => 'Keywords',
447
- 0x06 => 'Comments',
448
- 0x07 => 'Template',
449
- 0x08 => { Name => 'LastModifiedBy', Groups => { 2 => 'Author' } },
450
- 0x09 => 'RevisionNumber',
451
- 0x0a => { Name => 'TotalEditTime', PrintConv => 'ConvertTimeSpan($val)' }, # (in sec)
452
- 0x0b => { Name => 'LastPrinted', Groups => { 2 => 'Time' } },
453
- 0x0c => {
454
- Name => 'CreateDate',
455
- Groups => { 2 => 'Time' },
456
- PrintConv => '$self->ConvertDateTime($val)',
457
- },
458
- 0x0d => {
459
- Name => 'ModifyDate',
460
- Groups => { 2 => 'Time' },
461
- PrintConv => '$self->ConvertDateTime($val)',
462
- },
463
- 0x0e => 'Pages',
464
- 0x0f => 'Words',
465
- 0x10 => 'Characters',
466
- 0x11 => { Name => 'ThumbnailClip', Binary => 1 },
467
- 0x12 => {
468
- Name => 'Software',
469
- RawConv => '$$self{Software} = $val', # (use to determine file type)
470
- },
471
- 0x13 => {
472
- Name => 'Security',
473
- # see http://msdn.microsoft.com/en-us/library/aa379255(VS.85).aspx
474
- PrintConv => {
475
- 0 => 'None',
476
- 1 => 'Password protected',
477
- 2 => 'Read-only recommended',
478
- 4 => 'Read-only enforced',
479
- 8 => 'Locked for annotations',
480
- },
481
- },
482
- 0x80000000 => { Name => 'LocaleIndicator', Groups => { 2 => 'Other' } },
483
- );
484
-
485
- # Document Summary Information properties (ref 4)
486
- %Image::ExifTool::FlashPix::DocumentInfo = (
487
- PROCESS_PROC => \&ProcessProperties,
488
- GROUPS => { 2 => 'Document' },
489
- NOTES => q{
490
- The DocumentSummaryInformation property set includes a UserDefined property
491
- set for which only the Hyperlinks and HyperlinkBase tags are pre-defined.
492
- However, ExifTool will also extract any other information found in the
493
- UserDefined properties.
494
- },
495
- 0x02 => 'Category',
496
- 0x03 => 'PresentationTarget',
497
- 0x04 => 'Bytes',
498
- 0x05 => 'Lines',
499
- 0x06 => 'Paragraphs',
500
- 0x07 => 'Slides',
501
- 0x08 => 'Notes',
502
- 0x09 => 'HiddenSlides',
503
- 0x0a => 'MMClips',
504
- 0x0b => {
505
- Name => 'ScaleCrop',
506
- PrintConv => { 0 => 'No', 1 => 'Yes' },
507
- },
508
- 0x0c => 'HeadingPairs',
509
- 0x0d => 'TitleOfParts',
510
- 0x0e => 'Manager',
511
- 0x0f => 'Company',
512
- 0x10 => {
513
- Name => 'LinksUpToDate',
514
- PrintConv => { 0 => 'No', 1 => 'Yes' },
515
- },
516
- 0x11 => 'CharCountWithSpaces',
517
- # 0x12 ?
518
- 0x13 => { #PH (unconfirmed)
519
- Name => 'SharedDoc',
520
- PrintConv => { 0 => 'No', 1 => 'Yes' },
521
- },
522
- # 0x14 ?
523
- # 0x15 ?
524
- 0x16 => {
525
- Name => 'HyperlinksChanged',
526
- PrintConv => { 0 => 'No', 1 => 'Yes' },
527
- },
528
- 0x17 => { #PH (unconfirmed handling of lower 16 bits)
529
- Name => 'AppVersion',
530
- ValueConv => 'sprintf("%d.%.4d",$val >> 16, $val & 0xffff)',
531
- },
532
- '_PID_LINKBASE' => {
533
- Name => 'HyperlinkBase',
534
- ValueConv => '$self->Decode($val, "UCS2","II")',
535
- },
536
- '_PID_HLINKS' => {
537
- Name => 'Hyperlinks',
538
- RawConv => \&ProcessHyperlinks,
539
- },
540
- );
541
-
542
- # Image Information properties
543
- %Image::ExifTool::FlashPix::ImageInfo = (
544
- PROCESS_PROC => \&ProcessProperties,
545
- GROUPS => { 2 => 'Image' },
546
- 0x21000000 => {
547
- Name => 'FileSource',
548
- PrintConv => {
549
- 1 => 'Film Scanner',
550
- 2 => 'Reflection Print Scanner',
551
- 3 => 'Digital Camera',
552
- 4 => 'Video Capture',
553
- 5 => 'Computer Graphics',
554
- },
555
- },
556
- 0x21000001 => {
557
- Name => 'SceneType',
558
- PrintConv => {
559
- 1 => 'Original Scene',
560
- 2 => 'Second Generation Scene',
561
- 3 => 'Digital Scene Generation',
562
- },
563
- },
564
- 0x21000002 => 'CreationPathVector',
565
- 0x21000003 => 'SoftwareRelease',
566
- 0x21000004 => 'UserDefinedID',
567
- 0x21000005 => 'SharpnessApproximation',
568
- 0x22000000 => { Name => 'Copyright', Groups => { 2 => 'Author' } },
569
- 0x22000001 => { Name => 'OriginalImageBroker', Groups => { 2 => 'Author' } },
570
- 0x22000002 => { Name => 'DigitalImageBroker', Groups => { 2 => 'Author' } },
571
- 0x22000003 => { Name => 'Authorship', Groups => { 2 => 'Author' } },
572
- 0x22000004 => { Name => 'IntellectualPropertyNotes', Groups => { 2 => 'Author' } },
573
- 0x23000000 => {
574
- Name => 'TestTarget',
575
- PrintConv => {
576
- 1 => 'Color Chart',
577
- 2 => 'Gray Card',
578
- 3 => 'Grayscale',
579
- 4 => 'Resolution Chart',
580
- 5 => 'Inch Scale',
581
- 6 => 'Centimeter Scale',
582
- 7 => 'Millimeter Scale',
583
- 8 => 'Micrometer Scale',
584
- },
585
- },
586
- 0x23000002 => 'GroupCaption',
587
- 0x23000003 => 'CaptionText',
588
- 0x23000004 => 'People',
589
- 0x23000007 => 'Things',
590
- 0x2300000A => {
591
- Name => 'DateTimeOriginal',
592
- Description => 'Date/Time Original',
593
- Groups => { 2 => 'Time' },
594
- PrintConv => '$self->ConvertDateTime($val)',
595
- },
596
- 0x2300000B => 'Events',
597
- 0x2300000C => 'Places',
598
- 0x2300000F => 'ContentDescriptionNotes',
599
- 0x24000000 => { Name => 'Make', Groups => { 2 => 'Camera' } },
600
- 0x24000001 => {
601
- Name => 'Model',
602
- Description => 'Camera Model Name',
603
- Groups => { 2 => 'Camera' },
604
- },
605
- 0x24000002 => { Name => 'SerialNumber', Groups => { 2 => 'Camera' } },
606
- 0x25000000 => {
607
- Name => 'CreateDate',
608
- Groups => { 2 => 'Time' },
609
- PrintConv => '$self->ConvertDateTime($val)',
610
- },
611
- 0x25000001 => {
612
- Name => 'ExposureTime',
613
- PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
614
- },
615
- 0x25000002 => {
616
- Name => 'FNumber',
617
- PrintConv => 'sprintf("%.1f",$val)',
618
- },
619
- 0x25000003 => {
620
- Name => 'ExposureProgram',
621
- Groups => { 2 => 'Camera' },
622
- # use PrintConv of corresponding EXIF tag
623
- PrintConv => $Image::ExifTool::Exif::Main{0x8822}->{PrintConv},
624
- },
625
- 0x25000004 => 'BrightnessValue',
626
- 0x25000005 => 'ExposureCompensation',
627
- 0x25000006 => {
628
- Name => 'SubjectDistance',
629
- Groups => { 2 => 'Camera' },
630
- PrintConv => 'sprintf("%.3f m", $val)',
631
- },
632
- 0x25000007 => {
633
- Name => 'MeteringMode',
634
- Groups => { 2 => 'Camera' },
635
- PrintConv => $Image::ExifTool::Exif::Main{0x9207}->{PrintConv},
636
- },
637
- 0x25000008 => {
638
- Name => 'LightSource',
639
- Groups => { 2 => 'Camera' },
640
- PrintConv => $Image::ExifTool::Exif::Main{0x9208}->{PrintConv},
641
- },
642
- 0x25000009 => {
643
- Name => 'FocalLength',
644
- Groups => { 2 => 'Camera' },
645
- PrintConv => 'sprintf("%.1f mm",$val)',
646
- },
647
- 0x2500000A => {
648
- Name => 'MaxApertureValue',
649
- Groups => { 2 => 'Camera' },
650
- ValueConv => '2 ** ($val / 2)',
651
- PrintConv => 'sprintf("%.1f",$val)',
652
- },
653
- 0x2500000B => {
654
- Name => 'Flash',
655
- Groups => { 2 => 'Camera' },
656
- PrintConv => {
657
- 1 => 'No Flash',
658
- 2 => 'Flash Fired',
659
- },
660
- },
661
- 0x2500000C => {
662
- Name => 'FlashEnergy',
663
- Groups => { 2 => 'Camera' },
664
- },
665
- 0x2500000D => {
666
- Name => 'FlashReturn',
667
- Groups => { 2 => 'Camera' },
668
- PrintConv => {
669
- 1 => 'Subject Outside Flash Range',
670
- 2 => 'Subject Inside Flash Range',
671
- },
672
- },
673
- 0x2500000E => {
674
- Name => 'BackLight',
675
- PrintConv => {
676
- 1 => 'Front Lit',
677
- 2 => 'Back Lit 1',
678
- 3 => 'Back Lit 2',
679
- },
680
- },
681
- 0x2500000F => { Name => 'SubjectLocation', Groups => { 2 => 'Camera' } },
682
- 0x25000010 => 'ExposureIndex',
683
- 0x25000011 => {
684
- Name => 'SpecialEffectsOpticalFilter',
685
- PrintConv => {
686
- 1 => 'None',
687
- 2 => 'Colored',
688
- 3 => 'Diffusion',
689
- 4 => 'Multi-image',
690
- 5 => 'Polarizing',
691
- 6 => 'Split-field',
692
- 7 => 'Star',
693
- },
694
- },
695
- 0x25000012 => 'PerPictureNotes',
696
- 0x26000000 => {
697
- Name => 'SensingMethod',
698
- Groups => { 2 => 'Camera' },
699
- PrintConv => $Image::ExifTool::Exif::Main{0x9217}->{PrintConv},
700
- },
701
- 0x26000001 => { Name => 'FocalPlaneXResolution', Groups => { 2 => 'Camera' } },
702
- 0x26000002 => { Name => 'FocalPlaneYResolution', Groups => { 2 => 'Camera' } },
703
- 0x26000003 => {
704
- Name => 'FocalPlaneResolutionUnit',
705
- Groups => { 2 => 'Camera' },
706
- PrintConv => $Image::ExifTool::Exif::Main{0xa210}->{PrintConv},
707
- },
708
- 0x26000004 => 'SpatialFrequencyResponse',
709
- 0x26000005 => 'CFAPattern',
710
- 0x27000001 => {
711
- Name => 'FilmCategory',
712
- PrintConv => {
713
- 1 => 'Negative B&W',
714
- 2 => 'Negative Color',
715
- 3 => 'Reversal B&W',
716
- 4 => 'Reversal Color',
717
- 5 => 'Chromagenic',
718
- 6 => 'Internegative B&W',
719
- 7 => 'Internegative Color',
720
- },
721
- },
722
- 0x26000007 => 'ISO',
723
- 0x26000008 => 'Opto-ElectricConvFactor',
724
- 0x27000000 => 'FilmBrand',
725
- 0x27000001 => 'FilmCategory',
726
- 0x27000002 => 'FilmSize',
727
- 0x27000003 => 'FilmRollNumber',
728
- 0x27000004 => 'FilmFrameNumber',
729
- 0x29000000 => 'OriginalScannedImageSize',
730
- 0x29000001 => 'OriginalDocumentSize',
731
- 0x29000002 => {
732
- Name => 'OriginalMedium',
733
- PrintConv => {
734
- 1 => 'Continuous Tone Image',
735
- 2 => 'Halftone Image',
736
- 3 => 'Line Art',
737
- },
738
- },
739
- 0x29000003 => {
740
- Name => 'TypeOfOriginal',
741
- PrintConv => {
742
- 1 => 'B&W Print',
743
- 2 => 'Color Print',
744
- 3 => 'B&W Document',
745
- 4 => 'Color Document',
746
- },
747
- },
748
- 0x28000000 => 'ScannerMake',
749
- 0x28000001 => 'ScannerModel',
750
- 0x28000002 => 'ScannerSerialNumber',
751
- 0x28000003 => 'ScanSoftware',
752
- 0x28000004 => { Name => 'ScanSoftwareRevisionDate', Groups => { 2 => 'Time' } },
753
- 0x28000005 => 'ServiceOrganizationName',
754
- 0x28000006 => 'ScanOperatorID',
755
- 0x28000008 => {
756
- Name => 'ScanDate',
757
- Groups => { 2 => 'Time' },
758
- PrintConv => '$self->ConvertDateTime($val)',
759
- },
760
- 0x28000009 => {
761
- Name => 'ModifyDate',
762
- Groups => { 2 => 'Time' },
763
- PrintConv => '$self->ConvertDateTime($val)',
764
- },
765
- 0x2800000A => 'ScannerPixelSize',
766
- );
767
-
768
- # Image Contents properties
769
- %Image::ExifTool::FlashPix::Image = (
770
- PROCESS_PROC => \&ProcessProperties,
771
- GROUPS => { 2 => 'Image' },
772
- # VARS storage is used as a hash lookup for tagID's which aren't constant.
773
- # The key is a mask for significant bits of the tagID, and the value
774
- # is a lookup for tagID's for which this mask is valid.
775
- VARS => {
776
- # ID's are different for each subimage
777
- 0xff00ffff => {
778
- 0x02000000=>1, 0x02000001=>1, 0x02000002=>1, 0x02000003=>1,
779
- 0x02000004=>1, 0x02000005=>1, 0x02000006=>1, 0x02000007=>1,
780
- 0x03000001=>1,
781
- },
782
- },
783
- 0x01000000 => 'NumberOfResolutions',
784
- 0x01000002 => 'ImageWidth', # width of highest resolution image
785
- 0x01000003 => 'ImageHeight',
786
- 0x01000004 => 'DefaultDisplayHeight',
787
- 0x01000005 => 'DefaultDisplayWidth',
788
- 0x01000006 => {
789
- Name => 'DisplayUnits',
790
- PrintConv => {
791
- 0 => 'inches',
792
- 1 => 'meters',
793
- 2 => 'cm',
794
- 3 => 'mm',
795
- },
796
- },
797
- 0x02000000 => 'SubimageWidth',
798
- 0x02000001 => 'SubimageHeight',
799
- 0x02000002 => {
800
- Name => 'SubimageColor',
801
- # decode only component count and color space of first component
802
- ValueConv => 'sprintf("%.2x %.4x", unpack("x4vx4v",$val))',
803
- PrintConv => {
804
- '01 0000' => 'Opacity Only',
805
- '01 8000' => 'Opacity Only (uncalibrated)',
806
- '01 0001' => 'Monochrome',
807
- '01 8001' => 'Monochrome (uncalibrated)',
808
- '03 0002' => 'YCbCr',
809
- '03 8002' => 'YCbCr (uncalibrated)',
810
- '03 0003' => 'RGB',
811
- '03 8003' => 'RGB (uncalibrated)',
812
- '04 0002' => 'YCbCr with Opacity',
813
- '04 8002' => 'YCbCr with Opacity (uncalibrated)',
814
- '04 0003' => 'RGB with Opacity',
815
- '04 8003' => 'RGB with Opacity (uncalibrated)',
816
- },
817
- },
818
- 0x02000003 => {
819
- Name => 'SubimageNumericalFormat',
820
- PrintConv => {
821
- 17 => '8-bit, Unsigned',
822
- 18 => '16-bit, Unsigned',
823
- 19 => '32-bit, Unsigned',
824
- },
825
- },
826
- 0x02000004 => {
827
- Name => 'DecimationMethod',
828
- PrintConv => {
829
- 0 => 'None (Full-sized Image)',
830
- 8 => '8-point Prefilter',
831
- },
832
- },
833
- 0x02000005 => 'DecimationPrefilterWidth',
834
- 0x02000007 => 'SubimageICC_Profile',
835
- 0x03000001 => { Name => 'JPEGTables', Binary => 1 },
836
- 0x03000002 => 'MaxJPEGTableIndex',
837
- );
838
-
839
- # Extension List properties
840
- %Image::ExifTool::FlashPix::Extensions = (
841
- PROCESS_PROC => \&ProcessProperties,
842
- GROUPS => { 2 => 'Other' },
843
- VARS => {
844
- # ID's are different for each extension type
845
- 0x0000ffff => {
846
- 0x0001=>1, 0x0002=>1, 0x0003=>1, 0x0004=>1,
847
- 0x0005=>1, 0x0006=>1, 0x0007=>1, 0x1000=>1,
848
- 0x2000=>1, 0x2001=>1, 0x3000=>1, 0x4000=>1,
849
- },
850
- 0x0000f00f => { 0x3001=>1, 0x3002=>1 },
851
- },
852
- 0x10000000 => 'UsedExtensionNumbers',
853
- 0x0001 => 'ExtensionName',
854
- 0x0002 => 'ExtensionClassID',
855
- 0x0003 => {
856
- Name => 'ExtensionPersistence',
857
- PrintConv => {
858
- 0 => 'Always Valid',
859
- 1 => 'Invalidated By Modification',
860
- 2 => 'Potentially Invalidated By Modification',
861
- },
862
- },
863
- 0x0004 => { Name => 'ExtensionCreateDate', Groups => { 2 => 'Time' } },
864
- 0x0005 => { Name => 'ExtensionModifyDate', Groups => { 2 => 'Time' } },
865
- 0x0006 => 'CreatingApplication',
866
- 0x0007 => 'ExtensionDescription',
867
- 0x1000 => 'Storage-StreamPathname',
868
- 0x2000 => 'FlashPixStreamPathname',
869
- 0x2001 => 'FlashPixStreamFieldOffset',
870
- 0x3000 => 'PropertySetPathname',
871
- 0x3001 => 'PropertySetIDCodes',
872
- 0x3002 => 'PropertyVectorElements',
873
- 0x4000 => 'SubimageResolutions',
874
- );
875
-
876
- # Subimage Header tags
877
- %Image::ExifTool::FlashPix::SubimageHdr = (
878
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
879
- FORMAT => 'int32u',
880
- # 0 => 'HeaderLength',
881
- 1 => 'SubimageWidth',
882
- 2 => 'SubimageHeight',
883
- 3 => 'SubimageTileCount',
884
- 4 => 'SubimageTileWidth',
885
- 5 => 'SubimageTileHeight',
886
- 6 => 'NumChannels',
887
- # 7 => 'TileHeaderOffset',
888
- # 8 => 'TileHeaderLength',
889
- # ... followed by tile header table
890
- );
891
-
892
- # Data Object properties
893
- %Image::ExifTool::FlashPix::DataObject = (
894
- PROCESS_PROC => \&ProcessProperties,
895
- GROUPS => { 2 => 'Other' },
896
- 0x00010000 => 'DataObjectID',
897
- 0x00010002 => 'LockedPropertyList',
898
- 0x00010003 => 'DataObjectTitle',
899
- 0x00010004 => 'LastModifier',
900
- 0x00010005 => 'RevisionNumber',
901
- 0x00010006 => { Name => 'DataCreateDate', Groups => { 2 => 'Time' } },
902
- 0x00010007 => { Name => 'DataModifyDate', Groups => { 2 => 'Time' } },
903
- 0x00010008 => 'CreatingApplication',
904
- 0x00010100 => {
905
- Name => 'DataObjectStatus',
906
- PrintConv => q{
907
- ($val & 0x0000ffff ? 'Exists' : 'Does Not Exist') .
908
- ', ' . ($val & 0xffff0000 ? 'Not ' : '') . 'Purgeable'
909
- },
910
- },
911
- 0x00010101 => {
912
- Name => 'CreatingTransform',
913
- PrintConv => '$val ? $val : "Source Image"',
914
- },
915
- 0x00010102 => 'UsingTransforms',
916
- 0x10000000 => 'CachedImageHeight',
917
- 0x10000001 => 'CachedImageWidth',
918
- );
919
-
920
- # Transform properties
921
- %Image::ExifTool::FlashPix::Transform = (
922
- PROCESS_PROC => \&ProcessProperties,
923
- GROUPS => { 2 => 'Other' },
924
- 0x00010000 => 'TransformNodeID',
925
- 0x00010001 => 'OperationClassID',
926
- 0x00010002 => 'LockedPropertyList',
927
- 0x00010003 => 'TransformTitle',
928
- 0x00010004 => 'LastModifier',
929
- 0x00010005 => 'RevisionNumber',
930
- 0x00010006 => { Name => 'TransformCreateDate', Groups => { 2 => 'Time' } },
931
- 0x00010007 => { Name => 'TransformModifyDate', Groups => { 2 => 'Time' } },
932
- 0x00010008 => 'CreatingApplication',
933
- 0x00010100 => 'InputDataObjectList',
934
- 0x00010101 => 'OutputDataObjectList',
935
- 0x00010102 => 'OperationNumber',
936
- 0x10000000 => 'ResultAspectRatio',
937
- 0x10000001 => 'RectangleOfInterest',
938
- 0x10000002 => 'Filtering',
939
- 0x10000003 => 'SpatialOrientation',
940
- 0x10000004 => 'ColorTwistMatrix',
941
- 0x10000005 => 'ContrastAdjustment',
942
- );
943
-
944
- # Operation properties
945
- %Image::ExifTool::FlashPix::Operation = (
946
- PROCESS_PROC => \&ProcessProperties,
947
- 0x00010000 => 'OperationID',
948
- );
949
-
950
- # Global Info properties
951
- %Image::ExifTool::FlashPix::GlobalInfo = (
952
- PROCESS_PROC => \&ProcessProperties,
953
- 0x00010002 => 'LockedPropertyList',
954
- 0x00010003 => 'TransformedImageTitle',
955
- 0x00010004 => 'LastModifier',
956
- 0x00010100 => 'VisibleOutputs',
957
- 0x00010101 => 'MaximumImageIndex',
958
- 0x00010102 => 'MaximumTransformIndex',
959
- 0x00010103 => 'MaximumOperationIndex',
960
- );
961
-
962
- # Audio Info properties
963
- %Image::ExifTool::FlashPix::AudioInfo = (
964
- PROCESS_PROC => \&ProcessProperties,
965
- GROUPS => { 2 => 'Audio' },
966
- );
967
-
968
- # MacroMedia flash contents
969
- %Image::ExifTool::FlashPix::Contents = (
970
- PROCESS_PROC => \&ProcessProperties,
971
- GROUPS => { 2 => 'Image' },
972
- );
973
-
974
- # CompObj tags
975
- %Image::ExifTool::FlashPix::CompObj = (
976
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
977
- GROUPS => { 2 => 'Other' },
978
- FORMAT => 'int32u',
979
- 0 => { Name => 'CompObjUserTypeLen' },
980
- 1 => {
981
- Name => 'CompObjUserType',
982
- Format => 'string[$val{0}]',
983
- RawConv => '$$self{CompObjUserType} = $val', # (use to determine file type)
984
- },
985
- );
986
-
987
- # composite FlashPix tags
988
- %Image::ExifTool::FlashPix::Composite = (
989
- GROUPS => { 2 => 'Image' },
990
- PreviewImage => {
991
- # extract JPEG preview from ScreenNail if possible
992
- Require => {
993
- 0 => 'ScreenNail',
994
- },
995
- Binary => 1,
996
- RawConv => q{
997
- return undef unless $val[0] =~ /\xff\xd8\xff/g;
998
- return substr($val[0], pos($val[0])-3);
999
- },
1000
- },
1001
- );
1002
-
1003
- # add our composite tags
1004
- Image::ExifTool::AddCompositeTags('Image::ExifTool::FlashPix');
1005
-
1006
- #------------------------------------------------------------------------------
1007
- # Process hyperlinks from PID_HYPERLINKS array
1008
- # (ref http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/dnaro97ta/html/msdn_hyper97.asp)
1009
- # Inputs: 0) value, 1) ExifTool ref
1010
- # Returns: list of hyperlinks
1011
- sub ProcessHyperlinks($$)
1012
- {
1013
- my ($val, $exifTool) = @_;
1014
-
1015
- # process as an array of VT_VARIANT's
1016
- my $dirEnd = length $val;
1017
- return undef if $dirEnd < 4;
1018
- my $num = Get32u(\$val, 0);
1019
- my $valPos = 4;
1020
- my ($i, @vals);
1021
- for ($i=0; $i<$num; ++$i) {
1022
- # read VT_BLOB entries as an array of VT_VARIANT's
1023
- my $value = ReadFPXValue($exifTool, \$val, $valPos, VT_VARIANT, $dirEnd);
1024
- last unless defined $value;
1025
- push @vals, $value;
1026
- }
1027
- # filter values to extract only the links
1028
- my @links;
1029
- for ($i=0; $i<@vals; $i+=6) {
1030
- push @links, $vals[$i+4]; # get address
1031
- $links[-1] .= '#' . $vals[$i+5] if length $vals[$i+5]; # add subaddress
1032
- }
1033
- return \@links;
1034
- }
1035
-
1036
- #------------------------------------------------------------------------------
1037
- # Read FlashPix value
1038
- # Inputs: 0) ExifTool ref, 1) data ref, 2) value offset, 3) FPX format number,
1039
- # 4) end offset, 5) flag for no padding, 6) code page
1040
- # Returns: converted value (or list of values in list context) and updates
1041
- # value offset to end of value if successful, or returns undef on error
1042
- sub ReadFPXValue($$$$$;$$)
1043
- {
1044
- my ($exifTool, $dataPt, $valPos, $type, $dirEnd, $noPad, $codePage) = @_;
1045
- my @vals;
1046
-
1047
- my $format = $oleFormat{$type & 0x0fff};
1048
- while ($format) {
1049
- my $count = 1;
1050
- # handle VT_VECTOR types
1051
- my $flags = $type & 0xf000;
1052
- if ($flags) {
1053
- if ($flags == VT_VECTOR) {
1054
- $noPad = 1; # values don't seem to be padded inside vectors
1055
- my $size = $oleFormatSize{VT_VECTOR};
1056
- last if $valPos + $size > $dirEnd;
1057
- $count = Get32u($dataPt, $valPos);
1058
- push @vals, '' if $count == 0; # allow zero-element vector
1059
- $valPos += 4;
1060
- } else {
1061
- # can't yet handle this property flag
1062
- last;
1063
- }
1064
- }
1065
- unless ($format =~ /^VT_/) {
1066
- my $size = Image::ExifTool::FormatSize($format) * $count;
1067
- last if $valPos + $size > $dirEnd;
1068
- @vals = ReadValue($dataPt, $valPos, $format, $count, $size);
1069
- # update position to end of value plus padding
1070
- $valPos += ($count * $size + 3) & 0xfffffffc;
1071
- last;
1072
- }
1073
- my $size = $oleFormatSize{$format};
1074
- my ($item, $val);
1075
- for ($item=0; $item<$count; ++$item) {
1076
- last if $valPos + $size > $dirEnd;
1077
- if ($format eq 'VT_VARIANT') {
1078
- my $subType = Get32u($dataPt, $valPos);
1079
- $valPos += $size;
1080
- $val = ReadFPXValue($exifTool, $dataPt, $valPos, $subType, $dirEnd, $noPad, $codePage);
1081
- last unless defined $val;
1082
- push @vals, $val;
1083
- next; # avoid adding $size to $valPos again
1084
- } elsif ($format eq 'VT_FILETIME') {
1085
- # convert from time in 100 ns increments to time in seconds
1086
- $val = 1e-7 * Image::ExifTool::Get64u($dataPt, $valPos);
1087
- # print as date/time if value is greater than one year (PH hack)
1088
- if ($val > 365 * 24 * 3600) {
1089
- # shift from Jan 1, 1601 to Jan 1, 1970
1090
- $val -= 134774 * 24 * 3600;
1091
- $val = Image::ExifTool::ConvertUnixTime($val);
1092
- }
1093
- } elsif ($format eq 'VT_DATE') {
1094
- $val = Image::ExifTool::GetDouble($dataPt, $valPos);
1095
- # shift zero from Dec 30, 1899 to Jan 1, 1970 and convert to secs
1096
- $val = ($val - 25569) * 24 * 3600 if $val != 0;
1097
- $val = Image::ExifTool::ConvertUnixTime($val);
1098
- } elsif ($format =~ /STR$/) {
1099
- my $len = Get32u($dataPt, $valPos);
1100
- $len *= 2 if $format eq 'VT_LPWSTR'; # convert to byte count
1101
- last if $valPos + $len + 4 > $dirEnd;
1102
- $val = substr($$dataPt, $valPos + 4, $len);
1103
- if ($format eq 'VT_LPWSTR') {
1104
- # convert wide string from Unicode
1105
- $val = $exifTool->Decode($val, 'UCS2');
1106
- } elsif ($codePage) {
1107
- my $charset = $Image::ExifTool::charsetName{"cp$codePage"};
1108
- if ($charset) {
1109
- $val = $exifTool->Decode($val, $charset);
1110
- } elsif ($codePage eq 1200) { # UTF-16, little endian
1111
- $val = $exifTool->Decode(undef, 'UCS2', 'II');
1112
- }
1113
- }
1114
- $val =~ s/\0.*//s; # truncate at null terminator
1115
- # update position for string length
1116
- # (the spec states that strings should be padded to align
1117
- # on even 32-bit boundaries, but this isn't always the case)
1118
- $valPos += $noPad ? $len : ($len + 3) & 0xfffffffc;
1119
- } elsif ($format eq 'VT_BLOB' or $format eq 'VT_CF') {
1120
- my $len = Get32u($dataPt, $valPos);
1121
- last if $valPos + $len + 4 > $dirEnd;
1122
- $val = substr($$dataPt, $valPos + 4, $len);
1123
- # update position for data length plus padding
1124
- # (does this padding disappear in arrays too?)
1125
- $valPos += ($len + 3) & 0xfffffffc;
1126
- } elsif ($format eq 'VT_CLSID') {
1127
- $val = Image::ExifTool::ASF::GetGUID(substr($$dataPt, $valPos, $size));
1128
- }
1129
- $valPos += $size; # update value pointer to end of value
1130
- push @vals, $val;
1131
- }
1132
- # join VT_ values with commas unless we want an array
1133
- @vals = ( join $exifTool->Options('ListSep'), @vals ) if @vals > 1 and not wantarray;
1134
- last; # didn't really want to loop
1135
- }
1136
- $_[2] = $valPos; # return updated value position
1137
-
1138
- if (wantarray) {
1139
- return @vals;
1140
- } elsif (@vals > 1) {
1141
- return join(' ', @vals);
1142
- } else {
1143
- return $vals[0];
1144
- }
1145
- }
1146
-
1147
- #------------------------------------------------------------------------------
1148
- # Scan for XMP in FLA Contents (ref PH)
1149
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
1150
- # Returns: 1 on success
1151
- # Notes: FLA format is proprietary and I couldn't find any documentation,
1152
- # so this routine is entirely based on observations from sample files
1153
- sub ProcessContents($$$)
1154
- {
1155
- my ($exifTool, $dirInfo, $tagTablePtr) = @_;
1156
- my $dataPt = $$dirInfo{DataPt};
1157
- my $isFLA;
1158
-
1159
- # all of my FLA samples contain "Contents" data, an no other FPX-like samples have
1160
- # this, but check the data for a familiar pattern to be sure this is FLA: the
1161
- # Contents of all of my FLA samples start with two bytes (0x29,0x38,0x3f,0x43 or 0x47,
1162
- # then 0x01) followed by a number of zero bytes (from 0x18 to 0x26 of them, related
1163
- # somehow to the value of the first byte), followed by the string "DocumentPage"
1164
- $isFLA = 1 if $$dataPt =~ /^..\0+\xff\xff\x01\0\x0d\0CDocumentPage/;
1165
-
1166
- # do a brute-force scan of the "Contents" for UTF-16 XMP
1167
- # (this may always be little-endian, but allow for either endianness)
1168
- if ($$dataPt =~ /<\0\?\0x\0p\0a\0c\0k\0e\0t\0 \0b\0e\0g\0i\0n\0=\0['"](\0\xff\xfe|\xfe\xff)/g) {
1169
- $$dirInfo{DirStart} = pos($$dataPt) - 36;
1170
- if ($$dataPt =~ /<\0\?\0x\0p\0a\0c\0k\0e\0t\0 \0e\0n\0d\0=\0['"]\0[wr]\0['"]\0\?\0>\0?/g) {
1171
- $$dirInfo{DirLen} = pos($$dataPt) - $$dirInfo{DirStart};
1172
- Image::ExifTool::XMP::ProcessXMP($exifTool, $dirInfo, $tagTablePtr);
1173
- # override format if not already FLA but XMP-dc:Format indicates it is
1174
- $isFLA = 1 if $$exifTool{FILE_TYPE} ne 'FLA' and $$exifTool{VALUE}{Format} and
1175
- $$exifTool{VALUE}{Format} eq 'application/vnd.adobe.fla';
1176
- }
1177
- }
1178
- $exifTool->OverrideFileType('FLA') if $isFLA;
1179
- return 1;
1180
- }
1181
-
1182
- #------------------------------------------------------------------------------
1183
- # Check FPX byte order mark (BOM) and set byte order appropriately
1184
- # Inputs: 0) data ref, 1) offset to BOM
1185
- # Returns: true on success
1186
- sub CheckBOM($$)
1187
- {
1188
- my ($dataPt, $pos) = @_;
1189
- my $bom = Get16u($dataPt, $pos);
1190
- return 1 if $bom == 0xfffe;
1191
- return 0 unless $bom == 0xfeff;
1192
- ToggleByteOrder();
1193
- return 1;
1194
- }
1195
-
1196
- #------------------------------------------------------------------------------
1197
- # Process FlashPix properties
1198
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
1199
- # Returns: 1 on success
1200
- sub ProcessProperties($$$)
1201
- {
1202
- my ($exifTool, $dirInfo, $tagTablePtr) = @_;
1203
- my $dataPt = $$dirInfo{DataPt};
1204
- my $pos = $$dirInfo{DirStart} || 0;
1205
- my $dirLen = $$dirInfo{DirLen} || length($$dataPt) - $pos;
1206
- my $dirEnd = $pos + $dirLen;
1207
- my $verbose = $exifTool->Options('Verbose');
1208
- my $n;
1209
-
1210
- if ($dirLen < 48) {
1211
- $exifTool->Warn('Truncated FPX properties');
1212
- return 0;
1213
- }
1214
- # check and set our byte order if necessary
1215
- unless (CheckBOM($dataPt, $pos)) {
1216
- $exifTool->Warn('Bad FPX property byte order mark');
1217
- return 0;
1218
- }
1219
- # get position of start of section
1220
- $pos = Get32u($dataPt, $pos + 44);
1221
- if ($pos < 48) {
1222
- $exifTool->Warn('Bad FPX property section offset');
1223
- return 0;
1224
- }
1225
- for ($n=0; $n<2; ++$n) {
1226
- my %dictionary; # dictionary to translate user-defined properties
1227
- my $codePage;
1228
- last if $pos + 8 > $dirEnd;
1229
- # read property section header
1230
- my $size = Get32u($dataPt, $pos);
1231
- last unless $size;
1232
- my $numEntries = Get32u($dataPt, $pos + 4);
1233
- $verbose and $exifTool->VerboseDir('Property Info', $numEntries, $size);
1234
- if ($pos + 8 + 8 * $numEntries > $dirEnd) {
1235
- $exifTool->Warn('Truncated property list');
1236
- last;
1237
- }
1238
- my $index;
1239
- for ($index=0; $index<$numEntries; ++$index) {
1240
- my $entry = $pos + 8 + 8 * $index;
1241
- my $tag = Get32u($dataPt, $entry);
1242
- my $offset = Get32u($dataPt, $entry + 4);
1243
- my $valStart = $pos + 4 + $offset;
1244
- last if $valStart >= $dirEnd;
1245
- my $valPos = $valStart;
1246
- my $type = Get32u($dataPt, $pos + $offset);
1247
- if ($tag == 0) {
1248
- # read dictionary to get tag name lookup for this property set
1249
- my $i;
1250
- for ($i=0; $i<$type; ++$i) {
1251
- last if $valPos + 8 > $dirEnd;
1252
- $tag = Get32u($dataPt, $valPos);
1253
- my $len = Get32u($dataPt, $valPos + 4);
1254
- $valPos += 8 + $len;
1255
- last if $valPos > $dirEnd;
1256
- my $name = substr($$dataPt, $valPos - $len, $len);
1257
- $name =~ s/\0.*//s;
1258
- next unless length $name;
1259
- $dictionary{$tag} = $name;
1260
- next if $$tagTablePtr{$name};
1261
- $tag = $name;
1262
- $name =~ s/(^| )([a-z])/\U$2/g; # start with uppercase
1263
- $name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters
1264
- next unless length $name;
1265
- $exifTool->VPrint(0, "$$exifTool{INDENT}\[adding $name]\n") if $verbose;
1266
- AddTagToTable($tagTablePtr, $tag, { Name => $name });
1267
- }
1268
- next;
1269
- }
1270
- # use tag name from dictionary if available
1271
- my ($custom, $val);
1272
- if (defined $dictionary{$tag}) {
1273
- $tag = $dictionary{$tag};
1274
- $custom = 1;
1275
- }
1276
- my @vals = ReadFPXValue($exifTool, $dataPt, $valPos, $type, $dirEnd, undef, $codePage);
1277
- @vals or $exifTool->Warn('Error reading property value');
1278
- $val = @vals > 1 ? \@vals : $vals[0];
1279
- my $format = $type & 0x0fff;
1280
- my $flags = $type & 0xf000;
1281
- my $formStr = $oleFormat{$format} || "Type $format";
1282
- $formStr .= '|' . ($oleFlags{$flags} || sprintf("0x%x",$flags)) if $flags;
1283
- my $tagInfo;
1284
- # check for common tag ID's: Dictionary, CodePage and LocaleIndicator
1285
- # (must be done before masking because masked tags may overlap these ID's)
1286
- if (not $custom and ($tag == 1 or $tag == 0x80000000)) {
1287
- # get tagInfo from SummaryInfo table
1288
- my $summaryTable = GetTagTable('Image::ExifTool::FlashPix::SummaryInfo');
1289
- $tagInfo = $exifTool->GetTagInfo($summaryTable, $tag);
1290
- if ($tag == 1) {
1291
- $val += 0x10000 if $val < 0; # (may be incorrectly stored as int16s)
1292
- $codePage = $val; # save code page for translating values
1293
- }
1294
- } elsif ($$tagTablePtr{$tag}) {
1295
- $tagInfo = $exifTool->GetTagInfo($tagTablePtr, $tag);
1296
- } elsif ($$tagTablePtr{VARS} and not $custom) {
1297
- # mask off insignificant bits of tag ID if necessary
1298
- my $masked = $$tagTablePtr{VARS};
1299
- my $mask;
1300
- foreach $mask (keys %$masked) {
1301
- if ($masked->{$mask}->{$tag & $mask}) {
1302
- $tagInfo = $exifTool->GetTagInfo($tagTablePtr, $tag & $mask);
1303
- last;
1304
- }
1305
- }
1306
- }
1307
- $exifTool->HandleTag($tagTablePtr, $tag, $val,
1308
- DataPt => $dataPt,
1309
- Start => $valStart,
1310
- Size => $valPos - $valStart,
1311
- Format => $formStr,
1312
- Index => $index,
1313
- TagInfo => $tagInfo,
1314
- Extra => ", type=$type",
1315
- );
1316
- }
1317
- # issue warning if we hit end of property section prematurely
1318
- $exifTool->Warn('Truncated property data') if $index < $numEntries;
1319
- last unless $$dirInfo{Multi};
1320
- $pos += $size;
1321
- }
1322
-
1323
- return 1;
1324
- }
1325
-
1326
- #------------------------------------------------------------------------------
1327
- # Load chain of sectors from file
1328
- # Inputs: 0) RAF ref, 1) first sector number, 2) FAT ref, 3) sector size, 4) header size
1329
- sub LoadChain($$$$$)
1330
- {
1331
- my ($raf, $sect, $fatPt, $sectSize, $hdrSize) = @_;
1332
- return undef unless $raf;
1333
- my $chain = '';
1334
- my ($buff, %loadedSect);
1335
- for (;;) {
1336
- last if $sect >= END_OF_CHAIN;
1337
- return undef if $loadedSect{$sect}; # avoid infinite loop
1338
- $loadedSect{$sect} = 1;
1339
- my $offset = $sect * $sectSize + $hdrSize;
1340
- return undef unless ($offset <= 0x7fffffff or $$raf{LargeFileSupport}) and
1341
- $raf->Seek($offset, 0) and
1342
- $raf->Read($buff, $sectSize) == $sectSize;
1343
- $chain .= $buff;
1344
- # step to next sector in chain
1345
- return undef if $sect * 4 > length($$fatPt) - 4;
1346
- $sect = Get32u($fatPt, $sect * 4);
1347
- }
1348
- return $chain;
1349
- }
1350
-
1351
- #------------------------------------------------------------------------------
1352
- # Extract information from a JPEG APP2 FPXR segment
1353
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
1354
- # Returns: 1 on success
1355
- sub ProcessFPXR($$$)
1356
- {
1357
- my ($exifTool, $dirInfo, $tagTablePtr) = @_;
1358
- my $dataPt = $$dirInfo{DataPt};
1359
- my $dirStart = $$dirInfo{DirStart};
1360
- my $dirLen = $$dirInfo{DirLen};
1361
- my $verbose = $exifTool->Options('Verbose');
1362
-
1363
- if ($dirLen < 13) {
1364
- $exifTool->Warn('FPXR segment to small');
1365
- return 0;
1366
- }
1367
-
1368
- # get version and segment type (version is 0 in all my samples)
1369
- my ($vers, $type) = unpack('x5C2', $$dataPt);
1370
-
1371
- if ($type == 1) { # a "Contents List" segment
1372
-
1373
- $vers != 0 and $exifTool->Warn("Untested FPXR version $vers");
1374
- if ($$exifTool{FPXR}) {
1375
- $exifTool->Warn('Multiple FPXR contents lists');
1376
- delete $$exifTool{FPXR};
1377
- }
1378
- my $numEntries = unpack('x7n', $$dataPt);
1379
- my @contents;
1380
- $verbose and $exifTool->VerboseDir('Contents List', $numEntries);
1381
- my $pos = 9;
1382
- my $entry;
1383
- for ($entry = 0; $entry < $numEntries; ++$entry) {
1384
- if ($pos + 4 > $dirLen) {
1385
- $exifTool->Warn('Truncated FPXR contents');
1386
- return 0;
1387
- }
1388
- my ($size, $default) = unpack("x${pos}Na", $$dataPt);
1389
- pos($$dataPt) = $pos + 5;
1390
- # according to the spec, this string is little-endian
1391
- # (very odd, since the size word is big-endian),
1392
- # and the first char must be '/'
1393
- unless ($$dataPt =~ m{\G(/\0(..)*?)\0\0}sg) {
1394
- $exifTool->Warn('Invalid FPXR stream name');
1395
- return 0;
1396
- }
1397
- # convert stream pathname to ascii
1398
- my $name = Image::ExifTool::Decode(undef, $1, 'UCS2', 'II', 'Latin');
1399
- if ($verbose) {
1400
- my $psize = ($size == 0xffffffff) ? 'storage' : "$size bytes";
1401
- $exifTool->VPrint(0," | $entry) Name: '$name' [$psize]\n");
1402
- }
1403
- # remove directory specification
1404
- $name =~ s{.*/}{}s;
1405
- # read storage class ID if necessary
1406
- my $classID;
1407
- if ($size == 0xffffffff) {
1408
- unless ($$dataPt =~ m{(.{16})}sg) {
1409
- $exifTool->Warn('Truncated FPXR storage class ID');
1410
- return 0;
1411
- }
1412
- # unpack class ID in case we want to use it sometime
1413
- $classID = Image::ExifTool::ASF::GetGUID($1);
1414
- }
1415
- # update position in list
1416
- $pos = pos($$dataPt);
1417
- # add to our contents list
1418
- push @contents, {
1419
- Name => $name,
1420
- Size => $size,
1421
- Default => $default,
1422
- ClassID => $classID,
1423
- };
1424
- }
1425
- # save contents list as $exifTool member variable
1426
- # (must do this last so we don't save list on error)
1427
- $$exifTool{FPXR} = \@contents;
1428
-
1429
- } elsif ($type == 2) { # a "Stream Data" segment
1430
-
1431
- # get the contents list index and stream data offset
1432
- my ($index, $offset) = unpack('x7nN', $$dataPt);
1433
- my $fpxr = $$exifTool{FPXR};
1434
- if ($fpxr and $$fpxr[$index]) {
1435
- my $obj = $$fpxr[$index];
1436
- # extract stream data (after 13-byte header)
1437
- if (not defined $$obj{Stream}) {
1438
- # ignore offset for first segment of this type
1439
- # (in my sample images, this isn't always zero as one would expect)
1440
- $$obj{Stream} = substr($$dataPt, $dirStart+13);
1441
- } else {
1442
- # add data to the stream at the proper offset
1443
- my $pad = $offset - length($$obj{Stream});
1444
- if ($pad >= 0) {
1445
- if ($pad) {
1446
- if ($pad > 0x10000) {
1447
- $exifTool->Warn("Bad FPXR stream offset ($offset)");
1448
- } else {
1449
- # pad with default value to specified offset
1450
- $exifTool->Warn("Padding FPXR stream with $pad default bytes",1);
1451
- $$obj{Stream} .= ($$obj{Default} x $pad);
1452
- }
1453
- }
1454
- # concatenate data with this stream
1455
- $$obj{Stream} .= substr($$dataPt, $dirStart+13);
1456
- } else {
1457
- $exifTool->Warn("Duplicate FPXR stream data at offset $offset");
1458
- substr($$obj{Stream}, $offset, -$pad) = substr($$dataPt, $dirStart+13);
1459
- }
1460
- }
1461
- # save value for this tag if stream is complete
1462
- my $len = length $$obj{Stream};
1463
- if ($len >= $$obj{Size}) {
1464
- if ($verbose) {
1465
- $exifTool->VPrint(0, " + [FPXR stream, Contents index $index, $len bytes]\n");
1466
- }
1467
- if ($len > $$obj{Size}) {
1468
- $exifTool->Warn('Extra data in FPXR segment (truncated)');
1469
- $$obj{Stream} = substr($$obj{Stream}, 0, $$obj{Size});
1470
- }
1471
- my $tag = $$obj{Name};
1472
- my $tagInfo;
1473
- unless ($$tagTablePtr{$tag}) {
1474
- # remove instance number or class ID from tag if necessary
1475
- $tagInfo = $exifTool->GetTagInfo($tagTablePtr, $1) if
1476
- ($tag =~ /(.*) \d{6}$/s and $$tagTablePtr{$1}) or
1477
- ($tag =~ /(.*)_[0-9a-f]{16}$/s and $$tagTablePtr{$1});
1478
- }
1479
- # save the data for this tag
1480
- $exifTool->HandleTag($tagTablePtr, $tag, $$obj{Stream},
1481
- DataPt => \$$obj{Stream},
1482
- TagInfo => $tagInfo,
1483
- );
1484
- delete $$obj{Stream}; # done with this stream
1485
- }
1486
- # hack for improperly stored FujiFilm PreviewImage (stored with no contents list)
1487
- } elsif ($index == 512 and $dirLen > 60 and ($$exifTool{FujiPreview} or
1488
- ($dirLen > 64 and substr($$dataPt, $dirStart+60, 4) eq "\xff\xd8\xff\xdb")))
1489
- {
1490
- # recombine PreviewImage, skipping unknown 60 byte header
1491
- if ($$exifTool{FujiPreview}) {
1492
- $$exifTool{FujiPreview} .= substr($$dataPt, $dirStart+60);
1493
- } else {
1494
- $$exifTool{FujiPreview} = substr($$dataPt, $dirStart+60);
1495
- }
1496
- } else {
1497
- # (Kodak uses index 255 for a free segment in images from some cameras)
1498
- $exifTool->Warn("Unlisted FPXR segment (index $index)") if $index != 255;
1499
- }
1500
-
1501
- } elsif ($type ne 3) { # not a "Reserved" segment
1502
-
1503
- $exifTool->Warn("Unknown FPXR segment (type $type)");
1504
-
1505
- }
1506
-
1507
- # clean up if this was the last FPXR segment
1508
- if ($$dirInfo{LastFPXR}) {
1509
- if ($$exifTool{FPXR}) {
1510
- my $obj;
1511
- my $i = 0;
1512
- foreach $obj (@{$$exifTool{FPXR}}) {
1513
- $exifTool->Warn("Missing stream for FPXR object $i") if defined $$obj{Stream};
1514
- ++$i;
1515
- }
1516
- delete $$exifTool{FPXR}; # delete our temporary variables
1517
- }
1518
- if ($$exifTool{FujiPreview}) {
1519
- $exifTool->FoundTag('PreviewImage', $$exifTool{FujiPreview});
1520
- delete $$exifTool{FujiPreview};
1521
- }
1522
- }
1523
- return 1;
1524
- }
1525
-
1526
- #------------------------------------------------------------------------------
1527
- # Set document number for objects
1528
- # Inputs: 0) object hierarchy hash ref, 1) object index, 2) doc number list ref,
1529
- # 3) doc numbers used at each level, 4) flag set for metadata levels
1530
- sub SetDocNum($$;$$$)
1531
- {
1532
- my ($hier, $index, $doc, $used, $meta) = @_;
1533
- my $obj = $$hier{$index} or return;
1534
- return if exists $$obj{DocNum};
1535
- $$obj{DocNum} = $doc;
1536
- SetDocNum($hier, $$obj{Left}, $doc, $used, $meta) if $$obj{Left};
1537
- SetDocNum($hier, $$obj{Right}, $doc, $used, $meta) if $$obj{Right};
1538
- if (defined $$obj{Child}) {
1539
- $used or $used = [ ];
1540
- my @subDoc;
1541
- push @subDoc, @$doc if $doc;
1542
- # we must dive down 2 levels for each sub-document, so use the
1543
- # $meta flag to add a sub-document level only for every 2nd generation
1544
- if ($meta) {
1545
- my $subNum = ($$used[scalar @subDoc] || 0);
1546
- $$used[scalar @subDoc] = $subNum;
1547
- push @subDoc, $subNum;
1548
- } elsif (@subDoc) {
1549
- $subDoc[-1] = ++$$used[$#subDoc];
1550
- }
1551
- SetDocNum($hier, $$obj{Child}, \@subDoc, $used, not $meta)
1552
- }
1553
- }
1554
-
1555
- #------------------------------------------------------------------------------
1556
- # Extract information from a FlashPix (FPX) file
1557
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref
1558
- # Returns: 1 on success, 0 if this wasn't a valid FPX-format file
1559
- sub ProcessFPX($$)
1560
- {
1561
- my ($exifTool, $dirInfo) = @_;
1562
- my $raf = $$dirInfo{RAF};
1563
- my ($buff, $out, %dumpParms, $oldIndent, $miniStreamBuff);
1564
- my ($tag, %hier, %objIndex);
1565
-
1566
- # read header
1567
- return 0 unless $raf->Read($buff,HDR_SIZE) == HDR_SIZE;
1568
- # check signature
1569
- return 0 unless $buff =~ /^\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1/;
1570
-
1571
- # set FileType initially based on file extension (we may override this later)
1572
- my $fileType = $exifTool->{FILE_EXT};
1573
- $fileType = 'FPX' unless $fileType and $fpxFileType{$fileType};
1574
- $exifTool->SetFileType($fileType);
1575
- SetByteOrder(substr($buff, 0x1c, 2) eq "\xff\xfe" ? 'MM' : 'II');
1576
- my $tagTablePtr = GetTagTable('Image::ExifTool::FlashPix::Main');
1577
- my $verbose = $exifTool->Options('Verbose');
1578
- # copy LargeFileSupport option to RAF for use in LoadChain
1579
- $$raf{LargeFileSupport} = $exifTool->Options('LargeFileSupport');
1580
-
1581
- my $sectSize = 1 << Get16u(\$buff, 0x1e);
1582
- my $miniSize = 1 << Get16u(\$buff, 0x20);
1583
- my $fatCount = Get32u(\$buff, 0x2c); # number of FAT sectors
1584
- my $dirStart = Get32u(\$buff, 0x30); # first directory sector
1585
- my $miniCutoff = Get32u(\$buff, 0x38); # minimum size for big-FAT streams
1586
- my $miniStart = Get32u(\$buff, 0x3c); # first sector of mini-FAT
1587
- my $miniCount = Get32u(\$buff, 0x40); # number of mini-FAT sectors
1588
- my $difStart = Get32u(\$buff, 0x44); # first sector of DIF chain
1589
- my $difCount = Get32u(\$buff, 0x48); # number of DIF sectors
1590
-
1591
- if ($verbose) {
1592
- $out = $exifTool->Options('TextOut');
1593
- $dumpParms{Out} = $out;
1594
- $dumpParms{MaxLen} = 96 if $verbose == 3;
1595
- print $out " Sector size=$sectSize\n FAT: Count=$fatCount\n";
1596
- print $out " DIR: Start=$dirStart\n";
1597
- print $out " MiniFAT: Mini-sector size=$miniSize Start=$miniStart Count=$miniCount Cutoff=$miniCutoff\n";
1598
- print $out " DIF FAT: Start=$difStart Count=$difCount\n";
1599
- }
1600
- #
1601
- # load the FAT
1602
- #
1603
- my $pos = 0x4c;
1604
- my $endPos = length($buff);
1605
- my $fat = '';
1606
- my $fatCountCheck = 0;
1607
- for (;;) {
1608
- while ($pos <= $endPos - 4) {
1609
- my $sect = Get32u(\$buff, $pos);
1610
- $pos += 4;
1611
- next if $sect == FREE_SECT;
1612
- my $offset = $sect * $sectSize + HDR_SIZE;
1613
- my $fatSect;
1614
- unless ($raf->Seek($offset, 0) and
1615
- $raf->Read($fatSect, $sectSize) == $sectSize)
1616
- {
1617
- $exifTool->Error("Error reading FAT from sector $sect");
1618
- return 1;
1619
- }
1620
- $fat .= $fatSect;
1621
- ++$fatCountCheck;
1622
- }
1623
- last if $difStart >= END_OF_CHAIN;
1624
- # read next DIF (Dual Indirect FAT) sector
1625
- my $offset = $difStart * $sectSize + HDR_SIZE;
1626
- unless ($raf->Seek($offset, 0) and $raf->Read($buff, $sectSize) == $sectSize) {
1627
- $exifTool->Error("Error reading DIF sector $difStart");
1628
- return 1;
1629
- }
1630
- # set end of sector information in this DIF
1631
- $pos = 0;
1632
- $endPos = $sectSize - 4;
1633
- # next time around we want to read next DIF in chain
1634
- $difStart = Get32u(\$buff, $endPos);
1635
- }
1636
- if ($fatCountCheck != $fatCount) {
1637
- $exifTool->Warn("Bad number of FAT sectors (expected $fatCount but found $fatCountCheck)");
1638
- }
1639
- #
1640
- # load the mini-FAT and the directory
1641
- #
1642
- my $miniFat = LoadChain($raf, $miniStart, \$fat, $sectSize, HDR_SIZE);
1643
- my $dir = LoadChain($raf, $dirStart, \$fat, $sectSize, HDR_SIZE);
1644
- unless (defined $miniFat and defined $dir) {
1645
- $exifTool->Error('Error reading mini-FAT or directory stream');
1646
- return 1;
1647
- }
1648
- if ($verbose) {
1649
- print $out " FAT [",length($fat)," bytes]:\n";
1650
- Image::ExifTool::HexDump(\$fat, undef, %dumpParms) if $verbose > 2;
1651
- print $out " Mini-FAT [",length($miniFat)," bytes]:\n";
1652
- Image::ExifTool::HexDump(\$miniFat, undef, %dumpParms) if $verbose > 2;
1653
- print $out " Directory [",length($dir)," bytes]:\n";
1654
- Image::ExifTool::HexDump(\$dir, undef, %dumpParms) if $verbose > 2;
1655
- }
1656
- #
1657
- # process the directory
1658
- #
1659
- if ($verbose) {
1660
- $oldIndent = $exifTool->{INDENT};
1661
- $exifTool->{INDENT} .= '| ';
1662
- $exifTool->VerboseDir('FPX', undef, length $dir);
1663
- }
1664
- my $miniStream;
1665
- $endPos = length($dir);
1666
- my $index = 0;
1667
-
1668
- for ($pos=0; $pos<=$endPos-128; $pos+=128, ++$index) {
1669
-
1670
- # get directory entry type
1671
- # (0=invalid, 1=storage, 2=stream, 3=lockbytes, 4=property, 5=root)
1672
- my $type = Get8u(\$dir, $pos + 0x42);
1673
- next if $type == 0; # skip invalid entries
1674
- if ($type > 5) {
1675
- $exifTool->Warn("Invalid directory entry type $type");
1676
- last; # rest of directory is probably garbage
1677
- }
1678
- # get entry name (note: this is supposed to be length in 2-byte
1679
- # characters but this isn't what is done in my sample FPX file, so
1680
- # be very tolerant of this count -- it's null terminated anyway)
1681
- my $len = Get16u(\$dir, $pos + 0x40);
1682
- $len > 32 and $len = 32;
1683
- $tag = Image::ExifTool::Decode(undef, substr($dir,$pos,$len*2), 'UCS2', 'II', 'Latin');
1684
- $tag =~ s/\0.*//s; # truncate at null (in case length was wrong)
1685
-
1686
- my $sect = Get32u(\$dir, $pos + 0x74); # start sector number
1687
- my $size = Get32u(\$dir, $pos + 0x78); # stream length
1688
-
1689
- # load Ministream (referenced from first directory entry)
1690
- unless ($miniStream) {
1691
- $miniStreamBuff = LoadChain($raf, $sect, \$fat, $sectSize, HDR_SIZE);
1692
- unless (defined $miniStreamBuff) {
1693
- $exifTool->Warn('Error loading Mini-FAT stream');
1694
- last;
1695
- }
1696
- $miniStream = new File::RandomAccess(\$miniStreamBuff);
1697
- }
1698
-
1699
- my $tagInfo;
1700
- if ($$tagTablePtr{$tag}) {
1701
- $tagInfo = $exifTool->GetTagInfo($tagTablePtr, $tag);
1702
- } else {
1703
- # remove instance number or class ID from tag if necessary
1704
- $tagInfo = $exifTool->GetTagInfo($tagTablePtr, $1) if
1705
- ($tag =~ /(.*) \d{6}$/s and $$tagTablePtr{$1}) or
1706
- ($tag =~ /(.*)_[0-9a-f]{16}$/s and $$tagTablePtr{$1});
1707
- }
1708
-
1709
- my $lSib = Get32u(\$dir, $pos + 0x44); # left sibling
1710
- my $rSib = Get32u(\$dir, $pos + 0x48); # right sibling
1711
- my $chld = Get32u(\$dir, $pos + 0x4c); # child directory
1712
-
1713
- # save information about object hierachy
1714
- my ($obj, $sub);
1715
- $obj = $hier{$index} or $obj = $hier{$index} = { };
1716
- $$obj{Left} = $lSib unless $lSib == FREE_SECT;
1717
- $$obj{Right} = $rSib unless $rSib == FREE_SECT;
1718
- unless ($chld == FREE_SECT) {
1719
- $$obj{Child} = $chld;
1720
- $sub = $hier{$chld} or $sub = $hier{$chld} = { };
1721
- $$sub{Parent} = $index;
1722
- }
1723
-
1724
- next unless $tagInfo or $verbose;
1725
-
1726
- # load the data for stream types
1727
- my $extra = '';
1728
- my $typeStr = $dirEntryType[$type] || $type;
1729
- if ($typeStr eq 'STREAM') {
1730
- if ($size >= $miniCutoff) {
1731
- # stream is in the main FAT
1732
- $buff = LoadChain($raf, $sect, \$fat, $sectSize, HDR_SIZE);
1733
- } elsif ($size) {
1734
- # stream is in the mini-FAT
1735
- $buff = LoadChain($miniStream, $sect, \$miniFat, $miniSize, 0);
1736
- } else {
1737
- $buff = ''; # an empty stream
1738
- }
1739
- unless (defined $buff) {
1740
- my $name = $tagInfo ? $$tagInfo{Name} : 'unknown';
1741
- $exifTool->Warn("Error reading $name stream");
1742
- $buff = '';
1743
- }
1744
- } elsif ($typeStr eq 'ROOT') {
1745
- $buff = $miniStreamBuff;
1746
- $extra .= ' (Ministream)';
1747
- } else {
1748
- $buff = '';
1749
- undef $size;
1750
- }
1751
- if ($verbose) {
1752
- my $flags = Get8u(\$dir, $pos + 0x43); # 0=red, 1=black
1753
- my $col = { 0 => 'Red', 1 => 'Black' }->{$flags} || $flags;
1754
- $extra .= " Type=$typeStr Flags=$col";
1755
- $extra .= " Left=$lSib" unless $lSib == FREE_SECT;
1756
- $extra .= " Right=$rSib" unless $rSib == FREE_SECT;
1757
- $extra .= " Child=$chld" unless $chld == FREE_SECT;
1758
- $exifTool->VerboseInfo($tag, $tagInfo,
1759
- Index => $index,
1760
- Value => $buff,
1761
- DataPt => \$buff,
1762
- Extra => $extra,
1763
- Size => $size,
1764
- );
1765
- }
1766
- if ($tagInfo and $buff) {
1767
- my $num = $$exifTool{NUM_FOUND};
1768
- my $subdir = $$tagInfo{SubDirectory};
1769
- if ($subdir) {
1770
- my %dirInfo = (
1771
- DataPt => \$buff,
1772
- DirStart => $$subdir{DirStart},
1773
- DirLen => length $buff,
1774
- Multi => $$tagInfo{Multi},
1775
- );
1776
- my $subTablePtr = GetTagTable($$subdir{TagTable});
1777
- $exifTool->ProcessDirectory(\%dirInfo, $subTablePtr, $$subdir{ProcessProc});
1778
- } else {
1779
- $exifTool->FoundTag($tagInfo, $buff);
1780
- }
1781
- # save object index number for all found tags
1782
- my $num2 = $$exifTool{NUM_FOUND};
1783
- $objIndex{++$num} = $index while $num < $num2;
1784
- }
1785
- }
1786
- # set document numbers for tags extracted from embedded documents
1787
- unless ($$exifTool{DOC_NUM}) {
1788
- # initialize document number for all objects, beginning at root (index 0)
1789
- SetDocNum(\%hier, 0);
1790
- # set family 3 group name for all tags in embedded documents
1791
- my $order = $$exifTool{FILE_ORDER};
1792
- my (@pri, $copy, $member);
1793
- foreach $tag (keys %$order) {
1794
- my $num = $$order{$tag};
1795
- next unless defined $num and $objIndex{$num};
1796
- my $obj = $hier{$objIndex{$num}} or next;
1797
- my $docNums = $$obj{DocNum};
1798
- next unless $docNums and @$docNums;
1799
- $$exifTool{TAG_EXTRA}{$tag}{G3} = join '-', @$docNums;
1800
- push @pri, $tag unless $tag =~ / /; # save keys for priority sub-doc tags
1801
- }
1802
- # swap priority sub-document tags with main document tags if they exist
1803
- foreach $tag (@pri) {
1804
- for ($copy=1; ;++$copy) {
1805
- my $key = "$tag ($copy)";
1806
- last unless defined $$exifTool{VALUE}{$key};
1807
- my $extra = $$exifTool{TAG_EXTRA}{$key};
1808
- next if $extra and $$extra{G3}; # not Main if family 3 group is set
1809
- foreach $member ('PRIORITY','VALUE','FILE_ORDER','TAG_INFO','TAG_EXTRA') {
1810
- my $pHash = $$exifTool{$member};
1811
- my $t = $$pHash{$tag};
1812
- $$pHash{$tag} = $$pHash{$key};
1813
- $$pHash{$key} = $t;
1814
- }
1815
- last;
1816
- }
1817
- }
1818
- }
1819
- $exifTool->{INDENT} = $oldIndent if $verbose;
1820
- # try to better identify the file type
1821
- if ($$exifTool{VALUE}{FileType} eq 'FPX') {
1822
- my $val = $$exifTool{CompObjUserType} || $$exifTool{Software};
1823
- if ($val) {
1824
- my %type = ( Word => 'DOC', PowerPoint => 'PPT', Excel => 'XLS' );
1825
- my $pat;
1826
- foreach $pat (sort keys %type) {
1827
- next unless $val =~ /$pat/;
1828
- $exifTool->OverrideFileType($type{$pat});
1829
- last;
1830
- }
1831
- }
1832
- }
1833
- return 1;
1834
- }
1835
-
1836
- 1; # end
1837
-
1838
- __END__
1839
-
1840
- =head1 NAME
1841
-
1842
- Image::ExifTool::FlashPix - Read FlashPix meta information
1843
-
1844
- =head1 SYNOPSIS
1845
-
1846
- This module is used by Image::ExifTool
1847
-
1848
- =head1 DESCRIPTION
1849
-
1850
- This module contains routines required by Image::ExifTool to extract
1851
- FlashPix meta information from FPX images, and from the APP2 FPXR segment of
1852
- JPEG images.
1853
-
1854
- =head1 AUTHOR
1855
-
1856
- Copyright 2003-2012, Phil Harvey (phil at owl.phy.queensu.ca)
1857
-
1858
- This library is free software; you can redistribute it and/or modify it
1859
- under the same terms as Perl itself.
1860
-
1861
- =head1 REFERENCES
1862
-
1863
- =over 4
1864
-
1865
- =item L<http://www.exif.org/Exif2-2.PDF>
1866
-
1867
- =item L<http://www.graphcomp.com/info/specs/livepicture/fpx.pdf>
1868
-
1869
- =item L<http://search.cpan.org/~jdb/libwin32/>
1870
-
1871
- =item L<http://msdn.microsoft.com/en-us/library/aa380374.aspx>
1872
-
1873
- =back
1874
-
1875
- =head1 SEE ALSO
1876
-
1877
- L<Image::ExifTool::TagNames/FlashPix Tags>,
1878
- L<Image::ExifTool::TagNames/OOXML Tags>,
1879
- L<Image::ExifTool(3pm)|Image::ExifTool>
1880
-
1881
- =cut
1882
-