exiftool-vendored.exe 12.65.0 → 12.69.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/exiftool_files/Changes +60 -2
- package/bin/exiftool_files/README +7 -7
- package/bin/exiftool_files/exiftool.pl +35 -25
- package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +6 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +55 -13
- package/bin/exiftool_files/lib/Image/ExifTool/DNG.pm +25 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +95 -13
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +20 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +17 -12
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +47 -11
- package/bin/exiftool_files/lib/Image/ExifTool/PLUS.pm +19 -4
- package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +14 -7
- package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +13 -9
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +8 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PhotoMechanic.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +62 -52
- package/bin/exiftool_files/lib/Image/ExifTool/README +7 -3
- package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +8 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +66 -21
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +6881 -6709
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +454 -37
- package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +18 -16
- package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +14 -4
- package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +2 -0
- package/bin/exiftool_files/lib/Image/ExifTool/WriteRIFF.pl +22 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +53 -11
- package/bin/exiftool_files/lib/Image/ExifTool/XISF.pm +185 -0
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +67 -2
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +36 -1
- package/bin/exiftool_files/lib/Image/ExifTool.pm +45 -20
- package/bin/exiftool_files/lib/Image/ExifTool.pod +20 -10
- package/package.json +2 -2
|
@@ -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.
|
|
34
|
+
$VERSION = '1.90';
|
|
35
35
|
|
|
36
36
|
sub ProcessFujiDir($$$);
|
|
37
37
|
sub ProcessFaceRec($$$);
|
|
@@ -428,6 +428,14 @@ my %faceCategories = (
|
|
|
428
428
|
Name => 'ShadowTone',
|
|
429
429
|
Writable => 'int32s',
|
|
430
430
|
PrintConv => {
|
|
431
|
+
OTHER => sub {
|
|
432
|
+
my ($val, $inv) = @_;
|
|
433
|
+
if ($inv) {
|
|
434
|
+
return int(-$val * 16);
|
|
435
|
+
} else {
|
|
436
|
+
return -$val / 16;
|
|
437
|
+
}
|
|
438
|
+
},
|
|
431
439
|
-64 => '+4 (hardest)',
|
|
432
440
|
-48 => '+3 (very hard)',
|
|
433
441
|
-32 => '+2 (hard)',
|
|
@@ -441,6 +449,14 @@ my %faceCategories = (
|
|
|
441
449
|
Name => 'HighlightTone',
|
|
442
450
|
Writable => 'int32s',
|
|
443
451
|
PrintConv => {
|
|
452
|
+
OTHER => sub {
|
|
453
|
+
my ($val, $inv) = @_;
|
|
454
|
+
if ($inv) {
|
|
455
|
+
return int(-$val * 16);
|
|
456
|
+
} else {
|
|
457
|
+
return -$val / 16;
|
|
458
|
+
}
|
|
459
|
+
},
|
|
444
460
|
-64 => '+4 (hardest)',
|
|
445
461
|
-48 => '+3 (very hard)',
|
|
446
462
|
-32 => '+2 (hard)',
|
|
@@ -670,6 +686,7 @@ my %faceCategories = (
|
|
|
670
686
|
0x800 => 'Classic Negative', #forum10536
|
|
671
687
|
0x900 => 'Bleach Bypass', #forum10890
|
|
672
688
|
0xa00 => 'Nostalgic Neg', #forum12085
|
|
689
|
+
0xb00 => 'Reala ACE', #forum15190
|
|
673
690
|
},
|
|
674
691
|
},
|
|
675
692
|
0x1402 => { #2
|
|
@@ -897,6 +914,8 @@ my %faceCategories = (
|
|
|
897
914
|
25 => 'Aircraft Cockpit',
|
|
898
915
|
26 => 'Train Front',
|
|
899
916
|
27 => 'Train Cockpit',
|
|
917
|
+
28 => 'Animal Head (28)', #forum15192
|
|
918
|
+
29 => 'Animal Body (29)', #forum15192
|
|
900
919
|
},'REPEAT'],
|
|
901
920
|
},
|
|
902
921
|
# 0x4202 int8u[-1] - number of cooredinates in each rectangle? (ref 11)
|
|
@@ -29,7 +29,7 @@ use vars qw($VERSION);
|
|
|
29
29
|
use Image::ExifTool qw(:Public);
|
|
30
30
|
use Image::ExifTool::GPS;
|
|
31
31
|
|
|
32
|
-
$VERSION = '1.
|
|
32
|
+
$VERSION = '1.73';
|
|
33
33
|
|
|
34
34
|
sub JITTER() { return 2 } # maximum time jitter
|
|
35
35
|
|
|
@@ -1109,7 +1109,7 @@ sub SetGeoValues($$;$)
|
|
|
1109
1109
|
$iExt = $i1;
|
|
1110
1110
|
}
|
|
1111
1111
|
if (abs($time - $tn) > $geoMaxExtSecs) {
|
|
1112
|
-
$err or $err = 'Time is too far from nearest GPS fix';
|
|
1112
|
+
$err or $err = 'Time is too far from nearest GPS fix'.' '.abs($time-$tn).' '.$geoMaxExtSecs;
|
|
1113
1113
|
$et->VPrint(2, ' Nearest fix: ', PrintFixTime($tn), "\n") if $verbose > 2;
|
|
1114
1114
|
$fix = { } if $$geotag{DateTimeOnly};
|
|
1115
1115
|
} else {
|
|
@@ -1196,24 +1196,29 @@ Category: foreach $category (qw{pos track alt orient atemp}) {
|
|
|
1196
1196
|
# write GPSDateStamp if date included in track log, otherwise delete it
|
|
1197
1197
|
$gpsDate = sprintf('%.2d:%.2d:%.2d', $t[5]+1900, $t[4]+1, $t[3]) unless $noDate;
|
|
1198
1198
|
# write GPSAltitude tags if altitude included in track log, otherwise delete them
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
$gpsAltRef = ($$fix{alt} < 0 ? 1 : 0);
|
|
1202
|
-
} elsif ($$has{alt} and defined $iExt) {
|
|
1199
|
+
my $alt = $$fix{alt};
|
|
1200
|
+
if (not defined $alt and $$has{alt} and defined $iExt) {
|
|
1203
1201
|
my $tFix = FindFix($et,'alt',$times,$points,$iExt,$iDir,$geoMaxExtSecs);
|
|
1204
|
-
if
|
|
1205
|
-
$gpsAlt = abs $$tFix{alt};
|
|
1206
|
-
$gpsAltRef = ($$tFix{alt} < 0 ? 1 : 0);
|
|
1207
|
-
}
|
|
1202
|
+
$alt = $$tFix{alt} if $tFix;
|
|
1208
1203
|
}
|
|
1209
1204
|
# set new GPS tag values (EXIF, or XMP if write group is 'xmp')
|
|
1210
|
-
my ($xmp, $exif, @r);
|
|
1205
|
+
my ($xmp, $exif, $qt, @r);
|
|
1211
1206
|
my %opts = ( Type => 'ValueConv' ); # write ValueConv values
|
|
1212
1207
|
if ($writeGroup) {
|
|
1213
1208
|
$opts{Group} = $writeGroup;
|
|
1214
1209
|
$xmp = ($writeGroup =~ /xmp/i);
|
|
1215
1210
|
$exif = ($writeGroup =~ /^(exif|gps)$/i);
|
|
1211
|
+
$qt = $writeGroup =~ /^(quicktime|keys|itemlist|userdata)$/i;
|
|
1212
|
+
}
|
|
1213
|
+
# set QuickTime GPSCoordinates
|
|
1214
|
+
my $coords = "$$fix{lat} $$fix{lon}";
|
|
1215
|
+
if (defined $alt) {
|
|
1216
|
+
$gpsAlt = abs $alt;
|
|
1217
|
+
$gpsAltRef = ($alt < 0 ? 1 : 0);
|
|
1218
|
+
$coords .= " $alt";
|
|
1216
1219
|
}
|
|
1220
|
+
@r = $et->SetNewValue(GPSCoordinates => $coords, %opts);
|
|
1221
|
+
return $err if $qt; # all done if writing to QuickTime only
|
|
1217
1222
|
# (capture error messages by calling SetNewValue in list context)
|
|
1218
1223
|
@r = $et->SetNewValue(GPSLatitude => $$fix{lat}, %opts);
|
|
1219
1224
|
@r = $et->SetNewValue(GPSLongitude => $$fix{lon}, %opts);
|
|
@@ -1288,7 +1293,7 @@ Category: foreach $category (qw{pos track alt orient atemp}) {
|
|
|
1288
1293
|
GPSAltitude GPSAltitudeRef GPSDateStamp GPSTimeStamp GPSDateTime
|
|
1289
1294
|
GPSTrack GPSTrackRef GPSSpeed GPSSpeedRef GPSImgDirection
|
|
1290
1295
|
GPSImgDirectionRef GPSPitch GPSRoll CameraElevationAngle
|
|
1291
|
-
AmbientTemperature))
|
|
1296
|
+
AmbientTemperature GPSCoordinates))
|
|
1292
1297
|
{
|
|
1293
1298
|
my @r = $et->SetNewValue($_, undef, %opts);
|
|
1294
1299
|
}
|
|
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
|
|
|
65
65
|
use Image::ExifTool::GPS;
|
|
66
66
|
use Image::ExifTool::XMP;
|
|
67
67
|
|
|
68
|
-
$VERSION = '4.
|
|
68
|
+
$VERSION = '4.27';
|
|
69
69
|
|
|
70
70
|
sub LensIDConv($$$);
|
|
71
71
|
sub ProcessNikonAVI($$$);
|
|
@@ -676,6 +676,7 @@ sub GetAFPointGrid($$;$);
|
|
|
676
676
|
'07 40 30 45 2D 35 03 02.2' => 'Voigtlander Ultragon 19-35mm F3.5-4.5 VMV', #NJ
|
|
677
677
|
'71 48 64 64 24 24 00 00' => 'Voigtlander APO-Skopar 90mm F2.8 SL IIs', #30
|
|
678
678
|
'FD 00 50 50 18 18 DF 00' => 'Voigtlander APO-Lanthar 50mm F2 Aspherical', #35
|
|
679
|
+
'FD 00 44 44 18 18 DF 00' => 'Voigtlander APO-Lanthar 35mm F2', #30
|
|
679
680
|
#
|
|
680
681
|
'00 40 2D 2D 2C 2C 00 00' => 'Carl Zeiss Distagon T* 3.5/18 ZF.2',
|
|
681
682
|
'00 48 27 27 24 24 00 00' => 'Carl Zeiss Distagon T* 2.8/15 ZF.2', #MykytaKozlov
|
|
@@ -1188,6 +1189,7 @@ my %subjectDetectionZ9 = (
|
|
|
1188
1189
|
2 => 'People',
|
|
1189
1190
|
3 => 'Animals',
|
|
1190
1191
|
4 => 'Vehicles',
|
|
1192
|
+
5 => 'Birds',
|
|
1191
1193
|
6 => 'Airplanes',
|
|
1192
1194
|
);
|
|
1193
1195
|
|
|
@@ -1983,6 +1985,14 @@ my %base64coord = (
|
|
|
1983
1985
|
Writable => 'rational64s',
|
|
1984
1986
|
Count => 2,
|
|
1985
1987
|
},
|
|
1988
|
+
0x0044 => { #28
|
|
1989
|
+
Name => 'JPGCompression',
|
|
1990
|
+
RawConv => '($val) ? $val : undef', # undef for raw files
|
|
1991
|
+
PrintConv => {
|
|
1992
|
+
1 => 'Size Priority',
|
|
1993
|
+
3 => 'Optimal Quality',
|
|
1994
|
+
},
|
|
1995
|
+
},
|
|
1986
1996
|
0x0045 => { #IB
|
|
1987
1997
|
Name => 'CropArea',
|
|
1988
1998
|
Notes => 'left, top, width, height',
|
|
@@ -2413,8 +2423,8 @@ my %base64coord = (
|
|
|
2413
2423
|
},
|
|
2414
2424
|
},
|
|
2415
2425
|
{ # (Z6_2 firmware version 1.00 and Z7II firmware versions 1.00 & 1.01, ref 28)
|
|
2416
|
-
# 0800=Z6/Z7 0801=Z50 0802=Z5 0803=Z6II/Z7II 0804=Zfc 0807=Z30
|
|
2417
|
-
Condition => '$$valPt =~ /^080[
|
|
2426
|
+
# 0800=Z6/Z7 0801=Z50 0802=Z5 0803=Z6II/Z7II 0804=Zfc 0807=Z30 0808=Zf
|
|
2427
|
+
Condition => '$$valPt =~ /^080[0123478]/',
|
|
2418
2428
|
Name => 'ShotInfoZ7II',
|
|
2419
2429
|
SubDirectory => {
|
|
2420
2430
|
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ7II',
|
|
@@ -2473,7 +2483,7 @@ my %base64coord = (
|
|
|
2473
2483
|
},
|
|
2474
2484
|
0x0094 => { Name => 'SaturationAdj', Writable => 'int16s' },
|
|
2475
2485
|
0x0095 => { Name => 'NoiseReduction', Writable => 'string' }, # ("Off" or "FPNR"=long exposure NR)
|
|
2476
|
-
0x0096 => {
|
|
2486
|
+
0x0096 => { # (not found in NRW files, but also not in all NEF's)
|
|
2477
2487
|
Name => 'NEFLinearizationTable', # same table as DNG LinearizationTable (ref JD)
|
|
2478
2488
|
Writable => 'undef',
|
|
2479
2489
|
Flags => [ 'Binary', 'Protected' ],
|
|
@@ -4578,7 +4588,7 @@ my %base64coord = (
|
|
|
4578
4588
|
RawConv => '$$self{AFInfo2Version} = $val',
|
|
4579
4589
|
},
|
|
4580
4590
|
5 => { #28
|
|
4581
|
-
Name => 'AFAreaMode',
|
|
4591
|
+
Name => 'AFAreaMode', #reflects the mode active when the shutter is tripped, not the position of the Focus Mode button (which is recorded in MenuSettingsZ9 tag also named AfAreaMode)
|
|
4582
4592
|
PrintConv => {
|
|
4583
4593
|
192 => 'Pinpoint',
|
|
4584
4594
|
193 => 'Single',
|
|
@@ -4594,7 +4604,7 @@ my %base64coord = (
|
|
|
4594
4604
|
},
|
|
4595
4605
|
10 => {
|
|
4596
4606
|
Name => 'AFPointsUsed',
|
|
4597
|
-
Condition => '$$self{AFAreaMode} == 6',
|
|
4607
|
+
Condition => 'defined $$self{AFAreaMode} and $$self{AFAreaMode} == 6', #only valid for Auto AF Area mode. Other modes handled via AFAreaXPosition/AFAreaYPosition
|
|
4598
4608
|
Format => 'undef[51]',
|
|
4599
4609
|
ValueConv => 'join(" ", unpack("H2"x51, $val))',
|
|
4600
4610
|
ValueConvInv => '$val=~tr/ //d; pack("H*",$val)',
|
|
@@ -5432,6 +5442,13 @@ my %nikonFocalConversions = (
|
|
|
5432
5442
|
37 => 'Nikkor Z 600mm f/4 TC VR S', #28
|
|
5433
5443
|
38 => 'Nikkor Z 85mm f/1.2 S', #28
|
|
5434
5444
|
39 => 'Nikkor Z 17-28mm f/2.8', #IB
|
|
5445
|
+
40 => 'NIKKOR Z 26mm f/2.8', #28
|
|
5446
|
+
41 => 'NIKKOR Z DX 12-28mm f/3.5-5.6 PZ VR', #28
|
|
5447
|
+
42 => 'Nikkor Z 180-600mm f/5.6-6.3 VR', #30
|
|
5448
|
+
43 => 'NIKKOR Z DX 24mm f/1.7', #28
|
|
5449
|
+
44 => 'NIKKOR Z 70-180mm f/2.8', #28
|
|
5450
|
+
45 => 'NIKKOR Z 600mm f/6.3 VR S', #28
|
|
5451
|
+
48 => 'Nikkor Z 135mm f/1.8 S Plena', #28
|
|
5435
5452
|
32768 => 'Nikkor Z 400mm f/2.8 TC VR S TC-1.4x', #28
|
|
5436
5453
|
32769 => 'Nikkor Z 600mm f/4 TC VR S TC-1.4x', #28
|
|
5437
5454
|
},
|
|
@@ -6048,6 +6065,24 @@ my %nikonFocalConversions = (
|
|
|
6048
6065
|
Format => 'int32u',
|
|
6049
6066
|
Priority => 0,
|
|
6050
6067
|
},
|
|
6068
|
+
671.1 => { # 0x29f
|
|
6069
|
+
Name => 'JPGCompression',
|
|
6070
|
+
Mask => 0x40,
|
|
6071
|
+
PrintConv => {
|
|
6072
|
+
0 => 'Size Priority',
|
|
6073
|
+
1 => 'Optimal Quality',
|
|
6074
|
+
},
|
|
6075
|
+
},
|
|
6076
|
+
# this works for one set of D3S samples, but is 0 in some others
|
|
6077
|
+
#671.2 => { # 0x29f
|
|
6078
|
+
# Name => 'Quality',
|
|
6079
|
+
# Mask => 0x03,
|
|
6080
|
+
# PrintConv => {
|
|
6081
|
+
# 1 => 'Fine',
|
|
6082
|
+
# 2 => 'Normal',
|
|
6083
|
+
# 3 => 'Basic',
|
|
6084
|
+
# },
|
|
6085
|
+
#},
|
|
6051
6086
|
0x2ce => { #(NC)
|
|
6052
6087
|
Name => 'CustomSettingsD3S',
|
|
6053
6088
|
Format => 'undef[27]',
|
|
@@ -8492,7 +8527,7 @@ my %nikonFocalConversions = (
|
|
|
8492
8527
|
DATAMEMBER => [ 0x0bea, 0x0beb ],
|
|
8493
8528
|
0x0be8 => {
|
|
8494
8529
|
Name => 'AFAreaInitialXPosition', #stored as a representation of the horizontal position of the center of the portion of the focus box positioned top left when in Wide Area (L/S/C1/C2) focus modes (before subject detection potentially refines focus)
|
|
8495
|
-
Condition => '$$self{ShutterMode} ne 96 and $$self{AFAreaMode} < 2 ', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
|
|
8530
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and defined $$self{AFAreaMode} and $$self{AFAreaMode} < 2 ', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
|
|
8496
8531
|
Format => 'int8s',
|
|
8497
8532
|
PrintConv => q{
|
|
8498
8533
|
#in FX mode and Single-point, the 29 horizontal focus points are spaced 259 pixels apart starting at pixel 502 and ending at 7754. Spacing is the same for Wide(L/C1/C2) with different start points.
|
|
@@ -8554,7 +8589,7 @@ my %nikonFocalConversions = (
|
|
|
8554
8589
|
},
|
|
8555
8590
|
0x0be9 => {
|
|
8556
8591
|
Name =>'AFAreaInitialYPosition', #stored as a representation of the vertical position of the center of the portion of the focus box positioned top left when in Wide Area (L/S/C1/C2) focus modes (before subject detection potentially refines focus)
|
|
8557
|
-
Condition => '$$self{ShutterMode} ne 96 and $$self{AFAreaMode} < 2', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
|
|
8592
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96 and defined $$self{AFAreaMode} and $$self{AFAreaMode} < 2', #not valid for C30/C60/C120 or for Area Modes 1:1 and 16:19
|
|
8558
8593
|
Format => 'int8s',
|
|
8559
8594
|
PrintConv => q{
|
|
8560
8595
|
#in FX mode and Single-point, the 17 vertical focus points are spaced 291 pixels apart starting at pixel 424 and ending at 5080. Spacing is the same for Wide(L/C1/C2)
|
|
@@ -8618,13 +8653,13 @@ my %nikonFocalConversions = (
|
|
|
8618
8653
|
},
|
|
8619
8654
|
0x0bea => {
|
|
8620
8655
|
Name => 'AFAreaInitialWidth',
|
|
8621
|
-
Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8656
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8622
8657
|
ValueConv => '$$self{VALUE}{PhotoShootingMenuBankImageArea} eq 0 ? $val : int($val * 2 / 3)', #DX mode requires scaling down TODO: add support ImageAreas 1:1 and 16:9
|
|
8623
8658
|
RawConv => '$$self{AFAreaInitialWidth} = 1 + int ($val / 4)', #convert from [3, 11, 19, 35, 51, 75] to [1, 3, 5, 9 13, 19] to match camera options for C1/C2 focus modes .. input/output of 11/3 is for Wide(S)
|
|
8624
8659
|
},
|
|
8625
8660
|
0x0beb => {
|
|
8626
8661
|
Name => 'AFAreaInitialHeight',
|
|
8627
|
-
Condition => '$$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8662
|
+
Condition => '$$self{ShutterMode} and $$self{ShutterMode} ne 96', #not valid for C30/C60/C120
|
|
8628
8663
|
ValueConv => '$$self{VALUE}{PhotoShootingMenuBankImageArea} eq 0 ? $val : int($val * 2 / 3)', #DX mode requires scaling down TODO: add support ImageAreas 1:1 and 16:9
|
|
8629
8664
|
RawConv => '$$self{AFAreaInitialHeight} = 1 + int ($val / 7) ', #convert from [6, 20, 33, 46, 73] to [1, 3, 5, 7, 11] to match camera options for C1/C2 focus modes .. input/output of 33/5 is for Wide(L)
|
|
8630
8665
|
},
|
|
@@ -8840,7 +8875,7 @@ my %nikonFocalConversions = (
|
|
|
8840
8875
|
%binaryDataAttrs,
|
|
8841
8876
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
8842
8877
|
DATAMEMBER => [ 90, 176, 180, 328, 352, 858 ],
|
|
8843
|
-
NOTES => 'These tags are used by the Z5, Z6, Z7, Z6II, Z7II, Z50 and
|
|
8878
|
+
NOTES => 'These tags are used by the Z5, Z6, Z7, Z6II, Z7II, Z50, Zfc and Zf.',
|
|
8844
8879
|
#48 SelfTimer' #0=> no 1=> yes works for Z7II firmware 1.40, but not 1.30. Follow-up required.
|
|
8845
8880
|
90 => {
|
|
8846
8881
|
Name => 'SingleFrame', #0=> Single Frame 1=> one of the continuous modes
|
|
@@ -9808,6 +9843,7 @@ my %nikonFocalConversions = (
|
|
|
9808
9843
|
290 => { Name => 'PhotoShootingMenuBank', PrintConv => \%banksZ9 },
|
|
9809
9844
|
292 => { Name => 'ExtendedMenuBanks', PrintConv => \%offOn }, # single tag from both Photo & Video menus
|
|
9810
9845
|
328 => { Name => 'PhotoShootingMenuBankImageArea', PrintConv => \%imageAreaZ9 },
|
|
9846
|
+
#334 JPGCompression 0 => 'Size Priority', 1 => 'Optimal Quality',
|
|
9811
9847
|
342 => { Name => 'AutoISO', PrintConv => \%offOn },
|
|
9812
9848
|
344 => {
|
|
9813
9849
|
Name => 'ISOAutoHiLimit',
|
|
@@ -14,7 +14,7 @@ use strict;
|
|
|
14
14
|
use vars qw($VERSION);
|
|
15
15
|
use Image::ExifTool::XMP;
|
|
16
16
|
|
|
17
|
-
$VERSION = '1.
|
|
17
|
+
$VERSION = '1.02';
|
|
18
18
|
|
|
19
19
|
sub ValidateMediaSummary($);
|
|
20
20
|
|
|
@@ -2311,12 +2311,13 @@ my %mediaMatrix = (
|
|
|
2311
2311
|
GROUPS => { 0 => 'XMP', 1 => 'XMP-plus', 2 => 'Author' },
|
|
2312
2312
|
NAMESPACE => 'plus',
|
|
2313
2313
|
NOTES => q{
|
|
2314
|
-
PLUS (Picture Licensing Universal System) License Data Format
|
|
2314
|
+
PLUS (Picture Licensing Universal System) License Data Format 2.0.1 XMP
|
|
2315
2315
|
tags. Note that all controlled-vocabulary tags in this table (ie. tags with
|
|
2316
2316
|
a fixed set of values) have raw values which begin with
|
|
2317
2317
|
"http://ns.useplus.org/ldf/vocab/", but to reduce clutter this prefix has
|
|
2318
|
-
been removed from the values shown below
|
|
2319
|
-
the
|
|
2318
|
+
been removed from the values shown below, and from the values read and
|
|
2319
|
+
written with the -n option. See L<http://ns.useplus.org/> for the complete
|
|
2320
|
+
specification.
|
|
2320
2321
|
},
|
|
2321
2322
|
Version => { Name => 'PLUSVersion' },
|
|
2322
2323
|
Licensee => {
|
|
@@ -2529,6 +2530,20 @@ my %mediaMatrix = (
|
|
|
2529
2530
|
Custom8 => { List => 'Bag', Writable => 'lang-alt' },
|
|
2530
2531
|
Custom9 => { List => 'Bag', Writable => 'lang-alt' },
|
|
2531
2532
|
Custom10 => { List => 'Bag', Writable => 'lang-alt' },
|
|
2533
|
+
DataMining => {
|
|
2534
|
+
%plusVocab,
|
|
2535
|
+
PrintConv => {
|
|
2536
|
+
'DMI-UNSPECIFIED' => 'Unspecified - no prohibition defined',
|
|
2537
|
+
'DMI-ALLOWED' => 'Allowed',
|
|
2538
|
+
'DMI-PROHIBITED-AIMLTRAINING' => 'Prohibited for AI/ML training',
|
|
2539
|
+
'DMI-PROHIBITED-GENAIMLTRAINING' => 'Prohibited for Generative AI/ML training',
|
|
2540
|
+
'DMI-PROHIBITED-EXCEPTSEARCHENGINEINDEXING' => 'Prohibited except for search engine indexing',
|
|
2541
|
+
'DMI-PROHIBITED' => 'Prohibited',
|
|
2542
|
+
'DMI-PROHIBITED-SEECONSTRAINT' => 'Prohibited, see plus:OtherConstraints',
|
|
2543
|
+
'DMI-PROHIBITED-SEEEMBEDDEDRIGHTSEXPR' => 'Prohibited, see iptcExt:EmbdEncRightsExpr',
|
|
2544
|
+
'DMI-PROHIBITED-SEELINKEDRIGHTSEXPR' => 'Prohibited, see iptcExt:LinkedEncRightsExpr',
|
|
2545
|
+
},
|
|
2546
|
+
},
|
|
2532
2547
|
);
|
|
2533
2548
|
|
|
2534
2549
|
#------------------------------------------------------------------------------
|
|
@@ -36,7 +36,7 @@ use strict;
|
|
|
36
36
|
use vars qw($VERSION $AUTOLOAD %stdCase);
|
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
38
38
|
|
|
39
|
-
$VERSION = '1.
|
|
39
|
+
$VERSION = '1.65';
|
|
40
40
|
|
|
41
41
|
sub ProcessPNG_tEXt($$$);
|
|
42
42
|
sub ProcessPNG_iTXt($$$);
|
|
@@ -973,13 +973,20 @@ sub FoundPNG($$$$;$$$$)
|
|
|
973
973
|
undef $processProc if $wasCompressed and $processProc and $processProc eq \&ProcessPNG_Compressed;
|
|
974
974
|
# rewrite this directory if necessary (but always process TextualData normally)
|
|
975
975
|
if ($outBuff and not $processProc and $subTable ne \%Image::ExifTool::PNG::TextualData) {
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
976
|
+
# allow JUMBF to be deleted (may want to expand this for other types too?)
|
|
977
|
+
if ($dirName eq 'JUMBF' and $$et{DEL_GROUP}{$dirName}) {
|
|
978
|
+
$$outBuff = '';
|
|
979
|
+
++$$et{CHANGED};
|
|
980
|
+
$et->VPrint(0, " Deleting $dirName");
|
|
981
|
+
} else {
|
|
982
|
+
return 1 unless $$et{EDIT_DIRS}{$dirName};
|
|
983
|
+
$$outBuff = $et->WriteDirectory(\%subdirInfo, $subTable);
|
|
984
|
+
if ($tagName eq 'XMP' and $$outBuff) {
|
|
985
|
+
# make sure the XMP is marked as read-only
|
|
986
|
+
Image::ExifTool::XMP::ValidateXMP($outBuff,'r');
|
|
987
|
+
}
|
|
988
|
+
DoneDir($et, $dirName, $outBuff, $$tagInfo{NonStandard});
|
|
981
989
|
}
|
|
982
|
-
DoneDir($et, $dirName, $outBuff, $$tagInfo{NonStandard});
|
|
983
990
|
} else {
|
|
984
991
|
$processed = $et->ProcessDirectory(\%subdirInfo, $subTable, $processProc);
|
|
985
992
|
}
|
|
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
|
|
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
38
38
|
use Image::ExifTool::Exif;
|
|
39
39
|
|
|
40
|
-
$VERSION = '2.
|
|
40
|
+
$VERSION = '2.20';
|
|
41
41
|
|
|
42
42
|
sub ProcessLeicaLEIC($$$);
|
|
43
43
|
sub WhiteBalanceConv($;$$);
|
|
@@ -1070,18 +1070,18 @@ my %shootingMode = (
|
|
|
1070
1070
|
},
|
|
1071
1071
|
},
|
|
1072
1072
|
# 0x71 - undef[128] (maybe text stamp text?)
|
|
1073
|
+
# 0x72,0x73,0x74,0x75,0x77,0x78: 0
|
|
1074
|
+
# 0x76: 0, (3 for G6 with HDR on, ref 18)
|
|
1075
|
+
0x76 => { #18/21/forum15298
|
|
1076
|
+
Name => 'MergedImages',
|
|
1077
|
+
Writable => 'int16u',
|
|
1078
|
+
Notes => 'number of images in HDR or Live View Composite picture',
|
|
1079
|
+
},
|
|
1073
1080
|
0x77 => { #18
|
|
1074
1081
|
Name => 'BurstSpeed',
|
|
1075
1082
|
Writable => 'int16u',
|
|
1076
1083
|
Notes => 'images per second',
|
|
1077
1084
|
},
|
|
1078
|
-
# 0x72,0x73,0x74,0x75,0x77,0x78: 0
|
|
1079
|
-
# 0x76: 0, (3 for G6 with HDR on, ref 18)
|
|
1080
|
-
0x76 => { #18/21
|
|
1081
|
-
Name => 'HDRShot',
|
|
1082
|
-
Writable => 'int16u',
|
|
1083
|
-
PrintConv => { 0 => 'Off', 3 => 'On' },
|
|
1084
|
-
},
|
|
1085
1085
|
0x79 => { #PH (GH2)
|
|
1086
1086
|
Name => 'IntelligentD-Range',
|
|
1087
1087
|
Writable => 'int16u',
|
|
@@ -2834,10 +2834,14 @@ sub ProcessLeicaTrailer($;$)
|
|
|
2834
2834
|
my $val = Image::ExifTool::Exif::RebuildMakerNotes($et, \%dirInfo, $tagTablePtr);
|
|
2835
2835
|
unless (defined $val) {
|
|
2836
2836
|
$et->Warn('Error rebuilding maker notes (may be corrupt)') if $len > 4;
|
|
2837
|
-
$val = $buff
|
|
2837
|
+
$val = $buff;
|
|
2838
2838
|
}
|
|
2839
2839
|
my $key = $et->FoundTag($tagInfo, $val);
|
|
2840
2840
|
$et->SetGroup($key, 'ExifIFD');
|
|
2841
|
+
if ($$et{MAKER_NOTE_FIXUP}) {
|
|
2842
|
+
$$et{TAG_EXTRA}{$key}{Fixup} = $$et{MAKER_NOTE_FIXUP};
|
|
2843
|
+
delete $$et{MAKER_NOTE_FIXUP};
|
|
2844
|
+
}
|
|
2841
2845
|
}
|
|
2842
2846
|
}
|
|
2843
2847
|
SetByteOrder($oldOrder);
|
|
@@ -58,7 +58,7 @@ use Image::ExifTool::Exif;
|
|
|
58
58
|
use Image::ExifTool::GPS;
|
|
59
59
|
use Image::ExifTool::HP;
|
|
60
60
|
|
|
61
|
-
$VERSION = '3.
|
|
61
|
+
$VERSION = '3.44';
|
|
62
62
|
|
|
63
63
|
sub CryptShutterCount($$);
|
|
64
64
|
sub PrintFilter($$$);
|
|
@@ -175,6 +175,7 @@ sub DecodeAFPoints($$$$;$);
|
|
|
175
175
|
'4 2' => 'smc PENTAX-FA 80-320mm F4.5-5.6',
|
|
176
176
|
'4 3' => 'smc PENTAX-FA 43mm F1.9 Limited',
|
|
177
177
|
'4 6' => 'smc PENTAX-FA 35-80mm F4-5.6',
|
|
178
|
+
'4 7' => 'Irix 45mm F1.4', #27
|
|
178
179
|
'4 8' => 'Irix 150mm F2.8 Macro', #exiv2 issue 1084
|
|
179
180
|
'4 9' => 'Irix 11mm F4 Firefly', #27
|
|
180
181
|
'4 10' => 'Irix 15mm F2.4', #27
|
|
@@ -265,6 +266,7 @@ sub DecodeAFPoints($$$$;$);
|
|
|
265
266
|
'6 14' => 'smc PENTAX-FA* Macro 200mm F4 ED[IF]',
|
|
266
267
|
'7 0' => 'smc PENTAX-DA 21mm F3.2 AL Limited', #13
|
|
267
268
|
'7 58' => 'smc PENTAX-D FA Macro 100mm F2.8 WR', #PH - this bit of information cost me $600 ;)
|
|
269
|
+
# '7 58' also 'HD PENTAX-D FA MACRO 100mm F2.8 ED AW' (ref 27)
|
|
268
270
|
'7 75' => 'Tamron SP AF 70-200mm F2.8 Di LD [IF] Macro (A001)', #(Anton Bondar)
|
|
269
271
|
'7 201' => 'smc Pentax-DA L 50-200mm F4-5.6 ED WR', #(Bruce Rusk)
|
|
270
272
|
'7 202' => 'smc PENTAX-DA L 18-55mm F3.5-5.6 AL WR', #29
|
|
@@ -554,6 +556,8 @@ my %pentaxModelID = (
|
|
|
554
556
|
0x13240 => 'K-1 Mark II', # (Ricoh)
|
|
555
557
|
0x13254 => 'K-3 Mark III', #IB (Ricoh)
|
|
556
558
|
0x13290 => 'WG-70', # (Ricoh)
|
|
559
|
+
0x1329a => 'GR IIIx', # (Ricoh)
|
|
560
|
+
0x132d6 => 'K-3 Mark III Monochrome', #github226 (Ricoh)
|
|
557
561
|
);
|
|
558
562
|
|
|
559
563
|
# Pentax city codes - (PH, Optio WP)
|
|
@@ -969,6 +973,7 @@ my %binaryDataAttrs = (
|
|
|
969
973
|
5 => 'Premium', #PH (K20D)
|
|
970
974
|
7 => 'RAW (pixel shift enabled)', #forum6536 (K-3 II)
|
|
971
975
|
8 => 'Dynamic Pixel Shift', #IB
|
|
976
|
+
9 => 'Monochrome', #github226
|
|
972
977
|
65535 => 'n/a', #PH (Q MOV video)
|
|
973
978
|
},
|
|
974
979
|
},
|
|
@@ -2142,6 +2147,7 @@ my %binaryDataAttrs = (
|
|
|
2142
2147
|
11 => 'Flat', #31 (K-70)
|
|
2143
2148
|
# 256 - seen for GR III
|
|
2144
2149
|
# 262 - seen for GR III
|
|
2150
|
+
32768 => 'n/a',
|
|
2145
2151
|
},
|
|
2146
2152
|
},
|
|
2147
2153
|
0x0050 => { #PH
|
|
@@ -2228,6 +2234,7 @@ my %binaryDataAttrs = (
|
|
|
2228
2234
|
18 => '18 (KP)', #PH
|
|
2229
2235
|
19 => '19 (GR III)', #PH
|
|
2230
2236
|
20 => '20 (K-3III)', #PH
|
|
2237
|
+
21 => '21 (K-3IIIMonochrome)', #github226
|
|
2231
2238
|
},
|
|
2232
2239
|
},
|
|
2233
2240
|
0x0067 => { #PH (K-5)
|
|
@@ -15,7 +15,7 @@ use Image::ExifTool::Exif;
|
|
|
15
15
|
use Image::ExifTool::IPTC;
|
|
16
16
|
use Image::ExifTool::XMP;
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.08';
|
|
19
19
|
|
|
20
20
|
sub ProcessPhotoMechanic($$);
|
|
21
21
|
|
|
@@ -138,6 +138,7 @@ my %rawCropConv = (
|
|
|
138
138
|
ValueConv => 'Image::ExifTool::Exif::ExifTime($val)',
|
|
139
139
|
ValueConvInv => 'Image::ExifTool::IPTC::IptcTime($val)',
|
|
140
140
|
},
|
|
141
|
+
CreatorIdentity => { List => 'Seq' },
|
|
141
142
|
);
|
|
142
143
|
|
|
143
144
|
#------------------------------------------------------------------------------
|