exiftool-vendored.exe 13.17.0 → 13.25.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/README.txt +14 -14
- package/bin/exiftool.exe +0 -0
- package/bin/exiftool_files/exiftool.pl +117 -46
- package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +12 -2
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/DJI.pm +190 -29
- package/bin/exiftool_files/lib/Image/ExifTool/DarwinCore.pm +22 -11
- package/bin/exiftool_files/lib/Image/ExifTool/EXE.pm +2 -9
- package/bin/exiftool_files/lib/Image/ExifTool/GM.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +86 -48
- package/bin/exiftool_files/lib/Image/ExifTool/ICO.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/JPEG.pm +5 -1
- package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +5 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Kodak.pm +3 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +943 -1237
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PCAP.pm +462 -0
- package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +10 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PLIST.pm +92 -29
- package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +7 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Photoshop.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Plot.pm +713 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Protobuf.pm +24 -11
- package/bin/exiftool_files/lib/Image/ExifTool/Qualcomm.pm +78 -1
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +347 -318
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +75 -27
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +33 -14
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +5056 -4967
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +443 -334
- package/bin/exiftool_files/lib/Image/ExifTool/Trailer.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +4 -4
- package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +9 -4
- package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +58 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +14 -13
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +34 -6
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +2 -0
- package/bin/exiftool_files/lib/Image/ExifTool.pm +63 -29
- package/bin/exiftool_files/lib/Image/ExifTool.pod +83 -86
- package/bin/exiftool_files/windows_exiftool.txt +95 -71
- package/package.json +4 -4
|
@@ -18,15 +18,18 @@ use Image::ExifTool::XMP;
|
|
|
18
18
|
use Image::ExifTool::GPS;
|
|
19
19
|
use Image::ExifTool::Protobuf;
|
|
20
20
|
|
|
21
|
-
$VERSION = '1.
|
|
21
|
+
$VERSION = '1.14';
|
|
22
22
|
|
|
23
23
|
sub ProcessDJIInfo($$$);
|
|
24
|
+
sub ProcessSettings($$$);
|
|
24
25
|
|
|
25
26
|
%knownProtocol = (
|
|
26
27
|
'dvtm_ac203.proto' => 1, # Osmo Action 4
|
|
27
28
|
'dvtm_ac204.proto' => 1, # Osmo Action 5
|
|
28
|
-
'dvtm_AVATA2.proto' => 1, #
|
|
29
|
+
'dvtm_AVATA2.proto' => 1, # Avata 2
|
|
29
30
|
'dvtm_wm265e.proto' => 1, # Mavic 3
|
|
31
|
+
'dvtm_pm320.proto' => 1, # Matrice 30
|
|
32
|
+
'dvtm_Mini4_Pro.proto' => 1, # Matrice 30
|
|
30
33
|
);
|
|
31
34
|
|
|
32
35
|
my %convFloat2 = (
|
|
@@ -195,6 +198,27 @@ my %convFloat2 = (
|
|
|
195
198
|
},
|
|
196
199
|
);
|
|
197
200
|
|
|
201
|
+
%Image::ExifTool::DJI::Glamour = (
|
|
202
|
+
GROUPS => { 0 => 'QuickTime', 1 => 'DJI', 2 => 'Image' },
|
|
203
|
+
PROCESS_PROC => \&Image::ExifTool::DJI::ProcessSettings,
|
|
204
|
+
NOTES => 'Glamour settings used by some DJI models.',
|
|
205
|
+
beauty_enable => 'BeautyEnable',
|
|
206
|
+
smoother => 'Smoother',
|
|
207
|
+
whitening => 'Whitening',
|
|
208
|
+
face_slimming => 'FaceSlimming',
|
|
209
|
+
eye_enlarge => 'EyeEnlarge',
|
|
210
|
+
nose_slimming => 'NoseSlimming',
|
|
211
|
+
mouth_beautify => 'MouthModify',
|
|
212
|
+
teeth_whitening => 'TeethWhitening',
|
|
213
|
+
leg_longer => 'LegLonger',
|
|
214
|
+
head_shrinking => 'HeadShrinking',
|
|
215
|
+
lipstick => 'Lipstick',
|
|
216
|
+
blush => 'Blush',
|
|
217
|
+
dark_circle => 'DarkCircle',
|
|
218
|
+
acne_spot_removal=>'AcneSpotRemoval',
|
|
219
|
+
eyebrows => 'Eyebrows',
|
|
220
|
+
);
|
|
221
|
+
|
|
198
222
|
# metadata in protobuf format (djmd and dbgi meta types, ref PH)
|
|
199
223
|
%Image::ExifTool::DJI::Protobuf = (
|
|
200
224
|
GROUPS => { 0 => 'Protobuf', 1 => 'DJI', 2 => 'Camera' },
|
|
@@ -208,9 +232,10 @@ my %convFloat2 = (
|
|
|
208
232
|
file name combined with the hierarchical protobuf field numbers.
|
|
209
233
|
|
|
210
234
|
ExifTool currently extracts timed GPS plus a few other tags from DJI devices
|
|
211
|
-
which use the following protocols: dvtm_AVATA2.proto (
|
|
212
|
-
dvtm_ac203.proto (Osmo Action 4), dvtm_ac204.proto (Osmo Action 5)
|
|
213
|
-
dvtm_wm265e.proto (Mavic 3).
|
|
235
|
+
which use the following protocols: dvtm_AVATA2.proto (Avata 2),
|
|
236
|
+
dvtm_ac203.proto (Osmo Action 4), dvtm_ac204.proto (Osmo Action 5),
|
|
237
|
+
dvtm_wm265e.proto (Mavic 3), dvtm_pm320.proto (Matrice 30) and
|
|
238
|
+
dvtm_pm320.proto (Mini 4 Pro).
|
|
214
239
|
|
|
215
240
|
Note that with the protobuf format, numerical tags missing from the output
|
|
216
241
|
for a given protocol should be considered to have the default value of 0.
|
|
@@ -226,13 +251,24 @@ my %convFloat2 = (
|
|
|
226
251
|
#
|
|
227
252
|
# Osmo Action 4
|
|
228
253
|
#
|
|
229
|
-
'dvtm_ac203_1-1-5' => 'SerialNumber', # (NC)
|
|
254
|
+
'dvtm_ac203_1-1-5' => { Name => 'SerialNumber', Notes => 'Osmo Action 4' }, # (NC)
|
|
230
255
|
# dvtm_ac203_1-1-6 - some version number
|
|
231
256
|
'dvtm_ac203_1-1-10' => 'Model',
|
|
232
257
|
'dvtm_ac203_2-3' => {
|
|
233
258
|
Name => 'FrameInfo',
|
|
234
259
|
SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
|
|
235
260
|
},
|
|
261
|
+
'dvtm_ac203_3-2-2-1' => { Name => 'ISO', Format => 'float' },
|
|
262
|
+
'dvtm_ac203_3-2-4-1' => { # (NC)
|
|
263
|
+
Name => 'ShutterSpeed',
|
|
264
|
+
Format => 'rational',
|
|
265
|
+
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
|
|
266
|
+
},
|
|
267
|
+
'dvtm_ac203_3-2-6-1' => { Name => 'ColorTemperature', Format => 'unsigned' }, # (NC)
|
|
268
|
+
# dvtm_ac203_3-2-9-1 - looks like Z accerometer measurement, but 2 and 3 don't look like other components
|
|
269
|
+
'dvtm_ac203_3-2-10-2' => { Name => 'AccelerometerX', Format => 'float' } , # (NC) left/right
|
|
270
|
+
'dvtm_ac203_3-2-10-3' => { Name => 'AccelerometerY', Format => 'float' } , # (NC) front/back
|
|
271
|
+
'dvtm_ac203_3-2-10-4' => { Name => 'AccelerometerZ', Format => 'float' } , # (NC) up/down
|
|
236
272
|
# dvtm_ac203_3-4-1-4 - model code?
|
|
237
273
|
'dvtm_ac203_3-4-2-1' => {
|
|
238
274
|
Name => 'GPSInfo',
|
|
@@ -255,19 +291,27 @@ my %convFloat2 = (
|
|
|
255
291
|
#
|
|
256
292
|
# Osmo Action 5
|
|
257
293
|
#
|
|
258
|
-
'dvtm_ac204_1-1-5' => 'SerialNumber', # (NC)
|
|
294
|
+
'dvtm_ac204_1-1-5' => { Name => 'SerialNumber', Notes => 'Osmo Action 5' }, # (NC)
|
|
259
295
|
# dvtm_ac204_1-1-6 - some version number
|
|
260
296
|
'dvtm_ac204_1-1-10' => 'Model',
|
|
261
297
|
'dvtm_ac204_2-3' => {
|
|
262
298
|
Name => 'FrameInfo',
|
|
263
299
|
SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
|
|
264
300
|
},
|
|
301
|
+
'dvtm_ac204_3-2-4-1' => { # (NC)
|
|
302
|
+
Name => 'ShutterSpeed',
|
|
303
|
+
Format => 'rational',
|
|
304
|
+
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
|
|
305
|
+
},
|
|
306
|
+
'dvtm_ac204_3-2-6-1' => { Name => 'ColorTemperature', Format => 'unsigned' }, # (NC)
|
|
307
|
+
'dvtm_ac204_3-2-10-2' => { Name => 'AccelerometerX', Format => 'float' } , # (NC) left/right
|
|
308
|
+
'dvtm_ac204_3-2-10-3' => { Name => 'AccelerometerY', Format => 'float' } , # (NC) front/back
|
|
309
|
+
'dvtm_ac204_3-2-10-4' => { Name => 'AccelerometerZ', Format => 'float' } , # (NC) up/down
|
|
265
310
|
# dvtm_ac204_3-4-1-4 - model code?
|
|
266
311
|
'dvtm_ac204_3-4-2-1' => {
|
|
267
312
|
Name => 'GPSInfo',
|
|
268
313
|
SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
|
|
269
314
|
},
|
|
270
|
-
# dvtm_ac204_3-2-4-1 - shutter speed? (rational)
|
|
271
315
|
'dvtm_ac204_3-4-2-2' => {
|
|
272
316
|
Name => 'GPSAltitude',
|
|
273
317
|
Groups => { 2 => 'Location' },
|
|
@@ -283,11 +327,11 @@ my %convFloat2 = (
|
|
|
283
327
|
PrintConv => '$self->ConvertDateTime($val)',
|
|
284
328
|
},
|
|
285
329
|
#
|
|
286
|
-
#
|
|
330
|
+
# Avata 2
|
|
287
331
|
#
|
|
288
332
|
# dvtm_AVATA2_1-1-2 - some version number
|
|
289
333
|
# dvtm_AVATA2_1-1-3 - some version number
|
|
290
|
-
'dvtm_AVATA2_1-1-5' => 'SerialNumber', # (NC)
|
|
334
|
+
'dvtm_AVATA2_1-1-5' => { Name => 'SerialNumber', Notes => 'Avata 2' }, # (NC)
|
|
291
335
|
'dvtm_AVATA2_1-1-10' => 'Model',
|
|
292
336
|
# dvtm_AVATA2_2-2-1-4 - model code?
|
|
293
337
|
'dvtm_AVATA2_2-2-3-1' => 'SerialNumber2', # (NC)
|
|
@@ -305,17 +349,33 @@ my %convFloat2 = (
|
|
|
305
349
|
},
|
|
306
350
|
# dvtm_AVATA2_3-2-1-4 - model code?
|
|
307
351
|
# dvtm_AVATA2_3-2-1-5 - frame rate?
|
|
308
|
-
|
|
352
|
+
'dvtm_AVATA2_3-2-2-1' => { Name => 'ISO', Format => 'float' }, # (NC)
|
|
353
|
+
'dvtm_AVATA2_3-2-4-1' => {
|
|
354
|
+
Name => 'ShutterSpeed',
|
|
355
|
+
Format => 'rational',
|
|
356
|
+
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
|
|
357
|
+
},
|
|
358
|
+
'dvtm_AVATA2_3-2-6-1' => { Name => 'ColorTemperature', Format => 'unsigned' }, # (NC)
|
|
359
|
+
'dvtm_AVATA2_3-2-10-1' => { # (NC)
|
|
360
|
+
Name => 'FNumber',
|
|
361
|
+
Format => 'rational',
|
|
362
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
|
|
363
|
+
},
|
|
309
364
|
# dvtm_AVATA2_3-4-1-4 - model code?
|
|
310
|
-
|
|
365
|
+
'dvtm_AVATA2_3-4-3' => { # (NC)
|
|
366
|
+
Name => 'DroneInfo',
|
|
367
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::DroneInfo' },
|
|
368
|
+
},
|
|
311
369
|
'dvtm_AVATA2_3-4-4-1' => {
|
|
312
370
|
Name => 'GPSInfo',
|
|
313
371
|
SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
|
|
314
372
|
},
|
|
373
|
+
'dvtm_AVATA2_3-4-4-2' => { Name => 'AbsoluteAltitude', Format => 'int64s', ValueConv => '$val / 1000' }, # (NC)
|
|
374
|
+
'dvtm_AVATA2_3-4-5-1' => { Name => 'RelativeAltitude', Format => 'float', ValueConv => '$val / 1000' }, # (NC)
|
|
315
375
|
#
|
|
316
376
|
# Mavic 3
|
|
317
377
|
#
|
|
318
|
-
'dvtm_wm265e_1-1-5' => 'SerialNumber', # (confirmed)
|
|
378
|
+
'dvtm_wm265e_1-1-5' => { Name => 'SerialNumber', Notes => 'Mavic 3' }, # (confirmed)
|
|
319
379
|
'dvtm_wm265e_1-1-10' => 'Model',
|
|
320
380
|
'dvtm_wm265e_2-2' => {
|
|
321
381
|
Name => 'FrameInfo',
|
|
@@ -326,7 +386,6 @@ my %convFloat2 = (
|
|
|
326
386
|
'dvtm_wm265e_3-2-3-1' => {
|
|
327
387
|
Name => 'ShutterSpeed',
|
|
328
388
|
Format => 'rational',
|
|
329
|
-
ValueConv => '$val =~ m{(.*)/(.*)} ? $1 / $2 : $val',
|
|
330
389
|
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
|
|
331
390
|
},
|
|
332
391
|
# dvtm_wm265e_3-2-5-1 - unknown rational (xxxx / 1000)
|
|
@@ -335,20 +394,111 @@ my %convFloat2 = (
|
|
|
335
394
|
Name => 'GPSInfo',
|
|
336
395
|
SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
|
|
337
396
|
},
|
|
338
|
-
'dvtm_wm265e_3-3-3
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
397
|
+
'dvtm_wm265e_3-3-3' => {
|
|
398
|
+
Name => 'DroneInfo',
|
|
399
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::DroneInfo' },
|
|
400
|
+
},
|
|
401
|
+
'dvtm_wm265e_3-3-4-2' => { Name => 'AbsoluteAltitude', Format => 'int64s', ValueConv => '$val / 1000' },
|
|
342
402
|
'dvtm_wm265e_3-3-5-1' => { Name => 'RelativeAltitude', Format => 'float', ValueConv => '$val / 1000' },
|
|
343
|
-
'dvtm_wm265e_3-4-3
|
|
344
|
-
|
|
345
|
-
|
|
403
|
+
'dvtm_wm265e_3-4-3' => {
|
|
404
|
+
Name => 'GimbalInfo',
|
|
405
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::GimbalInfo' },
|
|
406
|
+
},
|
|
407
|
+
#
|
|
408
|
+
# Matrice 30
|
|
409
|
+
#
|
|
410
|
+
'dvtm_pm320_1-1-5' => { Name => 'SerialNumber', Notes => 'Matrice 30' },
|
|
411
|
+
'dvtm_pm320_1-1-10' => 'Model',
|
|
412
|
+
'dvtm_pm320_2-2' => {
|
|
413
|
+
Name => 'FrameInfo',
|
|
414
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
|
|
415
|
+
},
|
|
416
|
+
'dvtm_pm320_3-2-2-1' => { Name => 'ISO', Format => 'float' },
|
|
417
|
+
'dvtm_pm320_3-2-3-1' => {
|
|
418
|
+
Name => 'ShutterSpeed',
|
|
419
|
+
Format => 'rational',
|
|
420
|
+
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
|
|
421
|
+
},
|
|
422
|
+
'dvtm_pm320_3-2-4-1' => { # (NC)
|
|
423
|
+
Name => 'FNumber',
|
|
424
|
+
Format => 'rational',
|
|
425
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
|
|
426
|
+
},
|
|
427
|
+
'dvtm_pm320_3-2-6-1' => { Name => 'DigitalZoom', Format => 'float' },
|
|
428
|
+
'dvtm_pm320_3-3-4-1' => {
|
|
429
|
+
Name => 'GPSInfo',
|
|
430
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
|
|
431
|
+
},
|
|
432
|
+
'dvtm_pm320_3-3-3' => {
|
|
433
|
+
Name => 'DroneInfo',
|
|
434
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::DroneInfo' },
|
|
435
|
+
},
|
|
436
|
+
'dvtm_pm320_3-3-4-2' => { Name => 'AbsoluteAltitude', Format => 'int64s', ValueConv => '$val / 1000' },
|
|
437
|
+
'dvtm_pm320_3-3-5-1' => { Name => 'RelativeAltitude', Format => 'float', ValueConv => '$val / 1000' },
|
|
438
|
+
'dvtm_pm320_3-4-3' => {
|
|
439
|
+
Name => 'GimbalInfo',
|
|
440
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::GimbalInfo' },
|
|
441
|
+
},
|
|
442
|
+
#
|
|
443
|
+
# Mini 4 Pro
|
|
444
|
+
#
|
|
445
|
+
'dvtm_Mini4_Pro_1-1-5' => { Name => 'SerialNumber', Notes => 'Mini 4 Pro' },
|
|
446
|
+
'dvtm_Mini4_Pro_1-1-10' => 'Model',
|
|
447
|
+
'dvtm_Mini4_Pro_2-3' => {
|
|
448
|
+
Name => 'FrameInfo',
|
|
449
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::FrameInfo' },
|
|
450
|
+
},
|
|
451
|
+
'dvtm_Mini4_Pro_3-2-7-1' => { Name => 'ISO', Format => 'float' },
|
|
452
|
+
'dvtm_Mini4_Pro_3-2-10-1' => {
|
|
453
|
+
Name => 'ShutterSpeed',
|
|
454
|
+
Format => 'rational',
|
|
455
|
+
PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
|
|
456
|
+
},
|
|
457
|
+
'dvtm_Mini4_Pro_3-2-11-1' => {
|
|
458
|
+
Name => 'FNumber',
|
|
459
|
+
Format => 'rational',
|
|
460
|
+
PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
|
|
461
|
+
},
|
|
462
|
+
'dvtm_Mini4_Pro_3-2-32-1' => { Name => 'ColorTemperature', Format => 'unsigned' },
|
|
463
|
+
# dvtm_Mini4_Pro_3-2-37-1 - something to do with battery level or time remaining?
|
|
464
|
+
'dvtm_Mini4_Pro_3-3-4-1' => {
|
|
465
|
+
Name => 'GPSInfo',
|
|
466
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::GPSInfo' },
|
|
467
|
+
},
|
|
468
|
+
'dvtm_Mini4_Pro_3-3-3' => {
|
|
469
|
+
Name => 'DroneInfo',
|
|
470
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::DroneInfo' },
|
|
471
|
+
},
|
|
472
|
+
'dvtm_Mini4_Pro_3-3-4-2' => { Name => 'AbsoluteAltitude', Format => 'int64s', ValueConv => '$val / 1000' },
|
|
473
|
+
'dvtm_Mini4_Pro_3-3-5-1' => { Name => 'RelativeAltitude', Format => 'float', ValueConv => '$val / 1000' }, # (NC)
|
|
474
|
+
'dvtm_Mini4_Pro_3-4-3' => {
|
|
475
|
+
Name => 'GimbalInfo',
|
|
476
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::GimbalInfo' },
|
|
477
|
+
},
|
|
478
|
+
);
|
|
479
|
+
|
|
480
|
+
%Image::ExifTool::DJI::DroneInfo = (
|
|
481
|
+
GROUPS => { 0 => 'Protobuf', 1 => 'DJI', 2 => 'Camera' },
|
|
482
|
+
PROCESS_PROC => \&Image::ExifTool::Protobuf::ProcessProtobuf,
|
|
483
|
+
VARS => { HEX_ID => 0, ID_LABEL => 'Field #' },
|
|
484
|
+
1 => { Name => 'DroneRoll', Format => 'int64s', ValueConv => '$val / 10' },
|
|
485
|
+
2 => { Name => 'DronePitch', Format => 'int64s', ValueConv => '$val / 10' },
|
|
486
|
+
3 => { Name => 'DroneYaw', Format => 'int64s', ValueConv => '$val / 10' },
|
|
487
|
+
);
|
|
488
|
+
|
|
489
|
+
%Image::ExifTool::DJI::GimbalInfo = (
|
|
490
|
+
GROUPS => { 0 => 'Protobuf', 1 => 'DJI', 2 => 'Camera' },
|
|
491
|
+
PROCESS_PROC => \&Image::ExifTool::Protobuf::ProcessProtobuf,
|
|
492
|
+
VARS => { HEX_ID => 0, ID_LABEL => 'Field #' },
|
|
493
|
+
1 => { Name => 'GimbalPitch',Format => 'int64s', ValueConv => '$val / 10' },
|
|
494
|
+
2 => { Name => 'GimbalRoll', Format => 'int64s', ValueConv => '$val / 10' }, # usually 0, so missing
|
|
495
|
+
3 => { Name => 'GimbalYaw', Format => 'int64s', ValueConv => '$val / 10' },
|
|
346
496
|
);
|
|
347
497
|
|
|
348
498
|
%Image::ExifTool::DJI::FrameInfo = (
|
|
349
499
|
GROUPS => { 0 => 'Protobuf', 1 => 'DJI', 2 => 'Video' },
|
|
350
500
|
PROCESS_PROC => \&Image::ExifTool::Protobuf::ProcessProtobuf,
|
|
351
|
-
VARS => { HEX_ID => 0 },
|
|
501
|
+
VARS => { HEX_ID => 0, ID_LABEL => 'Field #' },
|
|
352
502
|
1 => { Name => 'FrameWidth', Format => 'unsigned' },
|
|
353
503
|
2 => { Name => 'FrameHeight', Format => 'unsigned' },
|
|
354
504
|
3 => { Name => 'FrameRate', Format => 'float' },
|
|
@@ -357,7 +507,7 @@ my %convFloat2 = (
|
|
|
357
507
|
%Image::ExifTool::DJI::GPSInfo = (
|
|
358
508
|
GROUPS => { 0 => 'Protobuf', 1 => 'DJI', 2 => 'Location' },
|
|
359
509
|
PROCESS_PROC => \&Image::ExifTool::Protobuf::ProcessProtobuf,
|
|
360
|
-
VARS => { HEX_ID => 0 },
|
|
510
|
+
VARS => { HEX_ID => 0, ID_LABEL => 'Field #' },
|
|
361
511
|
1 => {
|
|
362
512
|
Name => 'CoordinateUnits',
|
|
363
513
|
Format => 'unsigned',
|
|
@@ -381,6 +531,22 @@ my %convFloat2 = (
|
|
|
381
531
|
},
|
|
382
532
|
);
|
|
383
533
|
|
|
534
|
+
#------------------------------------------------------------------------------
|
|
535
|
+
# Process DJI beauty settings (ref PH)
|
|
536
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
|
537
|
+
# Returns: 1 on success
|
|
538
|
+
sub ProcessSettings($$$)
|
|
539
|
+
{
|
|
540
|
+
my ($et, $dirInfo, $tagTbl) = @_;
|
|
541
|
+
$et->VerboseDir($$dirInfo{DirName}, undef, length(${$$dirInfo{DataPt}}));
|
|
542
|
+
foreach (split /;/, ${$$dirInfo{DataPt}}) {
|
|
543
|
+
my ($tag, $val) = split /=/;
|
|
544
|
+
next unless defined $tag and defined $val;
|
|
545
|
+
$et->HandleTag($tagTbl, $tag, $val, MakeTagInfo => 1);
|
|
546
|
+
}
|
|
547
|
+
return 1;
|
|
548
|
+
}
|
|
549
|
+
|
|
384
550
|
#------------------------------------------------------------------------------
|
|
385
551
|
# Process DJI info (ref PH)
|
|
386
552
|
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
|
@@ -405,12 +571,7 @@ sub ProcessDJIInfo($$$)
|
|
|
405
571
|
my $buff = $val;
|
|
406
572
|
$val = \$buff;
|
|
407
573
|
}
|
|
408
|
-
|
|
409
|
-
my $name = $tag;
|
|
410
|
-
$name =~ s/_([a-z])/_\U$1/g;
|
|
411
|
-
AddTagToTable($tagTbl, $tag, { Name => Image::ExifTool::MakeTagName($name) });
|
|
412
|
-
}
|
|
413
|
-
$et->HandleTag($tagTbl, $tag, $val);
|
|
574
|
+
$et->HandleTag($tagTbl, $tag, $val, MakeTagInfo => 1);
|
|
414
575
|
}
|
|
415
576
|
return 1;
|
|
416
577
|
}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
# Description: Darwin Core XMP tags
|
|
5
5
|
#
|
|
6
6
|
# Revisions: 2013-01-28 - P. Harvey Created
|
|
7
|
+
# 2025-03-09 - Herb forum17172 changes dwc.tdwg.org 2023
|
|
7
8
|
#
|
|
8
9
|
# References: 1) http://rs.tdwg.org/dwc/index.htm
|
|
9
10
|
# 2) https://exiftool.org/forum/index.php/topic,4442.0/all.html
|
|
@@ -15,7 +16,7 @@ use strict;
|
|
|
15
16
|
use vars qw($VERSION);
|
|
16
17
|
use Image::ExifTool::XMP;
|
|
17
18
|
|
|
18
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.08';
|
|
19
20
|
|
|
20
21
|
my %dateTimeInfo = (
|
|
21
22
|
# NOTE: Do NOT put "Groups" here because Groups hash must not be common!
|
|
@@ -35,7 +36,7 @@ my %event = (
|
|
|
35
36
|
STRUCT_NAME => 'DarwinCore Event',
|
|
36
37
|
NAMESPACE => 'dwc',
|
|
37
38
|
day => { Writable => 'integer', Groups => { 2 => 'Time' } },
|
|
38
|
-
earliestDate => { %dateTimeInfo, Groups => { 2 => 'Time' } },
|
|
39
|
+
earliestDate => { %dateTimeInfo, Groups => { 2 => 'Time' } }, # dwc.tdwg.org removed 2023
|
|
39
40
|
endDayOfYear => { Writable => 'integer', Groups => { 2 => 'Time' } },
|
|
40
41
|
eventDate => { %dateTimeInfo, Groups => { 2 => 'Time' } },
|
|
41
42
|
eventID => { Avoid => 1, Notes => 'avoided in favor of XMP-iptcExt:EventID' },
|
|
@@ -63,7 +64,7 @@ my %event = (
|
|
|
63
64
|
fieldNotes => { },
|
|
64
65
|
fieldNumber => { },
|
|
65
66
|
habitat => { },
|
|
66
|
-
latestDate => { %dateTimeInfo, Groups => { 2 => 'Time' } },
|
|
67
|
+
latestDate => { %dateTimeInfo, Groups => { 2 => 'Time' } }, # dwc.tdwg.org removed 2023
|
|
67
68
|
month => { Writable => 'integer', Groups => { 2 => 'Time' } },
|
|
68
69
|
parentEventID => { },
|
|
69
70
|
samplingEffort => { },
|
|
@@ -73,6 +74,7 @@ my %event = (
|
|
|
73
74
|
startDayOfYear => { Writable => 'integer', Groups => { 2 => 'Time' } },
|
|
74
75
|
verbatimEventDate => { Groups => { 2 => 'Time' } },
|
|
75
76
|
year => { Writable => 'integer', Groups => { 2 => 'Time' } },
|
|
77
|
+
eventType => { }, # dwc.tdwg.org added 2023
|
|
76
78
|
);
|
|
77
79
|
|
|
78
80
|
# Darwin Core tags
|
|
@@ -161,6 +163,7 @@ my %event = (
|
|
|
161
163
|
measurementType => { },
|
|
162
164
|
measurementUnit => { },
|
|
163
165
|
measurementValue => { },
|
|
166
|
+
parentMeasurementID => { }, # dwc.tdwg.org added 2023
|
|
164
167
|
},
|
|
165
168
|
},
|
|
166
169
|
Occurrence => {
|
|
@@ -170,25 +173,25 @@ my %event = (
|
|
|
170
173
|
associatedMedia => { },
|
|
171
174
|
associatedOccurrences => { },
|
|
172
175
|
associatedReferences => { },
|
|
173
|
-
associatedSequences => { },
|
|
176
|
+
associatedSequences => { }, # dwc.tdwg.org removed 2023
|
|
174
177
|
associatedTaxa => { },
|
|
175
178
|
behavior => { },
|
|
176
179
|
catalogNumber => { },
|
|
177
|
-
disposition => { },
|
|
180
|
+
disposition => { }, # dwc.tdwg.org removed 2023
|
|
178
181
|
establishmentMeans => { },
|
|
179
182
|
individualCount => { },
|
|
180
|
-
individualID => { },
|
|
183
|
+
individualID => { }, # dwc.tdwg.org removed 2023
|
|
181
184
|
lifeStage => { },
|
|
182
185
|
occurrenceDetails => { },
|
|
183
|
-
occurrenceID => { },
|
|
186
|
+
occurrenceID => { }, # dwc.tdwg.org removed 2023
|
|
184
187
|
occurrenceRemarks => { },
|
|
185
188
|
occurrenceStatus => { },
|
|
186
189
|
organismQuantity => { },
|
|
187
190
|
organismQuantityType => { },
|
|
188
191
|
otherCatalogNumbers => { },
|
|
189
192
|
preparations => { },
|
|
190
|
-
previousIdentifications => { },
|
|
191
|
-
recordedBy => { },
|
|
193
|
+
previousIdentifications => { }, # dwc.tdwg.org removed 2023
|
|
194
|
+
recordedBy => { }, # dwc.tdwg.org removed 2023
|
|
192
195
|
recordNumber => { },
|
|
193
196
|
reproductiveCondition => { },
|
|
194
197
|
sex => { },
|
|
@@ -197,6 +200,8 @@ my %event = (
|
|
|
197
200
|
georeferenceVerificationStatus => { },
|
|
198
201
|
pathway => { },
|
|
199
202
|
recordedByID => { },
|
|
203
|
+
caste => { }, # dwc.tdwg.org added 2023
|
|
204
|
+
vitality => { }, # dwc.tdwg.org added 2023
|
|
200
205
|
},
|
|
201
206
|
},
|
|
202
207
|
OccurrenceOccurrenceDetails => { Name => 'OccurrenceDetails', Flat => 1 },
|
|
@@ -207,7 +212,7 @@ my %event = (
|
|
|
207
212
|
Struct => {
|
|
208
213
|
STRUCT_NAME => 'DarwinCore Organism',
|
|
209
214
|
NAMESPACE => 'dwc',
|
|
210
|
-
associatedOccurrences => { },
|
|
215
|
+
associatedOccurrences => { }, # dwc.tdwg.org removed 2023
|
|
211
216
|
associatedOrganisms => { },
|
|
212
217
|
organismID => { },
|
|
213
218
|
organismName => { },
|
|
@@ -291,6 +296,12 @@ my %event = (
|
|
|
291
296
|
taxonomicStatus => { },
|
|
292
297
|
verbatimTaxonRank => { },
|
|
293
298
|
vernacularName => { Writable => 'lang-alt' },
|
|
299
|
+
superFamily => { }, # dwc.tdwg.org added 2023
|
|
300
|
+
subFamily => { }, # dwc.tdwg.org added 2023
|
|
301
|
+
tribe => { }, # dwc.tdwg.org added 2023
|
|
302
|
+
subTribe => { }, # dwc.tdwg.org added 2023
|
|
303
|
+
genericName => { }, # dwc.tdwg.org added 2023
|
|
304
|
+
infragenericEpithet => { }, # dwc.tdwg.org added 2023
|
|
294
305
|
},
|
|
295
306
|
},
|
|
296
307
|
TaxonTaxonConceptID => { Name => 'TaxonConceptID', Flat => 1 },
|
|
@@ -321,7 +332,7 @@ my %event = (
|
|
|
321
332
|
georeferenceProtocol => { },
|
|
322
333
|
georeferenceRemarks => { },
|
|
323
334
|
georeferenceSources => { },
|
|
324
|
-
georeferenceVerificationStatus => { },
|
|
335
|
+
georeferenceVerificationStatus => { }, # dwc.tdwg.org removed 2023
|
|
325
336
|
higherGeography => { },
|
|
326
337
|
higherGeographyID => { },
|
|
327
338
|
island => { },
|
|
@@ -22,7 +22,7 @@ use strict;
|
|
|
22
22
|
use vars qw($VERSION);
|
|
23
23
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
24
24
|
|
|
25
|
-
$VERSION = '1.
|
|
25
|
+
$VERSION = '1.23';
|
|
26
26
|
|
|
27
27
|
sub ProcessPEResources($$);
|
|
28
28
|
sub ProcessPEVersion($$);
|
|
@@ -1005,20 +1005,13 @@ sub ProcessPEVersion($$)
|
|
|
1005
1005
|
next;
|
|
1006
1006
|
}
|
|
1007
1007
|
my $tag = $string;
|
|
1008
|
-
# create entry in tag table if it doesn't already exist
|
|
1009
|
-
unless ($$tagTablePtr{$tag}) {
|
|
1010
|
-
my $name = $tag;
|
|
1011
|
-
$name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters
|
|
1012
|
-
next unless length $name;
|
|
1013
|
-
AddTagToTable($tagTablePtr, $tag, { Name => $name });
|
|
1014
|
-
}
|
|
1015
1008
|
# get tag value (converted to current Charset)
|
|
1016
1009
|
if ($valLen) {
|
|
1017
1010
|
($string, $pt) = ReadUnicodeStr($dataPt, $pt, $entryEnd, $et);
|
|
1018
1011
|
} else {
|
|
1019
1012
|
$string = '';
|
|
1020
1013
|
}
|
|
1021
|
-
$et->HandleTag($tagTablePtr, $tag, $string);
|
|
1014
|
+
$et->HandleTag($tagTablePtr, $tag, $string, MakeTagInfo => 1);
|
|
1022
1015
|
# step to next entry (padded to an even word)
|
|
1023
1016
|
$pt = ($entryEnd + 3) & 0xfffffffc;
|
|
1024
1017
|
}
|
|
@@ -437,7 +437,7 @@ sub Process_marl($$$)
|
|
|
437
437
|
{
|
|
438
438
|
my ($et, $dirInfo, $tagTablePtr) = @_;
|
|
439
439
|
my $dataPt = $$dirInfo{DataPt};
|
|
440
|
-
my $dataPos = $$dirInfo{DataPos} + $$dirInfo{Base};
|
|
440
|
+
my $dataPos = ($$dirInfo{DataPos} || 0) + ($$dirInfo{Base} || 0);
|
|
441
441
|
my $dataLen = length $$dataPt;
|
|
442
442
|
my $vals = $$et{GMVals}; # running values for each channel (0=TimeStamp)
|
|
443
443
|
my $chan = $$et{GMChan}; # running channel number
|
|
@@ -12,7 +12,7 @@ use strict;
|
|
|
12
12
|
use vars qw($VERSION);
|
|
13
13
|
use Image::ExifTool::Exif;
|
|
14
14
|
|
|
15
|
-
$VERSION = '1.
|
|
15
|
+
$VERSION = '1.58';
|
|
16
16
|
|
|
17
17
|
my %coordConv = (
|
|
18
18
|
ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)',
|
|
@@ -112,8 +112,8 @@ my %printConvLonRef = (
|
|
|
112
112
|
},
|
|
113
113
|
0 => 'Above Sea Level', # (ellipsoidal surface, Exif 3.0)
|
|
114
114
|
1 => 'Below Sea Level', # (ellipsoidal surface, Exif 3.0)
|
|
115
|
-
|
|
116
|
-
|
|
115
|
+
2 => 'Positive Sea Level (sea-level ref)', # sea-level reference, Exif 3.0
|
|
116
|
+
3 => 'Negative Sea Level (sea-level ref)', # sea-level reference, Exif 3.0
|
|
117
117
|
},
|
|
118
118
|
},
|
|
119
119
|
0x0006 => {
|
|
Binary file
|