exiftool_vendored 12.55.0 → 12.56.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '08dd80f8e21b9b1cdb9c94d397452030151b485db6f08e25fdb408a4eade1052'
4
- data.tar.gz: 6db554ec80bedd0d2022bd019cba25f5f7e61862bec88b00659790edbe123952
3
+ metadata.gz: 868b41884f8ad70975ed61e8b20a68ed6528884fddb24c3cac299e10efdb7eb5
4
+ data.tar.gz: 62539abf29b08ec70f5846bd3e290fd475fc98a043f80a5515520fbcecd2bbb1
5
5
  SHA512:
6
- metadata.gz: 64da9fcb6865573609dfb79388711aa9d74bd24718a9d076846158d74ffd962bb956a722671dca51b406de6581b9b2220528b09971c2ebe8f3afc0b1a2b3f281
7
- data.tar.gz: 9601c888737e9e4c31f5edaa1b2fba847bbdb8cf2b4dc20013522ee0045c58736491a0d9e0b715f09a1113e23fd8a4672278292f45a6ed07f45507fa50a84bb6
6
+ metadata.gz: cc4ed320dc2e6455b3b71a5b41080f0d7d97e5f67ed3a7ee7acc61528c18d6f4daa353724a41a2c26eec0bc9a137a2f5221f7adb536d12d813187264f7cb2ec1
7
+ data.tar.gz: 21594ef130d424275c02a3cc27f87064df0b6fa49245e6469a7c767fbf67821436ee22d44a5db2bbaff6909e976cc8a69498892f6a4b77e58a40c29bbe78e5c1
data/bin/Changes CHANGED
@@ -7,6 +7,24 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 12.50. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Feb. 9, 2023 - Version 12.56
11
+
12
+ - Added support for VNT (both Scene7 Vignette and V-Note document) files
13
+ - Added read support for InfiRay APP2 metadata (thanks Marcos Del Sol Vives)
14
+ - Added some new Sony LensType values (thanks Jos Roost and Francois Piette)
15
+ - Added a new FujiFilm VideoRecordingMode value (thanks Greybeard)
16
+ - Added two new Canon LensTypes and CanonModelIDs (thanks Norbert Wasser)
17
+ - Added ability to extract semantic images from Apple ProRaw DNG files
18
+ - Added read support for the PNG cICP chunk
19
+ - Decode more Nikon tags (thanks Warren Hatch)
20
+ - Extract PreviewImage from Insta360 trailer record 0x200
21
+ - Extract EmbeddedImageRectangle and some other new tags from VNT files
22
+ - Minor improvement to arg_files/xmp2exif.args (thanks StarGeek)
23
+ - Enhanced -ee option to extract metadata from all frames of a multipart EXR
24
+ image
25
+ - Removed EXR Layout tag and incorporated into new Flags tag
26
+ - Patched possible hang problem when reading corrupted .rm audio files
27
+
10
28
  Jan. 17, 2023 - Version 12.55
11
29
 
12
30
  - Added support for geotagging from FlightAware KML files
@@ -14,7 +32,7 @@ Jan. 17, 2023 - Version 12.55
14
32
  - Decode a few new Nikon tags (thanks Warren Hatch)
15
33
  - Decode a new Samsung HEIC tag
16
34
  - Decode FujiFilm RollAngle
17
- - Fixed bug where FlatName property wasn't working properly for some
35
+ - Fixed bug where the FlatName property wasn't working properly for some
18
36
  user-defined structure tags
19
37
 
20
38
  Jan. 6, 2023 - Version 12.54
data/bin/MANIFEST CHANGED
@@ -90,6 +90,7 @@ html/TagNames/ID3.html
90
90
  html/TagNames/IPTC.html
91
91
  html/TagNames/ISO.html
92
92
  html/TagNames/ITC.html
93
+ html/TagNames/InfiRay.html
93
94
  html/TagNames/JFIF.html
94
95
  html/TagNames/JPEG.html
95
96
  html/TagNames/JSON.html
@@ -301,6 +302,7 @@ lib/Image/ExifTool/ISO.pm
301
302
  lib/Image/ExifTool/ITC.pm
302
303
  lib/Image/ExifTool/Import.pm
303
304
  lib/Image/ExifTool/InDesign.pm
305
+ lib/Image/ExifTool/InfiRay.pm
304
306
  lib/Image/ExifTool/JPEG.pm
305
307
  lib/Image/ExifTool/JPEGDigest.pm
306
308
  lib/Image/ExifTool/JSON.pm
@@ -616,6 +618,8 @@ t/InDesign.t
616
618
  t/InDesign_2.out
617
619
  t/InDesign_3.out
618
620
  t/InDesign_4.out
621
+ t/InfiRay.t
622
+ t/InfiRay_2.out
619
623
  t/JSON.t
620
624
  t/JSON_2.out
621
625
  t/JVC.t
@@ -1034,6 +1038,7 @@ t/images/IPTC.jpg
1034
1038
  t/images/ISO.iso
1035
1039
  t/images/ITC.itc
1036
1040
  t/images/InDesign.indd
1041
+ t/images/InfiRay.jpg
1037
1042
  t/images/JSON.json
1038
1043
  t/images/JVC.jpg
1039
1044
  t/images/JVC2.jpg
data/bin/META.json CHANGED
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "12.55"
50
+ "version" : "12.56"
51
51
  }
data/bin/META.yml CHANGED
@@ -28,4 +28,4 @@ recommends:
28
28
  Time::HiRes: 0
29
29
  requires:
30
30
  perl: 5.004
31
- version: 12.55
31
+ version: 12.56
data/bin/README CHANGED
@@ -39,23 +39,23 @@ supported by ExifTool (r = read, w = write, c = create):
39
39
  CHM r | FPF r | MKA r | PFA r | TTF r
40
40
  COS r | FPX r | MKS r | PFB r | TXT r
41
41
  CR2 r/w | GIF r/w | MKV r | PFM r | VCF r
42
- CR3 r/w | GPR r/w | MNG r/w | PGF r | VRD r/w/c
43
- CRM r/w | GZ r | MOBI r | PGM r/w | VSD r
44
- CRW r/w | HDP r/w | MODD r | PLIST r | WAV r
45
- CS1 r/w | HDR r | MOI r | PICT r | WDP r/w
46
- CSV r | HEIC r/w | MOS r/w | PMP r | WEBP r/w
47
- CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBM r
48
- CZI r | HTML r | MP3 r | PPM r/w | WMA r
49
- DCM r | ICC r/w/c | MP4 r/w | PPT r | WMV r
50
- DCP r/w | ICO r | MPC r | PPTX r | WTV r
51
- DCR r | ICS r | MPG r | PS r/w | WV r
52
- DFONT r | IDML r | MPO r/w | PSB r/w | X3F r/w
53
- DIVX r | IIQ r/w | MQV r/w | PSD r/w | XCF r
54
- DJVU r | IND r/w | MRC r | PSP r | XLS r
55
- DLL r | INSP r/w | MRW r/w | QTIF r/w | XLSX r
56
- DNG r/w | INSV r | MXF r | R3D r | XMP r/w/c
57
- DOC r | INX r | NEF r/w | RA r | ZIP r
58
- DOCX r | ISO r | NKSC r/w | RAF r/w |
42
+ CR3 r/w | GPR r/w | MNG r/w | PGF r | VNT r
43
+ CRM r/w | GZ r | MOBI r | PGM r/w | VRD r/w/c
44
+ CRW r/w | HDP r/w | MODD r | PLIST r | VSD r
45
+ CS1 r/w | HDR r | MOI r | PICT r | WAV r
46
+ CSV r | HEIC r/w | MOS r/w | PMP r | WDP r/w
47
+ CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBP r/w
48
+ CZI r | HTML r | MP3 r | PPM r/w | WEBM r
49
+ DCM r | ICC r/w/c | MP4 r/w | PPT r | WMA r
50
+ DCP r/w | ICO r | MPC r | PPTX r | WMV r
51
+ DCR r | ICS r | MPG r | PS r/w | WTV r
52
+ DFONT r | IDML r | MPO r/w | PSB r/w | WV r
53
+ DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
54
+ DJVU r | IND r/w | MRC r | PSP r | XCF r
55
+ DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
56
+ DNG r/w | INSV r | MXF r | R3D r | XLSX r
57
+ DOC r | INX r | NEF r/w | RA r | XMP r/w/c
58
+ DOCX r | ISO r | NKSC r/w | RAF r/w | ZIP r
59
59
 
60
60
  Meta Information
61
61
  ----------------------+----------------------+---------------------
@@ -107,8 +107,8 @@ your home directory, then you would type the following commands in a
107
107
  terminal window to extract and run ExifTool:
108
108
 
109
109
  cd ~/Desktop
110
- gzip -dc Image-ExifTool-12.55.tar.gz | tar -xf -
111
- cd Image-ExifTool-12.55
110
+ gzip -dc Image-ExifTool-12.56.tar.gz | tar -xf -
111
+ cd Image-ExifTool-12.56
112
112
  ./exiftool t/images/ExifTool.jpg
113
113
 
114
114
  Note: These commands extract meta information from one of the test images.
@@ -15,6 +15,8 @@
15
15
  # 2018/05/07 - PH Added support for GPSDestXxxRef tags
16
16
  # 2021/09/30 - PH Removed erroneous "-" when copying CreatorTool
17
17
  # 2022/03/31 - PH IPTC Photometadata Mapping Guidelines 2202.1 update
18
+ # 2023/01/30 - PH Also write Composite:SubSecDateTimeOriginal from
19
+ # XMP-exif:DateTimeOriginal
18
20
  #
19
21
  # References: http://www.metadataworkinggroup.org/specs/
20
22
  # https://iptc.org/std/photometadata/documentation/mappingguidelines/
@@ -34,8 +36,9 @@
34
36
  -EXIF:all < XMP-tiff:all
35
37
  -EXIF:ImageDescription < XMP-dc:Description
36
38
  -EXIF:DateTimeOriginal < XMP-photoshop:DateCreated
37
- # the following 3 SubSec tags also write/delete the corresponding EXIF
39
+ # the following SubSec tags also write/delete the corresponding EXIF
38
40
  # SubSecTime and OffsetTime tags as appropriate
41
+ -Composite:SubSecDateTimeOriginal < XMP-exif:DateTimeOriginal
39
42
  -Composite:SubSecDateTimeOriginal < XMP-photoshop:DateCreated
40
43
  -Composite:SubSecCreateDate < XMP-xmp:CreateDate
41
44
  -Composite:SubSecModifyDate < XMP-xmp:ModifyDate
data/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '12.55';
14
+ my $version = '12.56';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  BEGIN {
@@ -725,7 +725,7 @@ for (;;) {
725
725
  }
726
726
  if ($verbose > 1) {
727
727
  print "Include directories:\n";
728
- print " $_\n" foreach @INC;
728
+ ref $_ or print " $_\n" foreach @INC;
729
729
  }
730
730
  } else {
731
731
  print "$version$str$Image::ExifTool::RELEASE\n";
@@ -4558,23 +4558,23 @@ supported by ExifTool (r = read, w = write, c = create):
4558
4558
  CHM r | FPF r | MKA r | PFA r | TTF r
4559
4559
  COS r | FPX r | MKS r | PFB r | TXT r
4560
4560
  CR2 r/w | GIF r/w | MKV r | PFM r | VCF r
4561
- CR3 r/w | GPR r/w | MNG r/w | PGF r | VRD r/w/c
4562
- CRM r/w | GZ r | MOBI r | PGM r/w | VSD r
4563
- CRW r/w | HDP r/w | MODD r | PLIST r | WAV r
4564
- CS1 r/w | HDR r | MOI r | PICT r | WDP r/w
4565
- CSV r | HEIC r/w | MOS r/w | PMP r | WEBP r/w
4566
- CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBM r
4567
- CZI r | HTML r | MP3 r | PPM r/w | WMA r
4568
- DCM r | ICC r/w/c | MP4 r/w | PPT r | WMV r
4569
- DCP r/w | ICO r | MPC r | PPTX r | WTV r
4570
- DCR r | ICS r | MPG r | PS r/w | WV r
4571
- DFONT r | IDML r | MPO r/w | PSB r/w | X3F r/w
4572
- DIVX r | IIQ r/w | MQV r/w | PSD r/w | XCF r
4573
- DJVU r | IND r/w | MRC r | PSP r | XLS r
4574
- DLL r | INSP r/w | MRW r/w | QTIF r/w | XLSX r
4575
- DNG r/w | INSV r | MXF r | R3D r | XMP r/w/c
4576
- DOC r | INX r | NEF r/w | RA r | ZIP r
4577
- DOCX r | ISO r | NKSC r/w | RAF r/w |
4561
+ CR3 r/w | GPR r/w | MNG r/w | PGF r | VNT r
4562
+ CRM r/w | GZ r | MOBI r | PGM r/w | VRD r/w/c
4563
+ CRW r/w | HDP r/w | MODD r | PLIST r | VSD r
4564
+ CS1 r/w | HDR r | MOI r | PICT r | WAV r
4565
+ CSV r | HEIC r/w | MOS r/w | PMP r | WDP r/w
4566
+ CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBP r/w
4567
+ CZI r | HTML r | MP3 r | PPM r/w | WEBM r
4568
+ DCM r | ICC r/w/c | MP4 r/w | PPT r | WMA r
4569
+ DCP r/w | ICO r | MPC r | PPTX r | WMV r
4570
+ DCR r | ICS r | MPG r | PS r/w | WTV r
4571
+ DFONT r | IDML r | MPO r/w | PSB r/w | WV r
4572
+ DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
4573
+ DJVU r | IND r/w | MRC r | PSP r | XCF r
4574
+ DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
4575
+ DNG r/w | INSV r | MXF r | R3D r | XLSX r
4576
+ DOC r | INX r | NEF r/w | RA r | XMP r/w/c
4577
+ DOCX r | ISO r | NKSC r/w | RAF r/w | ZIP r
4578
4578
 
4579
4579
  Meta Information
4580
4580
  ----------------------+----------------------+---------------------
@@ -5206,9 +5206,9 @@ Note that this option is fundamentally different than all other output
5206
5206
  format options because it requires information from all input files to be
5207
5207
  buffered in memory before the output is written. This may result in
5208
5208
  excessive memory usage when processing a very large number of files with a
5209
- single command. Also, it makes this option incompatible with the B<-w>
5210
- option. When processing a large number of files, it is recommended to
5211
- either use the JSON (B<-j>) or XML (B<-X>) output format, or use B<-p> to
5209
+ single command. Also, it makes this option incompatible with the B<-w> and
5210
+ B<-W> options. When processing a large number of files, it is recommended
5211
+ to either use the JSON (B<-j>) or XML (B<-X>) output format, or use B<-p> to
5212
5212
  generate a fixed-column CSV file instead of using the B<-csv> option.
5213
5213
 
5214
5214
  =item B<-csvDelim> I<STR>
@@ -5477,7 +5477,7 @@ with this command:
5477
5477
 
5478
5478
  produces output like this:
5479
5479
 
5480
- -- Generated by ExifTool 12.55 --
5480
+ -- Generated by ExifTool 12.56 --
5481
5481
  File: a.jpg - 2003:10:31 15:44:19
5482
5482
  (f/5.6, 1/60s, ISO 100)
5483
5483
  File: b.jpg - 2006:05:23 11:57:38
@@ -5981,8 +5981,8 @@ of the file processing. Both functions have a return value of 1. Case is
5981
5981
  significant for function names.
5982
5982
 
5983
5983
  End() - end processing after this file
5984
- EndDir() - end processing of files in this directory (not
5985
- compatible with the B<-fileOrder> option)
5984
+ EndDir() - end processing of files in the current directory
5985
+ after this file (not compatible with -fileOrder)
5986
5986
 
5987
5987
  Notes:
5988
5988
 
@@ -24,6 +24,9 @@
24
24
  # extension is used.
25
25
  # 5) The -fileOrder option may be used to control the order of the
26
26
  # generated placemarks when processing multiple files.
27
+ # 6) The "0" in the coordinates line may be changed to "$gpsaltitude#"
28
+ # and the altitudeMode may be changed to "absolute" to store
29
+ # altitude information if it exists in the track log.
27
30
  #------------------------------------------------------------------------------
28
31
  #[HEAD]<?xml version="1.0" encoding="UTF-8"?>
29
32
  #[HEAD]<kml xmlns="http://earth.google.com/kml/2.0">
@@ -21,6 +21,9 @@
21
21
  # 2) The -fileOrder option may be used to control the order of the
22
22
  # waypoints when processing multiple still-image files, or the
23
23
  # order of the tracks when processing multiple video files.
24
+ # 3) The "0" in the BODY line below may be changed to "$gpsaltitude#"
25
+ # and the altitudeMode may be changed to "absolute" to store
26
+ # altitude information if it exists in the track log.
24
27
  #------------------------------------------------------------------------------
25
28
  #[HEAD]<?xml version="1.0" encoding="UTF-8"?>
26
29
  #[HEAD]<kml xmlns="http://earth.google.com/kml/2.0">
@@ -314,10 +314,12 @@ C<integer> is a string of digits (possibly beginning with a '+' or '-'),
314
314
  C<real> is a floating point number, C<rational> is entered as a floating
315
315
  point number but stored as two C<integer> strings separated by a '/'
316
316
  character, C<date> is a date/time string entered in the format "YYYY:mm:dd
317
- HH:MM:SS[.ss][+/-HH:MM]", C<boolean> is either "True" or "False" (but "true"
318
- and "false" may be written as a ValueConv value for compatibility with
319
- non-conforming applications), C<struct> indicates a structured tag, and
320
- C<lang-alt> is a tag that supports alternate languages.
317
+ HH:MM:SS[.ss][+/-HH:MM]" but some partial date/time formats are also
318
+ accepted (see L<https://exiftool.org/faq.html#Q5>), C<boolean> is either
319
+ "True" or "False" (but "true" and "false" may be written as a ValueConv
320
+ value for compatibility with non-conforming applications), C<struct>
321
+ indicates a structured tag, and C<lang-alt> is a tag that supports alternate
322
+ languages.
321
323
 
322
324
  When reading, C<struct> tags are extracted only if the L<Struct|../ExifTool.html#Struct> (-struct)
323
325
  option is used. Otherwise the corresponding I<Flattened> tags, indicated by
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.64';
91
+ $VERSION = '4.65';
92
92
 
93
93
  # Note: Removed 'USM' from 'L' lenses since it is redundant - PH
94
94
  # (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -621,8 +621,10 @@ $VERSION = '4.64';
621
621
  '61182.41' => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
622
622
  '61182.42' => 'Canon RF 1200mm F8L IS USM + RF2x', #42
623
623
  '61182.43' => 'Canon RF 135mm F1.8 L IS USM', #42
624
+ '61182.44' => 'Canon RF 24-50mm F4.5-6.3 IS STM', #42
625
+ '61182.45' => 'Canon RF-S 55-210mm F5-7.1 IS STM', #42
624
626
  # we need the RFLensType values for the following...
625
- '61182.44' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH (NC)
627
+ '61182.46' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH (NC)
626
628
  65535 => 'n/a',
627
629
  );
628
630
 
@@ -983,7 +985,9 @@ $VERSION = '4.64';
983
985
  0x80000465 => 'EOS R10', #42
984
986
  0x80000467 => 'PowerShot ZOOM',
985
987
  0x80000468 => 'EOS M50 Mark II / Kiss M2', #IB
988
+ 0x80000480 => 'EOS R50', #42
986
989
  0x80000481 => 'EOS R6 Mark II', #42
990
+ 0x80000487 => 'EOS R8', #42
987
991
  0x80000520 => 'EOS D2000C', #IB
988
992
  0x80000560 => 'EOS D6000C', #PH (guess)
989
993
  );
@@ -6840,6 +6844,8 @@ my %ciMaxFocal = (
6840
6844
  300 => 'Canon RF 1200mm F8L IS USM + RF2x', #42
6841
6845
  302 => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
6842
6846
  303 => 'Canon RF 135mm F1.8 L IS USM', #42
6847
+ 304 => 'Canon RF 24-50mm F4.5-6.3 IS STM', #42
6848
+ 305 => 'Canon RF-S 55-210mm F5-7.1 IS STM', #42
6843
6849
  # Note: add new RF lenses to %canonLensTypes with ID 61182
6844
6850
  },
6845
6851
  },
@@ -56,7 +56,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
56
56
  use Image::ExifTool qw(:DataAccess :Utils);
57
57
  use Image::ExifTool::MakerNotes;
58
58
 
59
- $VERSION = '4.42';
59
+ $VERSION = '4.43';
60
60
 
61
61
  sub ProcessExif($$$);
62
62
  sub WriteExif($$$);
@@ -578,6 +578,13 @@ my %opcodeInfo = (
578
578
  ValueConv => '$val=join(" ",unpack("N*",pack("V*",split(" ",$val))));\$val',
579
579
  ByteOrder => 'LittleEndian',
580
580
  },
581
+ {
582
+ Condition => '$$self{Compression} and $$self{Compression} eq "34892"', # DNG Lossy JPEG
583
+ Name => 'OtherImageStart',
584
+ IsOffset => 1,
585
+ OffsetPair => 0x117, # point to associated byte counts
586
+ DataTag => 'OtherImage',
587
+ },
581
588
  {
582
589
  # (APP1 IFD2 is for Leica JPEG preview)
583
590
  Condition => q[
@@ -664,6 +671,12 @@ my %opcodeInfo = (
664
671
  ValueConv => '$val=join(" ",unpack("N*",pack("V*",split(" ",$val))));\$val',
665
672
  ByteOrder => 'LittleEndian',
666
673
  },
674
+ {
675
+ Condition => '$$self{Compression} and $$self{Compression} eq "34892"', # DNG Lossy JPEG
676
+ Name => 'OtherImageLength',
677
+ OffsetPair => 0x111, # point to associated offset
678
+ DataTag => 'OtherImage',
679
+ },
667
680
  {
668
681
  # (APP1 IFD2 is for Leica JPEG preview)
669
682
  Condition => q[
@@ -4706,12 +4719,28 @@ my %subSecConv = (
4706
4719
  0 => 'OtherImageStart',
4707
4720
  1 => 'OtherImageLength',
4708
4721
  },
4722
+ Desire => {
4723
+ 2 => 'OtherImageStart (1)',
4724
+ 3 => 'OtherImageLength (1)',
4725
+ },
4709
4726
  Notes => q{
4710
4727
  this tag is writable, and may be used to update existing embedded images,
4711
4728
  but not create or delete them
4712
4729
  },
4713
- # retrieve the thumbnail from our EXIF data
4730
+ # retrieve all other images
4714
4731
  RawConv => q{
4732
+ if ($val[2] and $val[3]) {
4733
+ my $i = 1;
4734
+ for (;;) {
4735
+ my %val = ( 0 => $$val{2}, 1 => $$val{3} );
4736
+ $self->FoundTag($tagInfo, \%val);
4737
+ ++$i;
4738
+ $$val{2} = "$$val{0} ($i)";
4739
+ last unless defined $$self{VALUE}{$$val{2}};
4740
+ $$val{3} = "$$val{1} ($i)";
4741
+ last unless defined $$self{VALUE}{$$val{3}};
4742
+ }
4743
+ }
4715
4744
  @grps = $self->GetGroup($$val{0});
4716
4745
  Image::ExifTool::Exif::ExtractImage($self,$val[0],$val[1],"OtherImage");
4717
4746
  },
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
21
21
  use Image::ExifTool::Exif;
22
22
  use Image::ExifTool::ASF; # for GetGUID()
23
23
 
24
- $VERSION = '1.41';
24
+ $VERSION = '1.42';
25
25
 
26
26
  sub ProcessFPX($$);
27
27
  sub ProcessFPXR($$$);
@@ -483,10 +483,18 @@ my %fpxFileType = (
483
483
  },
484
484
  IeImg => {
485
485
  Name => 'EmbeddedImage',
486
- Notes => 'embedded images in Scene7 vignette VNT files',
486
+ Notes => q{
487
+ embedded images in Scene7 vignette VNT files. EmbeddedImageRectangle is
488
+ generated for applicable images, and may be associated with the
489
+ corresponding EmbeddedImage via the family 3 group name
490
+ },
487
491
  Groups => { 2 => 'Preview' },
488
492
  Binary => 1,
489
493
  },
494
+ IeImg_rect => { # (not a real tag -- extracted from Contents of VNT file)
495
+ Name => 'EmbeddedImageRectangle',
496
+ Hidden => 1,
497
+ },
490
498
  );
491
499
 
492
500
  # Summary Information properties
@@ -1059,6 +1067,7 @@ my %fpxFileType = (
1059
1067
  %Image::ExifTool::FlashPix::Contents = (
1060
1068
  PROCESS_PROC => \&ProcessProperties,
1061
1069
  GROUPS => { 2 => 'Image' },
1070
+ OriginalFileName => { Name => 'OriginalFileName', Hidden => 1 }, # (not a real tag -- extracted from Contents of VNT file)
1062
1071
  );
1063
1072
 
1064
1073
  # CompObj tags
@@ -1537,11 +1546,43 @@ sub ProcessContents($$$)
1537
1546
  my $isFLA;
1538
1547
 
1539
1548
  # all of my FLA samples contain "Contents" data, and no other FPX-like samples have
1540
- # this, but check the data for a familiar pattern to be sure this is FLA: the
1541
- # Contents of all of my FLA samples start with two bytes (0x29,0x38,0x3f,0x43 or 0x47,
1542
- # then 0x01) followed by a number of zero bytes (from 0x18 to 0x26 of them, related
1543
- # somehow to the value of the first byte), followed by the string "DocumentPage"
1544
- $isFLA = 1 if $$dataPt =~ /^..\0+\xff\xff\x01\0\x0d\0CDocumentPage/s;
1549
+ # this (except Scene7 VNT viles), but check the data for a familiar pattern to be
1550
+ # sure this is FLA: the Contents of all of my FLA samples start with two bytes
1551
+ # (0x29,0x38,0x3f,0x43 or 0x47, then 0x01) followed by a number of zero bytes
1552
+ # (from 0x18 to 0x26 of them, related somehow to the value of the first byte),
1553
+ # followed by the string "DocumentPage"
1554
+ if ($$dataPt =~ /^..\0+\xff\xff\x01\0\x0d\0CDocumentPage/s) {
1555
+ $isFLA = 1;
1556
+ } elsif ($$dataPt =~ /^\0{4}.(.{1,255})\x60\xa1\x3f\x22\0{5}(.{8})/sg) {
1557
+ # this looks like a VNT file
1558
+ $et->OverrideFileType('VNT', 'image/x-vignette');
1559
+ # hack to set proper file description (extension is the same for V-Note files)
1560
+ $Image::ExifTool::static_vars{OverrideFileDescription}{VNT} = 'Scene7 Vignette',
1561
+ my $name = $1;
1562
+ my ($w, $h) = unpack('V2',$2);
1563
+ $et->FoundTag(ImageWidth => $w);
1564
+ $et->FoundTag(ImageHeight => $h);
1565
+ $et->HandleTag($tagTablePtr, OriginalFileName => $name);
1566
+ if ($$dataPt =~ /\G\x01\0{4}(.{12})/sg) {
1567
+ # (first 4 bytes seem to be number of objects, next 4 bytes are zero, then ICC size)
1568
+ my $size = unpack('x8V', $1);
1569
+ # (not useful?) $et->FoundTag(NumObjects => $num);
1570
+ if ($size and pos($$dataPt) + $size < length($$dataPt)) {
1571
+ my $dat = substr($$dataPt, pos($$dataPt), $size);
1572
+ $et->FoundTag(ICC_Profile => $dat);
1573
+ pos($$dataPt) += $size;
1574
+ }
1575
+ $$et{IeImg_lkup} = { };
1576
+ # - the byte after TargetRole1 is 0x0d or 0x11 for separate images in my samples,
1577
+ # and 0x1c or 0x23 for inline masks
1578
+ while ($$dataPt =~ /\x0bTargetRole1.\x80\0\0\x01.{4}(.{24})/sg) {
1579
+ my ($index, @coords) = unpack('Vx4V4', $1);
1580
+ next if $index == 0xffffffff;
1581
+ $$et{IeImg_lkup}{$index} and $et->WarnOnce('Duplicate image index');
1582
+ $$et{IeImg_lkup}{$index} = "@coords";
1583
+ }
1584
+ }
1585
+ }
1545
1586
 
1546
1587
  # do a brute-force scan of the "Contents" for UTF-16 XMP
1547
1588
  # (this may always be little-endian, but allow for either endianness)
@@ -2337,8 +2378,24 @@ sub ProcessFPX($$)
2337
2378
  );
2338
2379
  my $subTablePtr = GetTagTable($$subdir{TagTable});
2339
2380
  $et->ProcessDirectory(\%dirInfo, $subTablePtr, $$subdir{ProcessProc});
2381
+ } elsif (defined $size and $size > length($buff)) {
2382
+ $et->WarnOnce('Truncated object');
2340
2383
  } else {
2341
- $et->FoundTag($tagInfo, $buff);
2384
+ $buff = substr($buff, 0, $size) if defined $size and $size < length($buff);
2385
+ if ($tag =~ /^IeImg_0*(\d+)$/) {
2386
+ # set document number for embedded images and their positions (if available, VNT files)
2387
+ my $num = $1;
2388
+ $$et{DOC_NUM} = ++$$et{DOC_COUNT};
2389
+ $et->FoundTag($tagInfo, $buff);
2390
+ if ($$et{IeImg_lkup} and $$et{IeImg_lkup}{$num}) {
2391
+ # save position of this image
2392
+ $et->HandleTag($tagTablePtr, IeImg_rect => $$et{IeImg_lkup}{$num});
2393
+ delete $$et{IeImg_lkup}{$num};
2394
+ }
2395
+ delete $$et{DOC_NUM};
2396
+ } else {
2397
+ $et->FoundTag($tagInfo, $buff);
2398
+ }
2342
2399
  }
2343
2400
  # save object index number for all found tags
2344
2401
  my $num2 = $$et{NUM_FOUND};
@@ -2395,6 +2452,10 @@ sub ProcessFPX($$)
2395
2452
  # process Word document table
2396
2453
  ProcessDocumentTable($et);
2397
2454
 
2455
+ if ($$et{IeImg_lkup} and %{$$et{IeImg_lkup}}) {
2456
+ $et->Warn('Image positions exist without corresponding images');
2457
+ }
2458
+
2398
2459
  return 1;
2399
2460
  }
2400
2461
 
@@ -31,7 +31,7 @@ use vars qw($VERSION);
31
31
  use Image::ExifTool qw(:DataAccess :Utils);
32
32
  use Image::ExifTool::Exif;
33
33
 
34
- $VERSION = '1.86';
34
+ $VERSION = '1.87';
35
35
 
36
36
  sub ProcessFujiDir($$$);
37
37
  sub ProcessFaceRec($$$);
@@ -808,6 +808,7 @@ my %faceCategories = (
808
808
  0x00 => 'Normal',
809
809
  0x10 => 'F-log',
810
810
  0x20 => 'HLG',
811
+ 0x30 => 'F-log2', #forum14384
811
812
  },
812
813
  },
813
814
  0x3804 => { #forum10037