exiftool_vendored 12.58.0 → 12.60.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +45 -3
- data/bin/MANIFEST +4 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/config_files/example.config +1 -0
- data/bin/exiftool +81 -54
- data/bin/lib/Image/ExifTool/CanonRaw.pm +5 -1
- data/bin/lib/Image/ExifTool/DJI.pm +2 -2
- data/bin/lib/Image/ExifTool/Exif.pm +53 -14
- data/bin/lib/Image/ExifTool/FlashPix.pm +27 -9
- data/bin/lib/Image/ExifTool/FujiFilm.pm +6 -3
- data/bin/lib/Image/ExifTool/Geotag.pm +30 -7
- data/bin/lib/Image/ExifTool/LIF.pm +10 -2
- data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -1
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +6 -5
- data/bin/lib/Image/ExifTool/Olympus.pm +87 -7
- data/bin/lib/Image/ExifTool/PNG.pm +10 -2
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +27 -1
- data/bin/lib/Image/ExifTool/PhaseOne.pm +14 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +21 -6
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +37 -5
- data/bin/lib/Image/ExifTool/RIFF.pm +32 -11
- data/bin/lib/Image/ExifTool/Ricoh.pm +2 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +9 -3
- data/bin/lib/Image/ExifTool/Sony.pm +2 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +2254 -2246
- data/bin/lib/Image/ExifTool/TagNames.pod +45 -25
- data/bin/lib/Image/ExifTool/WriteExif.pl +13 -13
- data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +111 -19
- data/bin/lib/Image/ExifTool/XMP.pm +18 -3
- data/bin/lib/Image/ExifTool/XMP2.pl +2 -1
- data/bin/lib/Image/ExifTool.pm +109 -17
- data/bin/lib/Image/ExifTool.pod +40 -5
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
data/bin/lib/Image/ExifTool.pm
CHANGED
@@ -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);
|
31
31
|
|
32
|
-
$VERSION = '12.
|
32
|
+
$VERSION = '12.60';
|
33
33
|
$RELEASE = '';
|
34
34
|
@ISA = qw(Exporter);
|
35
35
|
%EXPORT_TAGS = (
|
@@ -75,6 +75,7 @@ sub GetAllGroups($;$);
|
|
75
75
|
sub GetNewGroups($);
|
76
76
|
sub GetDeleteGroups();
|
77
77
|
sub AddUserDefinedTags($%);
|
78
|
+
sub SetAlternateFile($$$);
|
78
79
|
# non-public routines below
|
79
80
|
sub InsertTagValues($$$;$$$);
|
80
81
|
sub IsWritable($);
|
@@ -113,6 +114,7 @@ sub WriteTIFF($$$);
|
|
113
114
|
sub PackUTF8(@);
|
114
115
|
sub UnpackUTF8($);
|
115
116
|
sub SetPreferredByteOrder($;$);
|
117
|
+
sub ImageDataMD5($$$;$$);
|
116
118
|
sub CopyBlock($$$);
|
117
119
|
sub CopyFileAttrs($$$);
|
118
120
|
sub TimeNow(;$$);
|
@@ -1824,8 +1826,12 @@ my %systemTagsNotes = (
|
|
1824
1826
|
ImageDataMD5 => {
|
1825
1827
|
Notes => q{
|
1826
1828
|
MD5 of image data. Generated only if specifically requested for JPEG and
|
1827
|
-
TIFF-based images,
|
1828
|
-
|
1829
|
+
TIFF-based images, PNG, CRW, CR3, MRW, RAF, X3F and AVIF images, MOV/MP4
|
1830
|
+
videos, and some RIFF-based files. The MD5 includes the main image data,
|
1831
|
+
plus JpgFromRaw/OtherImage for some formats, but does not include
|
1832
|
+
ThumbnailImage or PreviewImage. Includes video and audio data for MOV/MP4.
|
1833
|
+
The L<XMP-et:OriginalImageMD5 tag|XMP.html#ExifTool> provides a place to
|
1834
|
+
store these values in the file.
|
1829
1835
|
},
|
1830
1836
|
},
|
1831
1837
|
);
|
@@ -2052,6 +2058,7 @@ sub new
|
|
2052
2058
|
$$self{FILE_SEQUENCE} = 0; # sequence number for files when reading
|
2053
2059
|
$$self{FILES_WRITTEN} = 0; # count of files successfully written
|
2054
2060
|
$$self{INDENT2} = ''; # indentation of verbose messages from SetNewValue
|
2061
|
+
$$self{ALT_EXIFTOOL} = { }; # alternate exiftool objects
|
2055
2062
|
|
2056
2063
|
# initialize our new groups for writing
|
2057
2064
|
$self->SetNewGroups(@defaultWriteGroups);
|
@@ -2496,6 +2503,23 @@ sub ExtractInfo($;@)
|
|
2496
2503
|
}
|
2497
2504
|
}
|
2498
2505
|
++$$self{FILE_SEQUENCE}; # count files read
|
2506
|
+
# extract information from alternate files if necessary
|
2507
|
+
my ($g8, $altExifTool);
|
2508
|
+
foreach $g8 (keys %{$$self{ALT_EXIFTOOL}}) {
|
2509
|
+
$altExifTool = $$self{ALT_EXIFTOOL}{$g8};
|
2510
|
+
next if $$altExifTool{DID_EXTRACT}; # avoid extracting twice
|
2511
|
+
$$altExifTool{OPTIONS} = $$self{OPTIONS};
|
2512
|
+
$$altExifTool{GLOBAL_TIME_OFFSET} = $$self{GLOBAL_TIME_OFFSET};
|
2513
|
+
$$altExifTool{REQ_TAG_LOOKUP} = $$self{REQ_TAG_LOOKUP};
|
2514
|
+
$altExifTool->ExtractInfo($$altExifTool{ALT_FILE});
|
2515
|
+
# set family 8 group name for all tags
|
2516
|
+
foreach (keys %{$$altExifTool{VALUE}}) {
|
2517
|
+
my $ex = $$altExifTool{TAG_EXTRA}{$_};
|
2518
|
+
$ex or $ex = $$altExifTool{TAG_EXTRA}{$_} = { };
|
2519
|
+
$$ex{G8} = $g8;
|
2520
|
+
}
|
2521
|
+
$$altExifTool{DID_EXTRACT} = 1;
|
2522
|
+
}
|
2499
2523
|
}
|
2500
2524
|
|
2501
2525
|
my $filename = $$self{FILENAME}; # image file name ('' if already open)
|
@@ -3520,6 +3544,10 @@ sub GetGroup($$;$)
|
|
3520
3544
|
$groups[6] = $$ex{G6};
|
3521
3545
|
}
|
3522
3546
|
}
|
3547
|
+
if ($$ex{G8}) {
|
3548
|
+
$groups[7] = '';
|
3549
|
+
$groups[8] = $$ex{G8};
|
3550
|
+
}
|
3523
3551
|
# generate tag ID group names unless obviously not needed
|
3524
3552
|
unless ($noID) {
|
3525
3553
|
my $id = $$tagInfo{KeysID} || $$tagInfo{TagID};
|
@@ -3705,13 +3733,21 @@ COMPOSITE_TAG:
|
|
3705
3733
|
next COMPOSITE_TAG;
|
3706
3734
|
}
|
3707
3735
|
}
|
3736
|
+
my ($i, $key, @keys, $altFile);
|
3737
|
+
my $et = $self;
|
3738
|
+
# get tags from alternate file if a family 8 group was specified
|
3739
|
+
if ($reqTag =~ /\b(File\d+):/i and $$self{ALT_EXIFTOOL}{$1}) {
|
3740
|
+
$et = $$self{ALT_EXIFTOOL}{$1};
|
3741
|
+
$altFile = $1;
|
3742
|
+
}
|
3708
3743
|
# (CAREFUL! keys may not be sequential if one was deleted)
|
3709
|
-
|
3710
|
-
|
3711
|
-
push @keys, $key if defined $$rawValue{$key};
|
3744
|
+
for ($key=$name, $i=$$et{DUPL_TAG}{$name} || 0; ; --$i) {
|
3745
|
+
push @keys, $key if defined $$et{VALUE}{$key};
|
3712
3746
|
last if $i <= 0;
|
3713
3747
|
$key = "$name ($i)";
|
3714
3748
|
}
|
3749
|
+
# make sure the necessary information is available from the alternate file
|
3750
|
+
$self->CopyAltInfo($altFile, \@keys) if $altFile;
|
3715
3751
|
# find first matching tag
|
3716
3752
|
$key = $self->GroupMatches($reqGroup, \@keys);
|
3717
3753
|
$reqTag = $key || "$name (0)";
|
@@ -4153,7 +4189,11 @@ sub SplitFileName($)
|
|
4153
4189
|
} else {
|
4154
4190
|
($name = $file) =~ tr/\\/\//;
|
4155
4191
|
# remove path
|
4156
|
-
|
4192
|
+
if ($name =~ s/(.*)\///) {
|
4193
|
+
$dir = length($1) ? $1 : '/';
|
4194
|
+
} else {
|
4195
|
+
$dir = '.';
|
4196
|
+
}
|
4157
4197
|
}
|
4158
4198
|
return ($dir, $name);
|
4159
4199
|
}
|
@@ -4568,6 +4608,29 @@ sub RemoveTagsFromList($$$$;$)
|
|
4568
4608
|
$_[0] = \@filteredTags; # update tag list
|
4569
4609
|
}
|
4570
4610
|
|
4611
|
+
#------------------------------------------------------------------------------
|
4612
|
+
# Copy tags from alternate input file
|
4613
|
+
# Inputs: 0) ExifTool ref, 1) family 8 group, 2) list ref for tag keys to copy
|
4614
|
+
# - updates tag key list to match keys newly added to $self
|
4615
|
+
sub CopyAltInfo($$$)
|
4616
|
+
{
|
4617
|
+
my ($self, $g8, $tags) = @_;
|
4618
|
+
my ($tag, $vtag);
|
4619
|
+
return unless $g8 =~ /(\d+)/;
|
4620
|
+
my $et = $$self{ALT_EXIFTOOL}{$g8} or return;
|
4621
|
+
my $altOrder = ($1 + 1) * 100000; # increment file order
|
4622
|
+
foreach $tag (@$tags) {
|
4623
|
+
($vtag = $tag) =~ s/( |$)/ #[$g8]/;
|
4624
|
+
unless (defined $$self{VALUE}{$vtag}) {
|
4625
|
+
$$self{VALUE}{$vtag} = $$et{VALUE}{$tag};
|
4626
|
+
$$self{TAG_INFO}{$vtag} = $$et{TAG_INFO}{$tag};
|
4627
|
+
$$self{TAG_EXTRA}{$vtag} = $$et{TAG_EXTRA}{$tag} || { };
|
4628
|
+
$$self{FILE_ORDER}{$vtag} = ($$et{FILE_ORDER}{$tag} || 0) + $altOrder;
|
4629
|
+
}
|
4630
|
+
$tag = $vtag;
|
4631
|
+
}
|
4632
|
+
}
|
4633
|
+
|
4571
4634
|
#------------------------------------------------------------------------------
|
4572
4635
|
# Set list of found tags from previously requested tags
|
4573
4636
|
# Inputs: 0) ExifTool object reference
|
@@ -4594,11 +4657,17 @@ sub SetFoundTags($)
|
|
4594
4657
|
my $tagHash = $$self{VALUE};
|
4595
4658
|
my $reqTag;
|
4596
4659
|
foreach $reqTag (@$reqTags) {
|
4597
|
-
my (@matches, $group, $allGrp, $allTag, $byValue);
|
4660
|
+
my (@matches, $group, $allGrp, $allTag, $byValue, $g8);
|
4661
|
+
my $et = $self;
|
4598
4662
|
if ($reqTag =~ /^(.*):(.+)/) {
|
4599
4663
|
($group, $tag) = ($1, $2);
|
4600
4664
|
if ($group =~ /^(\*|all)$/i) {
|
4601
4665
|
$allGrp = 1;
|
4666
|
+
} elsif ($reqTag =~ /\bfile(\d+):/i) {
|
4667
|
+
$g8 = "File$1";
|
4668
|
+
$et = $$self{ALT_EXIFTOOL}{$g8} || $self;
|
4669
|
+
$fileOrder = $$et{FILE_ORDER};
|
4670
|
+
$tagHash = $$et{VALUE};
|
4602
4671
|
} elsif ($group !~ /^[-\w:]*$/) {
|
4603
4672
|
$self->Warn("Invalid group name '${group}'");
|
4604
4673
|
$group = 'invalid';
|
@@ -4640,7 +4709,7 @@ sub SetFoundTags($)
|
|
4640
4709
|
}
|
4641
4710
|
if (defined $group and not $allGrp) {
|
4642
4711
|
# keep only specified group
|
4643
|
-
@matches = $
|
4712
|
+
@matches = $et->GroupMatches($group, \@matches);
|
4644
4713
|
next unless @matches or not $allTag;
|
4645
4714
|
}
|
4646
4715
|
if (@matches > 1) {
|
@@ -4649,9 +4718,9 @@ sub SetFoundTags($)
|
|
4649
4718
|
# return only the highest priority tag unless duplicates wanted
|
4650
4719
|
unless ($doDups or $allTag or $allGrp) {
|
4651
4720
|
$tag = shift @matches;
|
4652
|
-
my $oldPriority = $$
|
4721
|
+
my $oldPriority = $$et{PRIORITY}{$tag} || 1;
|
4653
4722
|
foreach (@matches) {
|
4654
|
-
my $priority = $$
|
4723
|
+
my $priority = $$et{PRIORITY}{$_};
|
4655
4724
|
$priority = 1 unless defined $priority;
|
4656
4725
|
next unless $priority >= $oldPriority;
|
4657
4726
|
$tag = $_;
|
@@ -4665,6 +4734,13 @@ sub SetFoundTags($)
|
|
4665
4734
|
# bogus file order entry to avoid warning if sorting in file order
|
4666
4735
|
$$self{FILE_ORDER}{$matches[0]} = 9999;
|
4667
4736
|
}
|
4737
|
+
# copy over necessary information for tags from alternate files
|
4738
|
+
if ($g8) {
|
4739
|
+
$self->CopyAltInfo($g8, \@matches);
|
4740
|
+
# restore variables to original values for main file
|
4741
|
+
$fileOrder = $$self{FILE_ORDER};
|
4742
|
+
$tagHash = $$self{VALUE};
|
4743
|
+
}
|
4668
4744
|
# save indices of tags extracted by value
|
4669
4745
|
push @byValue, scalar(@$rtnTags) .. (scalar(@$rtnTags)+scalar(@matches)-1) if $byValue;
|
4670
4746
|
# save indices of wildcard tags
|
@@ -6347,7 +6423,6 @@ sub ProcessJPEG($$)
|
|
6347
6423
|
{
|
6348
6424
|
local $_;
|
6349
6425
|
my ($self, $dirInfo) = @_;
|
6350
|
-
my ($ch, $s, $length);
|
6351
6426
|
my $options = $$self{OPTIONS};
|
6352
6427
|
my $verbose = $$options{Verbose};
|
6353
6428
|
my $out = $$options{TextOut};
|
@@ -6356,12 +6431,16 @@ sub ProcessJPEG($$)
|
|
6356
6431
|
my $req = $$self{REQ_TAG_LOOKUP};
|
6357
6432
|
my $htmlDump = $$self{HTML_DUMP};
|
6358
6433
|
my %dumpParms = ( Out => $out );
|
6434
|
+
my ($ch, $s, $length, $md5, $md5size);
|
6359
6435
|
my ($success, $wantTrailer, $trailInfo, $foundSOS, %jumbfChunk);
|
6360
6436
|
my (@iccChunk, $iccChunkCount, $iccChunksTotal, @flirChunk, $flirCount, $flirTotal);
|
6361
|
-
my ($preview, $scalado, @dqt, $subSampling, $dumpEnd, %extendedXMP
|
6437
|
+
my ($preview, $scalado, @dqt, $subSampling, $dumpEnd, %extendedXMP);
|
6362
6438
|
|
6363
6439
|
# get pointer to MD5 object if it exists and we are the top-level JPEG
|
6364
|
-
|
6440
|
+
if ($$self{FILE_TYPE} eq 'JPEG' and not $$self{DOC_NUM}) {
|
6441
|
+
$md5 = $$self{ImageDataMD5};
|
6442
|
+
$md5size = 0;
|
6443
|
+
}
|
6365
6444
|
|
6366
6445
|
# check to be sure this is a valid JPG (or J2C, or EXV) file
|
6367
6446
|
return 0 unless $raf->Read($s, 2) == 2 and $s =~ /^\xff[\xd8\x4f\x01]/;
|
@@ -6441,8 +6520,19 @@ sub ProcessJPEG($$)
|
|
6441
6520
|
$nextSegPos = $raf->Tell();
|
6442
6521
|
$len -= 4; # subtract size of length word
|
6443
6522
|
last unless $raf->Seek($len, 1);
|
6444
|
-
} elsif ($md5 and defined $marker and ($marker == 0x00 or $marker == 0xda
|
6445
|
-
|
6523
|
+
} elsif ($md5 and defined $marker and ($marker == 0x00 or $marker == 0xda or
|
6524
|
+
($marker >= 0xd0 and $marker <= 0xd7)))
|
6525
|
+
{
|
6526
|
+
# calculate MD5 for image data (includes leading ff d9 but not trailing ff da)
|
6527
|
+
$md5->add("\xff" . chr($marker));
|
6528
|
+
my $n = $skipped - (length($buff) - 1); # number of extra 0xff's
|
6529
|
+
if (not $n) {
|
6530
|
+
$buff = substr($buff, 0, -1); # remove trailing 0xff
|
6531
|
+
} elsif ($n > 1) {
|
6532
|
+
$buff .= "\xff" x ($n - 1); # add back extra 0xff's
|
6533
|
+
}
|
6534
|
+
$md5->add($buff);
|
6535
|
+
$md5size += $skipped + 2;
|
6446
6536
|
}
|
6447
6537
|
# read second segment too if this was the first
|
6448
6538
|
next unless defined $marker;
|
@@ -6735,7 +6825,7 @@ sub ProcessJPEG($$)
|
|
6735
6825
|
} elsif ($marker == 0xe1) { # APP1 (EXIF, XMP, QVCI, PARROT)
|
6736
6826
|
# (some Kodak cameras don't put a second "\0", and I have seen an
|
6737
6827
|
# example where there was a second 4-byte APP1 segment header)
|
6738
|
-
if ($$segDataPt =~ /^(.{0,4})Exif\0
|
6828
|
+
if ($$segDataPt =~ /^(.{0,4})Exif\0./is) {
|
6739
6829
|
undef $dumpType; # (will be dumped here)
|
6740
6830
|
# this is EXIF data --
|
6741
6831
|
# get the data block (into a common variable)
|
@@ -7457,6 +7547,8 @@ sub ProcessJPEG($$)
|
|
7457
7547
|
delete $extendedXMP{$guid};
|
7458
7548
|
}
|
7459
7549
|
}
|
7550
|
+
# print verbose MD5 message if necessary
|
7551
|
+
print $out "$$self{INDENT}(ImageDataMD5: $md5size bytes of JPEG image data)\n" if $md5size and $verbose;
|
7460
7552
|
# calculate JPEGDigest if requested
|
7461
7553
|
if (@dqt) {
|
7462
7554
|
require Image::ExifTool::JPEGDigest;
|
data/bin/lib/Image/ExifTool.pod
CHANGED
@@ -1727,10 +1727,11 @@ sensitive, and may be prefixed by one or more family 0, 1, 2 or 7 group
|
|
1727
1727
|
names with optional leading family numbers, separated by colons (eg.
|
1728
1728
|
'exif:iso'). A leading '-' indicates tags to be excluded (eg. '-comment'),
|
1729
1729
|
or a trailing '#' causes the ValueConv value to be copied (same as setting
|
1730
|
-
the Type option to 'ValueConv' for this tag only).
|
1731
|
-
|
1732
|
-
|
1733
|
-
|
1730
|
+
the Type option to 'ValueConv' for this tag only). A leading '+' sets the
|
1731
|
+
Replace option to 0 on a per-tag basis (see Options below). Wildcards ('*'
|
1732
|
+
and '?') may be used in the tag name. A tag name of '*' is commonly used
|
1733
|
+
when a group is specified to copy all tags in the group (eg. 'XMP:*'). A
|
1734
|
+
special feature allows tag names of the form 'DSTTAGE<lt>SRCTAG' (or
|
1734
1735
|
'SRCTAGE<gt>DSTTAG') to be specified to copy information to a tag with a
|
1735
1736
|
different name or a specified group. Both 'SRCTAG' and 'DSTTAG' may contain
|
1736
1737
|
wildcards and/or be prefixed by a group name (eg.
|
@@ -1769,7 +1770,9 @@ copies all information while preserving the original family 1 groups, while
|
|
1769
1770
|
The options are the same was for L</SetNewValue>, and are passed directly
|
1770
1771
|
to L</SetNewValue> internally, with a few exceptions:
|
1771
1772
|
|
1772
|
-
- The Replace option defaults to 1 instead of 0 as with L</SetNewValue
|
1773
|
+
- The Replace option defaults to 1 instead of 0 as with L</SetNewValue>,
|
1774
|
+
however the tag name argument may be prefixed with '+' to set the Replace
|
1775
|
+
option to 0 for this argument only.
|
1773
1776
|
|
1774
1777
|
- The AddValue or DelValue option is set for individual tags if '+>' or '->'
|
1775
1778
|
(or '+E<lt>' or '-E<lt>') are used.
|
@@ -1870,6 +1873,31 @@ None.
|
|
1870
1873
|
|
1871
1874
|
=back
|
1872
1875
|
|
1876
|
+
=head2 SetAlternateFile
|
1877
|
+
|
1878
|
+
Specify alternate file from which to read metadata. Tags from the alternate
|
1879
|
+
file are available after L</ExtractInfo> is called or during a call to
|
1880
|
+
L</SetNewValuesFromFile> by using a family 8 group name (eg. 'File1' in the
|
1881
|
+
example below).
|
1882
|
+
|
1883
|
+
$exifTool->SetAlternateFile(File1 => 'images/test1.jpg');
|
1884
|
+
|
1885
|
+
=over 4
|
1886
|
+
|
1887
|
+
=item Inputs:
|
1888
|
+
|
1889
|
+
0) ExifTool object reference
|
1890
|
+
|
1891
|
+
1) Family 8 group name, case insensitive (eg. 'File1', 'File2'...)
|
1892
|
+
|
1893
|
+
2) Name of alternate input file, or undef to reset
|
1894
|
+
|
1895
|
+
=item Return Values:
|
1896
|
+
|
1897
|
+
1 on success, or 0 if the group name is invalid.
|
1898
|
+
|
1899
|
+
=back
|
1900
|
+
|
1873
1901
|
=head2 SetFileModifyDate
|
1874
1902
|
|
1875
1903
|
Write the filesystem modification or creation time from the new value of the
|
@@ -2088,6 +2116,7 @@ The group family numbers are currently available:
|
|
2088
2116
|
5) Metadata Path (eg. JPEG-APP1-IFD0-ExifIFD)
|
2089
2117
|
6) EXIF/TIFF Format (eg. int8u, int32u, undef, string)
|
2090
2118
|
7) Tag ID (eg. ID-271, ID-rights, ID-a9aut)
|
2119
|
+
8) Alternate File Number (eg. File1, File2, File3...)
|
2091
2120
|
|
2092
2121
|
Families 0 and 1 are based on the file structure, and are similar except
|
2093
2122
|
that family 1 is more specific and sub-divides some groups to give more
|
@@ -2140,6 +2169,8 @@ non-numerical ID's may or may not have characters other than [-_A-Za-z0-9]
|
|
2140
2169
|
converted to hex. Note that unlike other group names, the tag ID's of
|
2141
2170
|
family 7 group names are case sensitive (but the leading "ID-" is not).
|
2142
2171
|
|
2172
|
+
Family 8 specifies the alternate file set from a call to L</SetAlternateFile>.
|
2173
|
+
|
2143
2174
|
See L</GetAllGroups [static]> for complete lists of group names.
|
2144
2175
|
|
2145
2176
|
=back
|
@@ -2392,6 +2423,10 @@ leading "0x" if the HexTagIDs option is set, or decimal otherwise.
|
|
2392
2423
|
Characters in non-numerical ID's which are not valid in a group name are
|
2393
2424
|
returned as 2 hex digits.)
|
2394
2425
|
|
2426
|
+
=item Family 8 (Alternate File):
|
2427
|
+
|
2428
|
+
File#
|
2429
|
+
|
2395
2430
|
=back
|
2396
2431
|
|
2397
2432
|
Note: This function may also be called as an ExifTool member function to
|
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: 12.
|
4
|
+
version: 12.60.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: 2023-
|
12
|
+
date: 2023-04-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: exiftool
|