exiftool_vendored 13.08.0 → 13.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (213) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +60 -2
  3. data/bin/MANIFEST +2 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +3 -3
  7. data/bin/exiftool +229 -158
  8. data/bin/lib/File/RandomAccess.pm +1 -1
  9. data/bin/lib/File/RandomAccess.pod +2 -2
  10. data/bin/lib/Image/ExifTool/AAC.pm +1 -1
  11. data/bin/lib/Image/ExifTool/AES.pm +1 -1
  12. data/bin/lib/Image/ExifTool/AFCP.pm +1 -1
  13. data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  14. data/bin/lib/Image/ExifTool/APE.pm +1 -1
  15. data/bin/lib/Image/ExifTool/APP12.pm +1 -1
  16. data/bin/lib/Image/ExifTool/ASF.pm +1 -1
  17. data/bin/lib/Image/ExifTool/Apple.pm +10 -8
  18. data/bin/lib/Image/ExifTool/Audible.pm +1 -1
  19. data/bin/lib/Image/ExifTool/BMP.pm +1 -1
  20. data/bin/lib/Image/ExifTool/BPG.pm +1 -1
  21. data/bin/lib/Image/ExifTool/BZZ.pm +1 -1
  22. data/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
  23. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +14 -6
  24. data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
  25. data/bin/lib/Image/ExifTool/Canon.pm +8 -4
  26. data/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
  27. data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  28. data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
  29. data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
  30. data/bin/lib/Image/ExifTool/Casio.pm +1 -1
  31. data/bin/lib/Image/ExifTool/Charset.pm +1 -1
  32. data/bin/lib/Image/ExifTool/DICOM.pm +1 -1
  33. data/bin/lib/Image/ExifTool/DJI.pm +96 -45
  34. data/bin/lib/Image/ExifTool/DNG.pm +1 -1
  35. data/bin/lib/Image/ExifTool/DPX.pm +1 -1
  36. data/bin/lib/Image/ExifTool/DV.pm +1 -1
  37. data/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
  38. data/bin/lib/Image/ExifTool/DjVu.pm +1 -1
  39. data/bin/lib/Image/ExifTool/EXE.pm +123 -32
  40. data/bin/lib/Image/ExifTool/Exif.pm +7 -4
  41. data/bin/lib/Image/ExifTool/FITS.pm +1 -1
  42. data/bin/lib/Image/ExifTool/FLAC.pm +1 -1
  43. data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
  44. data/bin/lib/Image/ExifTool/FLIR.pm +1 -1
  45. data/bin/lib/Image/ExifTool/Fixup.pm +1 -1
  46. data/bin/lib/Image/ExifTool/Flash.pm +1 -1
  47. data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
  48. data/bin/lib/Image/ExifTool/Font.pm +1 -1
  49. data/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
  50. data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -1
  51. data/bin/lib/Image/ExifTool/GE.pm +1 -1
  52. data/bin/lib/Image/ExifTool/GIF.pm +1 -1
  53. data/bin/lib/Image/ExifTool/GIMP.pm +1 -1
  54. data/bin/lib/Image/ExifTool/GM.pm +1 -1
  55. data/bin/lib/Image/ExifTool/GPS.pm +1 -1
  56. data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
  57. data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  58. data/bin/lib/Image/ExifTool/Geolocation.pm +1 -1
  59. data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
  60. data/bin/lib/Image/ExifTool/GoPro.pm +1 -1
  61. data/bin/lib/Image/ExifTool/H264.pm +1 -1
  62. data/bin/lib/Image/ExifTool/HP.pm +1 -1
  63. data/bin/lib/Image/ExifTool/HTML.pm +1 -1
  64. data/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
  65. data/bin/lib/Image/ExifTool/ICC_Profile.pm +81 -2
  66. data/bin/lib/Image/ExifTool/ICO.pm +1 -1
  67. data/bin/lib/Image/ExifTool/ID3.pm +1 -1
  68. data/bin/lib/Image/ExifTool/IPTC.pm +8 -5
  69. data/bin/lib/Image/ExifTool/ISO.pm +1 -1
  70. data/bin/lib/Image/ExifTool/ITC.pm +1 -1
  71. data/bin/lib/Image/ExifTool/Import.pm +5 -4
  72. data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  73. data/bin/lib/Image/ExifTool/InfiRay.pm +1 -1
  74. data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
  75. data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  76. data/bin/lib/Image/ExifTool/JSON.pm +1 -1
  77. data/bin/lib/Image/ExifTool/JVC.pm +1 -1
  78. data/bin/lib/Image/ExifTool/Jpeg2000.pm +3 -2
  79. data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
  80. data/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  81. data/bin/lib/Image/ExifTool/LIF.pm +1 -1
  82. data/bin/lib/Image/ExifTool/LNK.pm +1 -1
  83. data/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
  84. data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
  85. data/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  86. data/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  87. data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  88. data/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
  89. data/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
  90. data/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
  91. data/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
  92. data/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
  93. data/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
  94. data/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
  95. data/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
  96. data/bin/lib/Image/ExifTool/Lang/sk.pm +1 -1
  97. data/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
  98. data/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
  99. data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  100. data/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  101. data/bin/lib/Image/ExifTool/Leaf.pm +1 -1
  102. data/bin/lib/Image/ExifTool/LigoGPS.pm +408 -0
  103. data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  104. data/bin/lib/Image/ExifTool/M2TS.pm +22 -13
  105. data/bin/lib/Image/ExifTool/MIE.pm +1 -1
  106. data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
  107. data/bin/lib/Image/ExifTool/MIFF.pm +1 -1
  108. data/bin/lib/Image/ExifTool/MISB.pm +1 -1
  109. data/bin/lib/Image/ExifTool/MNG.pm +1 -1
  110. data/bin/lib/Image/ExifTool/MOI.pm +1 -1
  111. data/bin/lib/Image/ExifTool/MPC.pm +1 -1
  112. data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  113. data/bin/lib/Image/ExifTool/MPF.pm +1 -1
  114. data/bin/lib/Image/ExifTool/MRC.pm +1 -1
  115. data/bin/lib/Image/ExifTool/MWG.pm +1 -1
  116. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  117. data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
  118. data/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
  119. data/bin/lib/Image/ExifTool/Matroska.pm +12 -4
  120. data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  121. data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  122. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  123. data/bin/lib/Image/ExifTool/Motorola.pm +1 -1
  124. data/bin/lib/Image/ExifTool/Nikon.pm +164 -35
  125. data/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
  126. data/bin/lib/Image/ExifTool/NikonCustom.pm +1 -1
  127. data/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
  128. data/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
  129. data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
  130. data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  131. data/bin/lib/Image/ExifTool/Olympus.pm +1 -1
  132. data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
  133. data/bin/lib/Image/ExifTool/Opus.pm +1 -1
  134. data/bin/lib/Image/ExifTool/Other.pm +1 -1
  135. data/bin/lib/Image/ExifTool/PCX.pm +1 -1
  136. data/bin/lib/Image/ExifTool/PDF.pm +1 -1
  137. data/bin/lib/Image/ExifTool/PGF.pm +1 -1
  138. data/bin/lib/Image/ExifTool/PICT.pm +1 -1
  139. data/bin/lib/Image/ExifTool/PLIST.pm +3 -3
  140. data/bin/lib/Image/ExifTool/PLUS.pm +1 -1
  141. data/bin/lib/Image/ExifTool/PNG.pm +3 -2
  142. data/bin/lib/Image/ExifTool/PPM.pm +1 -1
  143. data/bin/lib/Image/ExifTool/PSP.pm +1 -1
  144. data/bin/lib/Image/ExifTool/Palm.pm +1 -1
  145. data/bin/lib/Image/ExifTool/Panasonic.pm +20 -2
  146. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  147. data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  148. data/bin/lib/Image/ExifTool/Pentax.pm +1 -1
  149. data/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
  150. data/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
  151. data/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  152. data/bin/lib/Image/ExifTool/Photoshop.pm +2 -1
  153. data/bin/lib/Image/ExifTool/PostScript.pm +1 -1
  154. data/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
  155. data/bin/lib/Image/ExifTool/Protobuf.pm +24 -14
  156. data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
  157. data/bin/lib/Image/ExifTool/QuickTime.pm +94 -26
  158. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +20 -302
  159. data/bin/lib/Image/ExifTool/README +4 -0
  160. data/bin/lib/Image/ExifTool/RIFF.pm +1 -1
  161. data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
  162. data/bin/lib/Image/ExifTool/RTF.pm +1 -1
  163. data/bin/lib/Image/ExifTool/Radiance.pm +1 -1
  164. data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  165. data/bin/lib/Image/ExifTool/Real.pm +1 -1
  166. data/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
  167. data/bin/lib/Image/ExifTool/Red.pm +1 -1
  168. data/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
  169. data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
  170. data/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
  171. data/bin/lib/Image/ExifTool/Scalado.pm +1 -1
  172. data/bin/lib/Image/ExifTool/Shift.pl +1 -1
  173. data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
  174. data/bin/lib/Image/ExifTool/Sigma.pm +1 -1
  175. data/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  176. data/bin/lib/Image/ExifTool/Sony.pm +1 -1
  177. data/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
  178. data/bin/lib/Image/ExifTool/Stim.pm +1 -1
  179. data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
  180. data/bin/lib/Image/ExifTool/TagLookup.pm +14 -5
  181. data/bin/lib/Image/ExifTool/TagNames.pod +106 -34
  182. data/bin/lib/Image/ExifTool/Text.pm +1 -1
  183. data/bin/lib/Image/ExifTool/Theora.pm +1 -1
  184. data/bin/lib/Image/ExifTool/Torrent.pm +1 -1
  185. data/bin/lib/Image/ExifTool/Unknown.pm +1 -1
  186. data/bin/lib/Image/ExifTool/VCard.pm +1 -1
  187. data/bin/lib/Image/ExifTool/Validate.pm +1 -1
  188. data/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
  189. data/bin/lib/Image/ExifTool/WPG.pm +1 -1
  190. data/bin/lib/Image/ExifTool/WTV.pm +1 -1
  191. data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  192. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  193. data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  194. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
  195. data/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
  196. data/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  197. data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
  198. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +48 -12
  199. data/bin/lib/Image/ExifTool/WriteRIFF.pl +1 -1
  200. data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
  201. data/bin/lib/Image/ExifTool/Writer.pl +25 -13
  202. data/bin/lib/Image/ExifTool/XISF.pm +1 -1
  203. data/bin/lib/Image/ExifTool/XMP.pm +1 -1
  204. data/bin/lib/Image/ExifTool/XMP2.pl +1 -1
  205. data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  206. data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  207. data/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
  208. data/bin/lib/Image/ExifTool/iWork.pm +1 -1
  209. data/bin/lib/Image/ExifTool.pm +20 -11
  210. data/bin/lib/Image/ExifTool.pod +55 -40
  211. data/bin/perl-Image-ExifTool.spec +1 -1
  212. data/lib/exiftool_vendored/version.rb +1 -1
  213. metadata +3 -2
@@ -482,23 +482,26 @@ sub WriteKeys($$$)
482
482
  sub WriteItemInfo($$$)
483
483
  {
484
484
  my ($et, $dirInfo, $outfile) = @_;
485
- my $boxPos = $$dirInfo{BoxPos}; # hash of [length,position] for each box
485
+ my $boxPos = $$dirInfo{BoxPos}; # hash of [position,length,irefVer(iref only)] for box in $outfile
486
486
  my $raf = $$et{RAF};
487
487
  my $items = $$et{ItemInfo};
488
- my (%did, @mdatEdit, $name);
488
+ my (%did, @mdatEdit, $name, $tmap);
489
489
 
490
490
  return () unless $items and $raf;
491
491
 
492
492
  # extract information from EXIF/XMP metadata items
493
493
  my $primary = $$et{PrimaryItem};
494
494
  my $curPos = $raf->Tell();
495
+ my $lastID = 0;
495
496
  my $id;
496
497
  foreach $id (sort { $a <=> $b } keys %$items) {
498
+ $lastID = $id;
497
499
  $primary = $id unless defined $primary; # assume primary is lowest-number item if pitm missing
498
500
  my $item = $$items{$id};
499
501
  # only edit primary EXIF/XMP metadata
500
502
  next unless $$item{RefersTo} and $$item{RefersTo}{$primary};
501
503
  my $type = $$item{ContentType} || $$item{Type} || next;
504
+ $tmap = $id if $type eq 'tmap'; # save ID of primary 'tmap' item (tone-mapped image)
502
505
  # get ExifTool name for this item
503
506
  $name = { Exif => 'EXIF', 'application/rdf+xml' => 'XMP' }->{$type};
504
507
  next unless $name; # only care about EXIF and XMP
@@ -553,6 +556,7 @@ sub WriteItemInfo($$$)
553
556
  }
554
557
  }
555
558
  my ($hdr, $subTable, $proc);
559
+ my $strt = 0;
556
560
  if ($name eq 'EXIF') {
557
561
  if (not length $buff) {
558
562
  # create EXIF from scratch
@@ -562,6 +566,7 @@ sub WriteItemInfo($$$)
562
566
  $hdr = '';
563
567
  } elsif (length($buff) >= 4 and length($buff) >= 4 + unpack('N',$buff)) {
564
568
  $hdr = substr($buff, 0, 4 + unpack('N',$buff));
569
+ $strt = length $hdr;
565
570
  } else {
566
571
  $et->Warn('Invalid Exif header');
567
572
  next;
@@ -575,8 +580,8 @@ sub WriteItemInfo($$$)
575
580
  my %dirInfo = (
576
581
  DataPt => \$buff,
577
582
  DataLen => length $buff,
578
- DirStart => length $hdr,
579
- DirLen => length($buff) - length $hdr,
583
+ DirStart => $strt,
584
+ DirLen => length($buff) - $strt,
580
585
  );
581
586
  my $changed = $$et{CHANGED};
582
587
  my $newVal = $et->WriteDirectory(\%dirInfo, $subTable, $proc);
@@ -700,8 +705,10 @@ sub WriteItemInfo($$$)
700
705
  $type = "Exif\0";
701
706
  $mime = '';
702
707
  }
703
- my $id = 1;
704
- ++$id while $$items{$id} or $usedID{$id}; # find next unused item ID
708
+ my $id = ++$lastID; # use next highest available ID (so ID's in iinf are in order)
709
+ #[retracted] # create new item information hash to save infe box in case we need it for sorting
710
+ #[retracted] my $item = $$items{$id} = { };
711
+ # add new infe entry to iinf box
705
712
  my $n = length($type) + length($mime) + length($enc) + 16;
706
713
  if ($id < 0x10000) {
707
714
  $add{iinf} .= pack('Na4CCCCnn', $n, 'infe', 2, 0, 0, 1, $id, 0) . $type . $mime . $enc;
@@ -709,11 +716,14 @@ sub WriteItemInfo($$$)
709
716
  $n += 2;
710
717
  $add{iinf} .= pack('Na4CCCCNn', $n, 'infe', 3, 0, 0, 1, $id, 0) . $type . $mime . $enc;
711
718
  }
712
- # add new cdsc to iref
719
+ #[retracted] $add{iinf} .= $$item{infe};
720
+ # add new cdsc to iref (also refer to primary 'tmap' if it exists)
713
721
  if ($irefVer) {
714
- $add{iref} .= pack('Na4NnN', 18, 'cdsc', $id, 1, $primary);
722
+ my ($fmt, $siz, $num) = defined $tmap ? ('N', 22, 2) : ('', 18, 1);
723
+ $add{iref} .= pack('Na4NnN'.$fmt, $siz, 'cdsc', $id, $num, $primary, $tmap);
715
724
  } else {
716
- $add{iref} .= pack('Na4nnn', 14, 'cdsc', $id, 1, $primary);
725
+ my ($fmt, $siz, $num) = defined $tmap ? ('n', 16, 2) : ('', 14, 1);
726
+ $add{iref} .= pack('Na4nnn'.$fmt, $siz, 'cdsc', $id, $num, $primary, $tmap);
717
727
  }
718
728
  # add new entry to iloc table (see ISO14496-12:2015 pg.79)
719
729
  my $ilocVer = Get8u($outfile, $$boxPos{iloc}[0] + 8);
@@ -778,8 +788,9 @@ sub WriteItemInfo($$$)
778
788
  my $added = 0;
779
789
  my $tag;
780
790
  foreach $tag (sort { $$boxPos{$a}[0] <=> $$boxPos{$b}[0] } keys %$boxPos) {
791
+ $$boxPos{$tag}[0] += $added;
781
792
  next unless $add{$tag};
782
- my $pos = $$boxPos{$tag}[0] + $added;
793
+ my $pos = $$boxPos{$tag}[0];
783
794
  unless ($$boxPos{$tag}[1]) {
784
795
  $tag eq 'iref' or $et->Error('Internal error adding iref box'), last;
785
796
  # create new iref box
@@ -826,9 +837,34 @@ sub WriteItemInfo($$$)
826
837
  }
827
838
  # add new entries to this box (or add pitm after hdlr)
828
839
  substr($$outfile, $pos + $$boxPos{$tag}[1], 0) = $add{$tag};
840
+ $$boxPos{$tag}[1] += length $add{$tag};
829
841
  $added += length $add{$tag}; # positions are shifted by length of new entries
830
842
  }
831
843
  }
844
+ #[This sorting idea was retracted because just sorting 'iinf' wasn't sufficient to
845
+ # repair the problem where an out-of-order ID was added -- Apple Preview still
846
+ # ignores the gain-map image. It looks like either or both 'iref' and 'iloc' must
847
+ # also be sorted by ID, although the spec doesn't mention this]
848
+ #[retracted] # sort infe entries in iinf box if necessary
849
+ #[retracted] if ($$et{ItemsNotSorted}) {
850
+ #[retracted] if ($$boxPos{iinf}) {
851
+ #[retracted] my $iinfVer = Get8u($outfile, $$boxPos{iinf}[0] + 8);
852
+ #[retracted] my $off = $iinfVer == 0 ? 14 : 16; # offset to first infe item
853
+ #[retracted] my $sorted = ''; # sorted iinf payload
854
+ #[retracted] $sorted .= $$items{$_}{infe} || '' foreach sort { $a <=> $b } keys %$items;
855
+ #[retracted] if (length $sorted == $$boxPos{iinf}[1]-$off) {
856
+ #[retracted] # replace with sorted infe entries
857
+ #[retracted] substr($$outfile, $$boxPos{iinf}[0] + $off, length $sorted) = $sorted;
858
+ #[retracted] $et->Warn('Item info entries are out of order. Fixed.');
859
+ #[retracted] ++$$et{CHANGED};
860
+ #[retracted] } else {
861
+ #[retracted] $et->Warn('Error sorting item info entries');
862
+ #[retracted] }
863
+ #[retracted] } else {
864
+ #[retracted] $et->Warn('Item info entries are out of order');
865
+ #[retracted] }
866
+ #[retracted] delete $$et{ItemsNotSorted};
867
+ #[retracted] }
832
868
  delete $$et{ItemInfo};
833
869
  return @mdatEdit ? \@mdatEdit : undef;
834
870
  }
@@ -1129,7 +1165,7 @@ sub WriteQuickTime($$$)
1129
1165
  next;
1130
1166
  }
1131
1167
  }
1132
- undef $tagInfo if $tagInfo and $$tagInfo{Unknown};
1168
+ undef $tagInfo if $tagInfo and $$tagInfo{AddedUnknown};
1133
1169
 
1134
1170
  if ($tagInfo and (not defined $$tagInfo{Writable} or $$tagInfo{Writable})) {
1135
1171
  my $subdir = $$tagInfo{SubDirectory};
@@ -2100,7 +2136,7 @@ QuickTime-based file formats like MOV and MP4.
2100
2136
 
2101
2137
  =head1 AUTHOR
2102
2138
 
2103
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
2139
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2104
2140
 
2105
2141
  This library is free software; you can redistribute it and/or modify it
2106
2142
  under the same terms as Perl itself.
@@ -372,7 +372,7 @@ Currently writes only WebP files.
372
372
 
373
373
  =head1 AUTHOR
374
374
 
375
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
375
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
376
376
 
377
377
  This library is free software; you can redistribute it and/or modify it
378
378
  under the same terms as Perl itself.
@@ -1651,7 +1651,7 @@ This file contains routines to write XMP metadata.
1651
1651
 
1652
1652
  =head1 AUTHOR
1653
1653
 
1654
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
1654
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
1655
1655
 
1656
1656
  This library is free software; you can redistribute it and/or modify it
1657
1657
  under the same terms as Perl itself.
@@ -1297,12 +1297,13 @@ sub SetNewValuesFromFile($$;@)
1297
1297
  foreach (qw(ByteUnit Charset CharsetEXIF CharsetFileName CharsetID3 CharsetIPTC
1298
1298
  CharsetPhotoshop Composite DateFormat Debug EncodeHangs Escape ExtendedXMP
1299
1299
  ExtractEmbedded FastScan Filter FixBase Geolocation GeolocAltNames
1300
- GeolocFeature GeolocMinPop GeolocMaxDist GlobalTimeShift HexTagIDs
1301
- IgnoreGroups IgnoreMinorErrors IgnoreTags ImageHashType Lang
1302
- LargeFileSupport LigoGPSScale ListItem ListSep MDItemTags MissingTagValue
1303
- NoPDFList NoWarning Password PrintConv QuickTimeUTC RequestTags SaveFormat
1304
- SavePath ScanForXMP StructFormat SystemTags TimeZone Unknown UserParam
1305
- Validate WindowsLongPath WindowsWideFile XAttrTags XMPAutoConv))
1300
+ GeolocFeature GeolocMinPop GeolocMaxDist GlobalTimeShift GPSQuadrant
1301
+ HexTagIDs IgnoreGroups IgnoreMinorErrors IgnoreTags ImageHashType Lang
1302
+ LargeFileSupport LigoGPSScale ListItem ListSep MDItemTags
1303
+ MissingTagValue NoPDFList NoWarning Password PrintConv QuickTimeUTC
1304
+ RequestTags SaveFormat SavePath ScanForXMP StructFormat SystemTags
1305
+ TimeZone Unknown UserParam Validate WindowsLongPath WindowsWideFile
1306
+ XAttrTags XMPAutoConv))
1306
1307
  {
1307
1308
  $srcExifTool->Options($_ => $$options{$_});
1308
1309
  }
@@ -4993,7 +4994,7 @@ my $strptimeLib; # strptime library name if available
4993
4994
  sub InverseDateTime($$;$$)
4994
4995
  {
4995
4996
  my ($self, $val, $tzFlag, $dateOnly) = @_;
4996
- my ($rtnVal, $tz);
4997
+ my ($rtnVal, $tz, $fs);
4997
4998
  my $fmt = $$self{OPTIONS}{DateFormat};
4998
4999
  # strip off timezone first if it exists
4999
5000
  if (not $fmt and $val =~ s/([-+])(\d{1,2}):?(\d{2})\s*(DST)?$//i) {
@@ -5019,8 +5020,17 @@ sub InverseDateTime($$;$$)
5019
5020
  $strptimeLib = '';
5020
5021
  }
5021
5022
  }
5022
- # handle factional seconds (%f), but only at the end of the string
5023
- my $fs = ($fmt =~ s/%f$// and $val =~ s/(\.\d+)\s*$//) ? $1 : '';
5023
+ # handle fractional seconds (%f) and time zone (%z)
5024
+ ($fs, $tz) = ('', '');
5025
+ if ($fmt =~ /%(f|:?z)/) {
5026
+ if ($fmt =~ s/(.*[^%])%f/$1/) {
5027
+ $fs = $2 if $val =~ s/(.*)(\.\d+)/$1/; # (take last .### as fractional seconds)
5028
+ }
5029
+ if ($fmt =~ s/(.*[^%])%(:?)z/$1/) {
5030
+ my $colon = $2;
5031
+ $tz = "$2:$3" if $val =~ s/(.*)([-+]\d{2})$colon(\d{2})/$1/;
5032
+ }
5033
+ }
5024
5034
  my ($lib, $wrn, @a);
5025
5035
  TryLib: for ($lib=$strptimeLib; ; $lib='') {
5026
5036
  # handle %s format ourself (not supported in Fedora, see forum15032)
@@ -5065,7 +5075,7 @@ TryLib: for ($lib=$strptimeLib; ; $lib='') {
5065
5075
  $a[$i] = "0$a[$i]"; # pad to 2 digits if necessary
5066
5076
  }
5067
5077
  }
5068
- $val = join(':', @a[5,4,3]) . ' ' . join(':', @a[2,1,0]) . $fs;
5078
+ $val = join(':', @a[5,4,3]) . ' ' . join(':', @a[2,1,0]) . $fs . $tz;
5069
5079
  last;
5070
5080
  }
5071
5081
  }
@@ -5077,7 +5087,9 @@ TryLib: for ($lib=$strptimeLib; ; $lib='') {
5077
5087
  my $ss = $a[4]; # get SS
5078
5088
  push @a, '00' while @a < 5; # add MM, SS if not given
5079
5089
  # get sub-seconds if they exist (must be after SS, and have leading ".")
5080
- my $fs = (@a > 5 and $val =~ /(\.\d+)\s*$/) ? $1 : '';
5090
+ unless ($fmt) {
5091
+ $fs = (@a > 5 and $val =~ /(\.\d+)\s*$/) ? $1 : '';
5092
+ }
5081
5093
  # add/remove timezone if necessary
5082
5094
  if ($tzFlag) {
5083
5095
  if (not $tz) {
@@ -6976,7 +6988,7 @@ sub SetFileTime($$;$$$$)
6976
6988
  $mtime = $m unless defined $mtime;
6977
6989
  $success = eval { utime($atime, $mtime, $file) } if defined $atime and defined $mtime;
6978
6990
  }
6979
- $self->Warn('Error opening file for update') unless $success;
6991
+ $self->Warn('Error updating file time') unless $success;
6980
6992
  return $success;
6981
6993
  }
6982
6994
  $saveFile = $file;
@@ -7365,7 +7377,7 @@ used routines.
7365
7377
 
7366
7378
  =head1 AUTHOR
7367
7379
 
7368
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
7380
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
7369
7381
 
7370
7382
  This library is free software; you can redistribute it and/or modify it
7371
7383
  under the same terms as Perl itself.
@@ -163,7 +163,7 @@ information from XISF (Extensible Image Serialization Format) images.
163
163
 
164
164
  =head1 AUTHOR
165
165
 
166
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
166
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
167
167
 
168
168
  This library is free software; you can redistribute it and/or modify it
169
169
  under the same terms as Perl itself.
@@ -4582,7 +4582,7 @@ information.
4582
4582
 
4583
4583
  =head1 AUTHOR
4584
4584
 
4585
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
4585
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
4586
4586
 
4587
4587
  This library is free software; you can redistribute it and/or modify it
4588
4588
  under the same terms as Perl itself.
@@ -2427,7 +2427,7 @@ This file contains definitions for less common XMP namespaces.
2427
2427
 
2428
2428
  =head1 AUTHOR
2429
2429
 
2430
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
2430
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
2431
2431
 
2432
2432
  This library is free software; you can redistribute it and/or modify it
2433
2433
  under the same terms as Perl itself.
@@ -944,7 +944,7 @@ information.
944
944
 
945
945
  =head1 AUTHOR
946
946
 
947
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
947
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
948
948
 
949
949
  This library is free software; you can redistribute it and/or modify it
950
950
  under the same terms as Perl itself.
@@ -840,7 +840,7 @@ Electronic Publication (EPUB), and Sketch design files (SKETCH).
840
840
 
841
841
  =head1 AUTHOR
842
842
 
843
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
843
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
844
844
 
845
845
  This library is free software; you can redistribute it and/or modify it
846
846
  under the same terms as Perl itself.
@@ -220,7 +220,7 @@ metadata from Zeiss Integrated Software RAW (ZISRAW) CZI files.
220
220
 
221
221
  =head1 AUTHOR
222
222
 
223
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
223
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
224
224
 
225
225
  This library is free software; you can redistribute it and/or modify it
226
226
  under the same terms as Perl itself.
@@ -215,7 +215,7 @@ information from Apple iWork '09 XML+ZIP files.
215
215
 
216
216
  =head1 AUTHOR
217
217
 
218
- Copyright 2003-2024, Phil Harvey (philharvey66 at gmail.com)
218
+ Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
219
219
 
220
220
  This library is free software; you can redistribute it and/or modify it
221
221
  under the same terms as Perl itself.
@@ -8,7 +8,7 @@
8
8
  # Revisions: Nov. 12/2003 - P. Harvey Created
9
9
  # (See html/history.html for revision history)
10
10
  #
11
- # Legal: Copyright (c) 2003-2024, Phil Harvey (philharvey66 at gmail.com)
11
+ # Legal: Copyright (c) 2003-2025, Phil Harvey (philharvey66 at gmail.com)
12
12
  # This library is free software; you can redistribute it and/or
13
13
  # modify it under the same terms as Perl itself.
14
14
  #------------------------------------------------------------------------------
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
29
29
  %jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
30
30
  %static_vars $advFmtSelf);
31
31
 
32
- $VERSION = '13.08';
32
+ $VERSION = '13.12';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -154,10 +154,10 @@ sub ReadValue($$$;$$$);
154
154
  Matroska::StdTag MOI MXF DV Flash Flash::FLV Real::Media Real::Audio
155
155
  Real::Metafile Red RIFF AIFF ASF WTV DICOM FITS XISF MIE JSON HTML XMP::SVG
156
156
  Palm Palm::MOBI Palm::EXTH Torrent EXE EXE::PEVersion EXE::PEString
157
- EXE::MachO EXE::PEF EXE::ELF EXE::AR EXE::CHM LNK Font VCard Text
158
- VCard::VCalendar VCard::VNote RSRC Rawzor ZIP ZIP::GZIP ZIP::RAR ZIP::RAR5
159
- RTF OOXML iWork ISO FLIR::AFF FLIR::FPF MacOS MacOS::MDItem
160
- FlashPix::DocTable
157
+ EXE::DebugRSDS EXE::DebugNB10 EXE::Misc EXE::MachO EXE::PEF EXE::ELF EXE::AR
158
+ EXE::CHM LNK Font VCard Text VCard::VCalendar VCard::VNote RSRC Rawzor ZIP
159
+ ZIP::GZIP ZIP::RAR ZIP::RAR5 RTF OOXML iWork ISO FLIR::AFF FLIR::FPF MacOS
160
+ MacOS::MDItem FlashPix::DocTable
161
161
  );
162
162
 
163
163
  # alphabetical list of current Lang modules
@@ -1126,6 +1126,7 @@ my @availableOptions = (
1126
1126
  [ 'GeoMinSats', undef, 'geotag minimum satellites' ],
1127
1127
  [ 'GeoSpeedRef', undef, 'geotag GPSSpeedRef' ],
1128
1128
  [ 'GlobalTimeShift', undef, 'apply time shift to all extracted date/time values' ],
1129
+ [ 'GPSQuadrant', undef, 'quadrant for GPS if not otherwise known' ],
1129
1130
  [ 'Group#', undef, 'return tags for specified groups in family #' ],
1130
1131
  [ 'HexTagIDs', 0, 'use hex tag ID\'s in family 7 group names' ],
1131
1132
  [ 'HtmlDump', 0, 'HTML dump (0-3, higher # = bigger limit)' ],
@@ -2500,6 +2501,7 @@ sub Options($$;@)
2500
2501
  }
2501
2502
  } elsif ($param =~ /^(IgnoreTags|IgnoreGroups)$/) {
2502
2503
  if (defined $newVal) {
2504
+ ref $newVal eq 'HASH' and $$options{$param} = $newVal, next;
2503
2505
  # parse list from delimited string if necessary
2504
2506
  my @ignoreList = (ref $newVal eq 'ARRAY') ? @$newVal : ($newVal =~ /[-\w?*:#]+/g);
2505
2507
  ExpandShortcuts(\@ignoreList) if $param eq 'IgnoreTags';
@@ -6551,11 +6553,13 @@ sub ConvertDateTime($$)
6551
6553
  $fmt =~ s/(^|[^%])((%%)*)%-?\.?\d*f/$1$2$frac/g;
6552
6554
  }
6553
6555
  # parse %z and %s ourself (to handle time zones properly)
6554
- if ($fmt =~ /%[sz]/) {
6556
+ if ($fmt =~ /%:?[sz]/) {
6555
6557
  # use system time zone unless otherwise specified
6556
6558
  $tz = TimeZoneString(\@a, TimeLocal(@a)) if not $tz and eval { require Time::Local };
6557
6559
  # remove colon, setting to UTC if time zone is not numeric
6558
- $tz = ($tz and $tz=~/^([-+]\d{2}):(\d{2})$/) ? "$1$2" : '+0000';
6560
+ $tz = '+00:00' unless $tz and $tz=~/^[-+]\d{2}:\d{2}$/;
6561
+ $fmt =~ s/(^|[^%])((%%)*)%:z/$1$2$tz/g; # convert '%:z' format codes
6562
+ $tz =~ s/://;
6559
6563
  $fmt =~ s/(^|[^%])((%%)*)%z/$1$2$tz/g; # convert '%z' format codes
6560
6564
  if ($fmt =~ /%s/ and eval { require Time::Local }) {
6561
6565
  # calculate seconds since the Epoch, UTC
@@ -8374,7 +8378,11 @@ sub DoProcessTIFF($$;$)
8374
8378
  # save a copy of the EXIF data
8375
8379
  my $dirStart = $$dirInfo{DirStart} || 0;
8376
8380
  my $dirLen = $$dirInfo{DirLen} || (length($$dataPt) - $dirStart);
8377
- $$self{EXIF_DATA} = substr($$dataPt, $dirStart, $dirLen);
8381
+ if ($dirLen > 0 or not $outfile) {
8382
+ $$self{EXIF_DATA} = substr($$dataPt, $dirStart, $dirLen);
8383
+ } else {
8384
+ delete $$self{EXIF_DATA}; # create from scratch;
8385
+ }
8378
8386
  $self->VerboseDir('TIFF') if $$self{OPTIONS}{Verbose} and length($$self{INDENT}) > 2;
8379
8387
  } elsif ($outfile) {
8380
8388
  delete $$self{EXIF_DATA}; # create from scratch
@@ -8961,8 +8969,9 @@ sub GetTagInfo($$$;$$$)
8961
8969
  next;
8962
8970
  }
8963
8971
  }
8964
- # don't return Unknown tags unless that option is set (also see forum13716)
8965
- if ($$tagInfo{Unknown} and not $$options{Unknown} and not
8972
+ # don't return Unknown tags unless that option is set or we are writing (also see forum13716)
8973
+ if ($$tagInfo{Unknown} and not $$options{Unknown} and
8974
+ (not $$self{IsWriting} or $$tagInfo{AddedUnknown}) and not
8966
8975
  ($$options{Verbose} or $$self{HTML_DUMP} or
8967
8976
  ($$options{Validate} and not $$tagInfo{AddedUnknown})))
8968
8977
  {
@@ -5,7 +5,7 @@
5
5
  #
6
6
  # URL: https://exiftool.org/
7
7
  #
8
- # Legal: Copyright (c) 2003-2024, Phil Harvey (philharvey66 at gmail.com)
8
+ # Legal: Copyright (c) 2003-2025, Phil Harvey (philharvey66 at gmail.com)
9
9
  # This library is free software; you can redistribute it and/or
10
10
  # modify it under the same terms as Perl itself.
11
11
  #------------------------------------------------------------------------------
@@ -613,8 +613,10 @@ different when copying tags with L</SetNewValuesFromFile>.
613
613
  Format for printing date/time values. See C<strftime> in the L<POSIX>
614
614
  package and L<https://exiftool.org/filename.html#codes> for details about
615
615
  the format string. If the date can not be converted, the value is left
616
- unchanged unless the StrictDate option is set. Timezones are ignored. The
617
- inverse conversion (ie. when calling L</SetNewValue>) is performed only if
616
+ unchanged unless the StrictDate option is set. ExifTool adds a few
617
+ additional format specifiers (C<%f>, C<%s> and C<%z>), see
618
+ L<https://exiftool.org/filename.html#codes> for more details. The inverse
619
+ conversion (ie. when calling L</SetNewValue>) is performed only if
618
620
  POSIX::strptime or Time::Piece is installed. The default setting of undef
619
621
  causes date/time values to remain in standard EXIF format (similar to a
620
622
  DateFormat of "%Y:%m:%d %H:%M:%S").
@@ -825,6 +827,15 @@ determined unambiguously. For example:
825
827
  If the starting tag is not specified, or the specified tag isn't available,
826
828
  then the shift is calculated based on the first shifted tag.
827
829
 
830
+ =item GPSQuadrant
831
+
832
+ This option is used to specify the GPS quadrant in the case where a warning
833
+ was issued because the GPS quadrant couldn't be determined. The value is a
834
+ 2-character code where the first character is 'N' or 'S' and the second
835
+ character is 'E' or 'W' (case insensitive). If this option is not set and
836
+ the quadrant is unknown, a warning is issued and the quadrant is assumed to
837
+ be 'NE'.
838
+
828
839
  =item Group#
829
840
 
830
841
  Extract tags only for specified groups in family # (Group0 assumed if #
@@ -853,7 +864,7 @@ used. Set to 0 for absolute offsets. Default is undef.
853
864
  =item IgnoreGroups
854
865
 
855
866
  Comma-separated list of group names to ignore when reading. The group names
856
- are case insensitive and may be preceeded by a family number. Set to undef
867
+ are case insensitive and may be preceded by a family number. Set to undef
857
868
  to clear the previous IgnoreGroups list. Default is undef.
858
869
 
859
870
  =item IgnoreMinorErrors
@@ -878,7 +889,7 @@ to undef to clear the previous IgnoreTags list. Default is undef.
878
889
 
879
890
  =item ImageHashType
880
891
 
881
- Sets type of hash algorithem used for the ImageDataHash tag calculation.
892
+ Sets type of hash algorithm used for the ImageDataHash tag calculation.
882
893
  Supported options are 'MD5', 'SHA256', and 'SHA512'. Default is 'MD5'.
883
894
 
884
895
  =item Lang
@@ -1019,7 +1030,7 @@ when written. According to the QuickTime specification date/time values
1019
1030
  should be UTC, but many digital cameras store local time instead (presumably
1020
1031
  because they don't know the time zone), so the default is to not convert
1021
1032
  these times (except for Canon CR3 files, which always use UTC times). This
1022
- option also disables the autodetection of incorrect time-zero offsets in
1033
+ option also disables the auto-detection of incorrect time-zero offsets in
1023
1034
  QuickTime date/time values, and enforces a time zero of 1904 as per the
1024
1035
  QuickTime specification.
1025
1036
 
@@ -2559,39 +2570,39 @@ Ducky, EPPIM, EXE, EXIF, ExifIFD, ExifTool, FITS, FLAC, FLIR, File, Flash,
2559
2570
  FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF, GIMP, GM, GPS,
2560
2571
  GSpherical, Garmin, GeoTiff, GlobParamIFD, GoPro, GraphConv, H264, HP, HTC,
2561
2572
  HTML, HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-equiv,
2562
- ICC-chrm, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view, ICC_Profile,
2563
- ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2, ID3v2_3, ID3v2_4, IFD0, IFD1,
2564
- IPTC, IPTC#, ISO, ITC, InfiRay, Insta360, InteropIFD, ItemList, JFIF, JFXX,
2565
- JPEG, JPEG-HDR, JPS, JSON, JUMBF, JVC, Jpeg2000, KDC_IFD, Keys, Kodak,
2566
- KodakBordersIFD, KodakEffectsIFD, KodakIFD, KyoceraRaw, LIGO, LNK, Leaf,
2567
- LeafSubIFD, Leica, Lyrics3, Lytro, M-RAW, M2TS, MAC, MIE-Audio, MIE-Camera,
2568
- MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS, MIE-Geo, MIE-Image,
2569
- MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient, MIE-Preview,
2570
- MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MISB, MNG, MOBI, MOI,
2571
- MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS, MakerNotes, MakerUnknown,
2572
- Matroska, MediaJukebox, Meta, MetaIFD, Microsoft, Minolta, MinoltaRaw,
2573
- Motorola, NITF, Nextbase, Nikon, NikonCapture, NikonCustom, NikonScan,
2574
- NikonSettings, NineEdits, Nintendo, Ocad, Ogg, Olympus, OpenEXR, Opus, PDF,
2575
- PICT, PNG, PNG-cICP, PNG-pHYs, PSP, Palm, Panasonic, PanasonicRaw, Parrot,
2576
- Pentax, PhaseOne, PhotoCD, PhotoMechanic, Photoshop, PictureInfo,
2577
- PostScript, PreviewIFD, PrintIM, ProfileIFD, Qualcomm, QuickTime, RAF, RAF2,
2578
- RIFF, RMETA, RSRC, RTF, Radiance, Rawzor, Real, Real-CONT, Real-MDPR,
2579
- Real-PROP, Real-RA3, Real-RA4, Real-RA5, Real-RJMD, Reconyx, Red, Ricoh,
2580
- SEAL, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG, Samsung, Sanyo, Scalado,
2581
- Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD, System, Theora, Torrent,
2582
- Track#, UserData, VCalendar, VCard, VNote, Version0, Vorbis, WTV, XML, XMP,
2583
- XMP-DICOM, XMP-Device, XMP-GAudio, XMP-GCamera, XMP-GContainer,
2584
- XMP-GCreations, XMP-GDepth, XMP-GFocus, XMP-GImage, XMP-GPano,
2585
- XMP-GSpherical, XMP-LImage, XMP-MP, XMP-MP1, XMP-PixelLive, XMP-aas,
2586
- XMP-acdsee, XMP-acdsee-rs, XMP-album, XMP-apple-fi, XMP-ast, XMP-aux,
2587
- XMP-cc, XMP-cell, XMP-crd, XMP-creatorAtom, XMP-crs, XMP-dc, XMP-dex,
2588
- XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-et, XMP-exif, XMP-exifEX,
2589
- XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-hdr, XMP-hdrgm,
2590
- XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro, XMP-microsoft,
2591
- XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-nine, XMP-panorama, XMP-pdf,
2592
- XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-pmi, XMP-prism,
2593
- XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-sdc, XMP-swf, XMP-tiff, XMP-x,
2594
- XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpDSA, XMP-xmpMM, XMP-xmpNote,
2573
+ ICC-chrm, ICC-cicp, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view,
2574
+ ICC_Profile, ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2, ID3v2_3, ID3v2_4,
2575
+ IFD0, IFD1, IPTC, IPTC#, ISO, ITC, InfiRay, Insta360, InteropIFD, ItemList,
2576
+ JFIF, JFXX, JPEG, JPEG-HDR, JPS, JSON, JUMBF, JVC, Jpeg2000, KDC_IFD, Keys,
2577
+ Kodak, KodakBordersIFD, KodakEffectsIFD, KodakIFD, KyoceraRaw, LIGO, LNK,
2578
+ Leaf, LeafSubIFD, Leica, Lyrics3, Lytro, M-RAW, M2TS, MAC, MIE-Audio,
2579
+ MIE-Camera, MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS, MIE-Geo,
2580
+ MIE-Image, MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient,
2581
+ MIE-Preview, MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MISB,
2582
+ MNG, MOBI, MOI, MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS, MakerNotes,
2583
+ MakerUnknown, Matroska, MediaJukebox, Meta, MetaIFD, Microsoft, Minolta,
2584
+ MinoltaRaw, Motorola, NITF, Nextbase, Nikon, NikonCapture, NikonCustom,
2585
+ NikonScan, NikonSettings, NineEdits, Nintendo, Ocad, Ogg, Olympus, OpenEXR,
2586
+ Opus, PDF, PICT, PNG, PNG-cICP, PNG-pHYs, PSP, Palm, Panasonic,
2587
+ PanasonicRaw, Parrot, Pentax, PhaseOne, PhotoCD, PhotoMechanic, Photoshop,
2588
+ PictureInfo, PostScript, PreviewIFD, PrintIM, ProfileIFD, Qualcomm,
2589
+ QuickTime, RAF, RAF2, RIFF, RMETA, RSRC, RTF, Radiance, Rawzor, Real,
2590
+ Real-CONT, Real-MDPR, Real-PROP, Real-RA3, Real-RA4, Real-RA5, Real-RJMD,
2591
+ Reconyx, Red, Ricoh, SEAL, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG,
2592
+ Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD,
2593
+ System, Theora, Torrent, Track#, UserData, VCalendar, VCard, VNote,
2594
+ Version0, Vorbis, WTV, XML, XMP, XMP-DICOM, XMP-Device, XMP-GAudio,
2595
+ XMP-GCamera, XMP-GContainer, XMP-GCreations, XMP-GDepth, XMP-GFocus,
2596
+ XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP, XMP-MP1,
2597
+ XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-acdsee-rs, XMP-album, XMP-apple-fi,
2598
+ XMP-ast, XMP-aux, XMP-cc, XMP-cell, XMP-crd, XMP-creatorAtom, XMP-crs,
2599
+ XMP-dc, XMP-dex, XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-et, XMP-exif,
2600
+ XMP-exifEX, XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-hdr,
2601
+ XMP-hdrgm, XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro,
2602
+ XMP-microsoft, XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-nine, XMP-panorama,
2603
+ XMP-pdf, XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-pmi,
2604
+ XMP-prism, XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-sdc, XMP-swf, XMP-tiff,
2605
+ XMP-x, XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpDSA, XMP-xmpMM, XMP-xmpNote,
2595
2606
  XMP-xmpPLUS, XMP-xmpRights, XMP-xmpTPg, ZIP, iTunes
2596
2607
 
2597
2608
  =item Family 2 (Category):
@@ -2832,6 +2843,10 @@ for the system. In Windows this also has the effect of activating Unicode
2832
2843
  filename support via the special Windows wide-character i/o routines if
2833
2844
  Win32API::File is available.
2834
2845
 
2846
+ Note that setting the L</WindowsWideFile> or L</WindowsLongPath> option
2847
+ causes L</CharsetFileName> to default to 'UTF8' in Windows if not defined,
2848
+ and L</WindowsLongPath> is set by default in ExifTool 13.07 and later.
2849
+
2835
2850
  =item Internal Character Sets:
2836
2851
 
2837
2852
  The encodings used to store strings in the various metadata formats. These
@@ -3015,7 +3030,7 @@ specified by the L</Charset> option.
3015
3030
 
3016
3031
  =head1 AUTHOR
3017
3032
 
3018
- Copyright 2003-2024, Phil Harvey
3033
+ Copyright 2003-2025, Phil Harvey
3019
3034
 
3020
3035
  This library is free software; you can redistribute it and/or modify it
3021
3036
  under the same terms as Perl itself.
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 13.08
3
+ Version: 13.12
4
4
  Release: 1
5
5
  License: Artistic/GPL
6
6
  Group: Development/Libraries/Perl
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExiftoolVendored
4
- VERSION = Gem::Version.new('13.08.0')
4
+ VERSION = Gem::Version.new('13.12.0')
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exiftool_vendored
3
3
  version: !ruby/object:Gem::Version
4
- version: 13.08.0
4
+ version: 13.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-12-16 00:00:00.000000000 Z
12
+ date: 2025-01-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool
@@ -205,6 +205,7 @@ files:
205
205
  - bin/lib/Image/ExifTool/Lang/zh_cn.pm
206
206
  - bin/lib/Image/ExifTool/Lang/zh_tw.pm
207
207
  - bin/lib/Image/ExifTool/Leaf.pm
208
+ - bin/lib/Image/ExifTool/LigoGPS.pm
208
209
  - bin/lib/Image/ExifTool/Lytro.pm
209
210
  - bin/lib/Image/ExifTool/M2TS.pm
210
211
  - bin/lib/Image/ExifTool/MIE.pm