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 +4 -4
- data/bin/Changes +19 -1
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +19 -19
- data/bin/arg_files/xmp2exif.args +4 -1
- data/bin/exiftool +25 -25
- data/bin/fmt_files/kml.fmt +3 -0
- data/bin/fmt_files/kml_track.fmt +3 -0
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +6 -4
- data/bin/lib/Image/ExifTool/Canon.pm +8 -2
- data/bin/lib/Image/ExifTool/Exif.pm +31 -2
- data/bin/lib/Image/ExifTool/FlashPix.pm +69 -8
- data/bin/lib/Image/ExifTool/FujiFilm.pm +2 -1
- data/bin/lib/Image/ExifTool/InfiRay.pm +227 -0
- data/bin/lib/Image/ExifTool/JPEG.pm +40 -6
- data/bin/lib/Image/ExifTool/Nikon.pm +158 -380
- data/bin/lib/Image/ExifTool/OpenEXR.pm +32 -15
- data/bin/lib/Image/ExifTool/PNG.pm +80 -2
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +23 -14
- data/bin/lib/Image/ExifTool/Real.pm +2 -2
- data/bin/lib/Image/ExifTool/Sony.pm +5 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4536 -4519
- data/bin/lib/Image/ExifTool/TagNames.pod +216 -14
- data/bin/lib/Image/ExifTool/VCard.pm +19 -5
- data/bin/lib/Image/ExifTool.pm +55 -14
- data/bin/lib/Image/ExifTool.pod +51 -50
- data/bin/perl-Image-ExifTool.spec +18 -18
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
|
|
12
12
|
=head1 TAG TABLES
|
13
13
|
|
14
14
|
The tables listed below give the names of all tags recognized by ExifTool.
|
15
|
-
They contain a total of
|
15
|
+
They contain a total of 26374 tags, with 16843 unique tag names.
|
16
16
|
|
17
17
|
B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
|
18
18
|
table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
|
@@ -112,30 +112,38 @@ L<https://www.w3.org/Graphics/JPEG/jfif3.pdf> for the JPEG specification.
|
|
112
112
|
'APP2' ICC_Profile ICC_Profile
|
113
113
|
FPXR FlashPix
|
114
114
|
MPF MPF
|
115
|
+
InfiRayVersion InfiRay Version
|
115
116
|
PreviewImage no
|
116
117
|
'APP3' Meta Kodak Meta
|
117
118
|
Stim Stim
|
118
119
|
JPS JPEG JPS
|
119
120
|
ThermalData no
|
121
|
+
ImagingData no
|
120
122
|
PreviewImage no
|
121
123
|
'APP4' Scalado Scalado
|
122
124
|
FPXR FlashPix
|
125
|
+
InfiRayFactory InfiRay Factory
|
123
126
|
ThermalParams DJI ThermalParams
|
124
127
|
PreviewImage no
|
125
128
|
'APP5' RMETA Ricoh RMETA
|
126
129
|
SamsungUniqueID Samsung APP5
|
130
|
+
InfiRayPicture InfiRay Picture
|
127
131
|
ThermalCalibration no
|
128
132
|
PreviewImage no
|
129
133
|
'APP6' EPPIM JPEG EPPIM
|
130
134
|
NITF JPEG NITF
|
131
135
|
HP_TDHD HP TDHD
|
132
136
|
GoPro GoPro GPMF
|
137
|
+
InfiRayMixMode InfiRay MixMode
|
133
138
|
DJI_DTAT no
|
134
139
|
'APP7' Pentax Pentax
|
135
140
|
Huawei Unknown
|
136
141
|
Qualcomm Qualcomm
|
142
|
+
InfiRayOpMode InfiRay OpMode
|
137
143
|
'APP8' SPIFF JPEG SPIFF
|
144
|
+
InfiRayIsothermal InfiRay Isothermal
|
138
145
|
'APP9' MediaJukebox JPEG MediaJukebox
|
146
|
+
InfiRaySensor InfiRay Sensor
|
139
147
|
'APP10' Comment no
|
140
148
|
'APP11' JPEG-HDR JPEG HDR
|
141
149
|
JUMBF Jpeg2000
|
@@ -361,6 +369,8 @@ for the official EXIF 2.32 specification.
|
|
361
369
|
0x010f Make IFD0 string
|
362
370
|
0x0110 Model IFD0 string
|
363
371
|
0x0111 StripOffsets - no
|
372
|
+
OtherImageStart - no
|
373
|
+
StripOffsets - no
|
364
374
|
PreviewImageStart IFD0 int32u*
|
365
375
|
PreviewImageStart All int32u*
|
366
376
|
JpgFromRawStart SubIFD2 int32u*
|
@@ -368,6 +378,8 @@ for the official EXIF 2.32 specification.
|
|
368
378
|
0x0115 SamplesPerPixel IFD0 int16u!
|
369
379
|
0x0116 RowsPerStrip IFD0 int32u!
|
370
380
|
0x0117 StripByteCounts - no
|
381
|
+
OtherImageLength - no
|
382
|
+
StripByteCounts - no
|
371
383
|
PreviewImageLength IFD0 int32u*
|
372
384
|
PreviewImageLength All int32u*
|
373
385
|
JpgFromRawLength SubIFD2 int32u*
|
@@ -1188,10 +1200,12 @@ C<integer> is a string of digits (possibly beginning with a '+' or '-'),
|
|
1188
1200
|
C<real> is a floating point number, C<rational> is entered as a floating
|
1189
1201
|
point number but stored as two C<integer> strings separated by a '/'
|
1190
1202
|
character, C<date> is a date/time string entered in the format "YYYY:mm:dd
|
1191
|
-
HH:MM:SS[.ss][+/-HH:MM]"
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1203
|
+
HH:MM:SS[.ss][+/-HH:MM]" but some partial date/time formats are also
|
1204
|
+
accepted (see L<https://exiftool.org/faq.html#Q5>), C<boolean> is either
|
1205
|
+
"True" or "False" (but "true" and "false" may be written as a ValueConv
|
1206
|
+
value for compatibility with non-conforming applications), C<struct>
|
1207
|
+
indicates a structured tag, and C<lang-alt> is a tag that supports alternate
|
1208
|
+
languages.
|
1195
1209
|
|
1196
1210
|
When reading, C<struct> tags are extracted only if the Struct (-struct)
|
1197
1211
|
option is used. Otherwise the corresponding I<Flattened> tags, indicated by
|
@@ -14064,6 +14078,13 @@ Tags written by some Nikon GPS-equipped cameras like the AW100.
|
|
14064
14078
|
0 FirmwareVersion no
|
14065
14079
|
10 NEFCompression int16u[0.5]
|
14066
14080
|
|
14081
|
+
=head3 Nikon MakerNotes0x56 Tags
|
14082
|
+
|
14083
|
+
Index1 Tag Name Writable
|
14084
|
+
------ -------- --------
|
14085
|
+
0 FirmwareVersion no
|
14086
|
+
4 BurstGroupID int16u
|
14087
|
+
|
14067
14088
|
=head3 Nikon AFInfo Tags
|
14068
14089
|
|
14069
14090
|
Index1 Tag Name Writable
|
@@ -14492,12 +14513,15 @@ These tags are extracted from encrypted data in images from the Z9.
|
|
14492
14513
|
----- -------- --------
|
14493
14514
|
0 ShotInfoVersion no
|
14494
14515
|
4 FirmwareVersion no
|
14495
|
-
|
14496
|
-
|
14497
|
-
|
14498
|
-
|
14499
|
-
|
14500
|
-
|
14516
|
+
180 FocusShiftShooting int8u~
|
14517
|
+
188 IntervalShooting int16u~
|
14518
|
+
17644 MenuSettingsZ9 Nikon MenuSettingsZ9
|
14519
|
+
-
|
14520
|
+
Nikon MenuSettingsZ9Firmware3
|
14521
|
+
32965 RollAngle fixed32u
|
14522
|
+
32969 PitchAngle fixed32u
|
14523
|
+
32973 YawAngle fixed32u
|
14524
|
+
33317 MenuSettingsZ9 Nikon MenuSettingsZ9
|
14501
14525
|
-
|
14502
14526
|
Nikon MenuSettingsZ9Firmware3
|
14503
14527
|
|
@@ -14583,6 +14607,7 @@ These tags are used by the Z9 firmware 3.00.
|
|
14583
14607
|
|
14584
14608
|
Index1 Tag Name Writable
|
14585
14609
|
--------------- --------
|
14610
|
+
72 HighFrameRate int8u
|
14586
14611
|
154 MultipleExposureMode int8u
|
14587
14612
|
156 MultiExposureShots int8u
|
14588
14613
|
204 Intervals int32u
|
@@ -14653,6 +14678,8 @@ These tags are used by the Z9 firmware 3.00.
|
|
14653
14678
|
1684 USBPowerDelivery? int8u
|
14654
14679
|
1693 SensorShield? int8u
|
14655
14680
|
1754 FocusShiftAutoReset? int8u
|
14681
|
+
1810 PreReleaseBurstLength int8u
|
14682
|
+
1812 PostReleaseBurstLength int8u
|
14656
14683
|
|
14657
14684
|
=head3 Nikon ShotInfo Tags
|
14658
14685
|
|
@@ -22332,6 +22359,38 @@ embedded images.
|
|
22332
22359
|
12 DependentImage1EntryNumber no
|
22333
22360
|
14 DependentImage2EntryNumber no
|
22334
22361
|
|
22362
|
+
=head2 InfiRay Tags
|
22363
|
+
|
22364
|
+
=head3 InfiRay Version Tags
|
22365
|
+
|
22366
|
+
This table lists tags found in the InfiRay APP2 IJPEG version header, found
|
22367
|
+
in JPEGs taken with the P2 Pro camera app.
|
22368
|
+
|
22369
|
+
Index1 Tag Name Writable
|
22370
|
+
------ -------- --------
|
22371
|
+
0 IJPEGVersion no
|
22372
|
+
12 IJPEGOrgType no
|
22373
|
+
13 IJPEGDispType no
|
22374
|
+
14 IJPEGRotate no
|
22375
|
+
15 IJPEGMirrorFlip no
|
22376
|
+
16 ImageColorSwitchable no
|
22377
|
+
17 ThermalColorPalette no
|
22378
|
+
32 IRDataSize no
|
22379
|
+
40 IRDataFormat no
|
22380
|
+
42 IRImageWidth no
|
22381
|
+
44 IRImageHeight no
|
22382
|
+
46 IRImageBpp no
|
22383
|
+
48 TempDataSize no
|
22384
|
+
56 TempDataFormat no
|
22385
|
+
58 TempImageWidth no
|
22386
|
+
60 TempImageHeight no
|
22387
|
+
62 TempImageBpp no
|
22388
|
+
64 VisibleDataSize no
|
22389
|
+
72 VisibleDataFormat no
|
22390
|
+
74 VisibleImageWidth no
|
22391
|
+
76 VisibleImageHeight no
|
22392
|
+
78 VisibleImageBpp no
|
22393
|
+
|
22335
22394
|
=head2 Stim Tags
|
22336
22395
|
|
22337
22396
|
These tags are part of the CIPA Stereo Still Image specification, and are
|
@@ -22395,6 +22454,54 @@ L<http://www.scalado.com/>.)
|
|
22395
22454
|
'SPMO' DataLength? no
|
22396
22455
|
'WDTH' PreviewImageWidth no
|
22397
22456
|
|
22457
|
+
=head2 InfiRay Tags
|
22458
|
+
|
22459
|
+
=head3 InfiRay Factory Tags
|
22460
|
+
|
22461
|
+
This table lists tags found in the InfiRay APP4 IJPEG camera factory
|
22462
|
+
defaults and calibration data.
|
22463
|
+
|
22464
|
+
Index1 Tag Name Writable
|
22465
|
+
------ -------- --------
|
22466
|
+
0 IJPEGTempVersion no
|
22467
|
+
4 FactDefEmissivity no
|
22468
|
+
5 FactDefTau no
|
22469
|
+
6 FactDefTa no
|
22470
|
+
8 FactDefTu no
|
22471
|
+
10 FactDefDist no
|
22472
|
+
12 FactDefA0 no
|
22473
|
+
16 FactDefB0 no
|
22474
|
+
20 FactDefA1 no
|
22475
|
+
24 FactDefB1 no
|
22476
|
+
28 FactDefP0 no
|
22477
|
+
32 FactDefP1 no
|
22478
|
+
36 FactDefP2 no
|
22479
|
+
68 FactRelSensorTemp no
|
22480
|
+
70 FactRelShutterTemp no
|
22481
|
+
72 FactRelLensTemp no
|
22482
|
+
100 FactStatusGain no
|
22483
|
+
101 FactStatusEnvOK no
|
22484
|
+
102 FactStatusDistOK no
|
22485
|
+
103 FactStatusTempMap no
|
22486
|
+
|
22487
|
+
=head3 InfiRay Picture Tags
|
22488
|
+
|
22489
|
+
This table lists tags found in the InfiRay APP5 IJPEG picture temperature
|
22490
|
+
information.
|
22491
|
+
|
22492
|
+
Index1 Tag Name Writable
|
22493
|
+
------ -------- --------
|
22494
|
+
0 EnvironmentTemp no
|
22495
|
+
4 Distance no
|
22496
|
+
8 Emissivity no
|
22497
|
+
12 Humidity no
|
22498
|
+
16 ReferenceTemp no
|
22499
|
+
32 TempUnit no
|
22500
|
+
33 ShowCenterTemp no
|
22501
|
+
34 ShowMaxTemp no
|
22502
|
+
35 ShowMinTemp no
|
22503
|
+
36 TempMeasureCount no
|
22504
|
+
|
22398
22505
|
=head2 GoPro Tags
|
22399
22506
|
|
22400
22507
|
=head3 GoPro GPMF Tags
|
@@ -22541,6 +22648,20 @@ Tags extracted from the MP4 "fdsc" timed metadata when the ExtractEmbedded
|
|
22541
22648
|
87 OtherSerialNumber no
|
22542
22649
|
102 Model no
|
22543
22650
|
|
22651
|
+
=head2 InfiRay Tags
|
22652
|
+
|
22653
|
+
=head3 InfiRay MixMode Tags
|
22654
|
+
|
22655
|
+
This table lists tags found in the InfiRay APP6 IJPEG visual-infrared mixing
|
22656
|
+
mode section.
|
22657
|
+
|
22658
|
+
Index1 Tag Name Writable
|
22659
|
+
------ -------- --------
|
22660
|
+
0 MixMode no
|
22661
|
+
1 FusionIntensity no
|
22662
|
+
5 OffsetAdjustment no
|
22663
|
+
9 CorrectionAsix no
|
22664
|
+
|
22544
22665
|
=head2 Qualcomm Tags
|
22545
22666
|
|
22546
22667
|
The tags below have been observed in the JPEG APP7 "Qualcomm Camera
|
@@ -23739,6 +23860,56 @@ even if it is not listed in this table.
|
|
23739
23860
|
YhiYloCorK1 no
|
23740
23861
|
YhiYloCorK2 no
|
23741
23862
|
|
23863
|
+
=head2 InfiRay Tags
|
23864
|
+
|
23865
|
+
=head3 InfiRay OpMode Tags
|
23866
|
+
|
23867
|
+
This table lists tags found in the InfiRay APP7 IJPEG camera operation mode
|
23868
|
+
section.
|
23869
|
+
|
23870
|
+
Index1 Tag Name Writable
|
23871
|
+
------ -------- --------
|
23872
|
+
0 WorkingMode no
|
23873
|
+
1 IntegralTime no
|
23874
|
+
5 IntegratTimeHdr no
|
23875
|
+
9 GainStable no
|
23876
|
+
10 TempControlEnable no
|
23877
|
+
11 DeviceTemp no
|
23878
|
+
|
23879
|
+
=head3 InfiRay Isothermal Tags
|
23880
|
+
|
23881
|
+
This table lists tags found in the InfiRay APP8 IJPEG picture isothermal
|
23882
|
+
information.
|
23883
|
+
|
23884
|
+
Index1 Tag Name Writable
|
23885
|
+
------ -------- --------
|
23886
|
+
0 IsothermalMax no
|
23887
|
+
4 IsothermalMin no
|
23888
|
+
8 ChromaBarMax no
|
23889
|
+
12 ChromaBarMin no
|
23890
|
+
|
23891
|
+
=head3 InfiRay Sensor Tags
|
23892
|
+
|
23893
|
+
This table lists tags found in the InfiRay APP9 IJPEG sensor information
|
23894
|
+
chunk.
|
23895
|
+
|
23896
|
+
Index1 Tag Name Writable
|
23897
|
+
------ -------- --------
|
23898
|
+
0 IRSensorManufacturer no
|
23899
|
+
64 IRSensorName no
|
23900
|
+
128 IRSensorPartNumber no
|
23901
|
+
192 IRSensorSerialNumber no
|
23902
|
+
256 IRSensorFirmware no
|
23903
|
+
320 IRSensorAperture no
|
23904
|
+
324 IRFocalLength no
|
23905
|
+
384 VisibleSensorManufacturer no
|
23906
|
+
448 VisibleSensorName no
|
23907
|
+
512 VisibleSensorPartNumber no
|
23908
|
+
576 VisibleSensorSerialNumber no
|
23909
|
+
640 VisibleSensorFirmware no
|
23910
|
+
704 VisibleSensorAperture no
|
23911
|
+
708 VisibleFocalLength no
|
23912
|
+
|
23742
23913
|
=head2 Jpeg2000 Tags
|
23743
23914
|
|
23744
23915
|
The tags below are found in JPEG 2000 images and the JUMBF metadata in JPEG
|
@@ -25876,6 +26047,7 @@ check if speed is more of a concern.
|
|
25876
26047
|
'acTL' AnimationControl PNG AnimationControl
|
25877
26048
|
'bKGD' BackgroundColor no
|
25878
26049
|
'cHRM' PrimaryChromaticities PNG PrimaryChromaticities
|
26050
|
+
'cICP' CICodePoints PNG CICodePoints
|
25879
26051
|
'caBX' JUMBF Jpeg2000
|
25880
26052
|
'dSIG' DigitalSignature no
|
25881
26053
|
'eXIf' eXIf EXIF
|
@@ -25940,6 +26112,18 @@ L<https://wiki.mozilla.org/APNG_Specification> for details.
|
|
25940
26112
|
6 BlueX no
|
25941
26113
|
7 BlueY no
|
25942
26114
|
|
26115
|
+
=head3 PNG CICodePoints Tags
|
26116
|
+
|
26117
|
+
These tags are found in the PNG cICP chunk and belong to the PNG-cICP family
|
26118
|
+
1 group.
|
26119
|
+
|
26120
|
+
Index1 Tag Name Writable
|
26121
|
+
------ -------- --------
|
26122
|
+
0 ColorPrimaries no
|
26123
|
+
1 TransferCharacteristics no
|
26124
|
+
2 MatrixCoefficients no
|
26125
|
+
3 VideoFullRangeFlag no
|
26126
|
+
|
25943
26127
|
=head3 PNG TextualData Tags
|
25944
26128
|
|
25945
26129
|
The PNG TextualData format allows arbitrary tag names to be used. The tags
|
@@ -26403,12 +26587,13 @@ Tags extracted from DPX (Digital Picture Exchange) images.
|
|
26403
26587
|
|
26404
26588
|
=head2 OpenEXR Tags
|
26405
26589
|
|
26406
|
-
Information extracted from EXR images.
|
26407
|
-
|
26590
|
+
Information extracted from EXR images. Use the ExtractEmbedded option to
|
26591
|
+
extract information from all frames of a multipart image. See
|
26592
|
+
L<http://www.openexr.com/> for the official specification.
|
26408
26593
|
|
26409
26594
|
Tag ID Tag Name Writable
|
26410
26595
|
------ -------- --------
|
26411
|
-
'
|
26596
|
+
'_flags' Flags no
|
26412
26597
|
'_ver' EXRVersion no
|
26413
26598
|
'adoptedNeutral' AdoptedNeutral no
|
26414
26599
|
'altitude' GPSAltitude no
|
@@ -26416,6 +26601,7 @@ the official specification.
|
|
26416
26601
|
'capDate' DateTimeOriginal no
|
26417
26602
|
'channels' Channels no
|
26418
26603
|
'chromaticities' Chromaticities no
|
26604
|
+
'chunkCount' ChunkCount no
|
26419
26605
|
'comments' Comments no
|
26420
26606
|
'compression' Compression no
|
26421
26607
|
'dataWindow' DataWindow no
|
@@ -26431,6 +26617,7 @@ the official specification.
|
|
26431
26617
|
'longitude' GPSLongitude no
|
26432
26618
|
'lookModTransform' LookModTransform no
|
26433
26619
|
'multiView' MultiView no
|
26620
|
+
'name' Name no
|
26434
26621
|
'owner' Owner no
|
26435
26622
|
'pixelAspectRatio' PixelAspectRatio no
|
26436
26623
|
'preview' Preview no
|
@@ -26439,7 +26626,9 @@ the official specification.
|
|
26439
26626
|
'screenWindowWidth' ScreenWindowWidth no
|
26440
26627
|
'tiles' Tiles no
|
26441
26628
|
'timeCode' TimeCode no
|
26629
|
+
'type' Type no
|
26442
26630
|
'utcOffset' TimeZone no
|
26631
|
+
'version' Version no
|
26443
26632
|
'whiteLuminance' WhiteLuminance no
|
26444
26633
|
'worldToCamera' WorldToCamera no
|
26445
26634
|
'worldToNDC' WorldToNDC no
|
@@ -37221,6 +37410,17 @@ name. See L<http://tools.ietf.org/html/rfc5545> for the official iCalendar
|
|
37221
37410
|
'X-wr-relcalid' CalendarID no
|
37222
37411
|
'X-wr-timezone' TimeZone2 no
|
37223
37412
|
|
37413
|
+
=head3 VCard VNote Tags
|
37414
|
+
|
37415
|
+
Tags extracted from V-Note VNT files.
|
37416
|
+
|
37417
|
+
Tag ID Tag Name Writable
|
37418
|
+
------ -------- --------
|
37419
|
+
'Body' Body no
|
37420
|
+
'Dcreated' CreateDate no
|
37421
|
+
'Last-modified' ModifyDate no
|
37422
|
+
'Version' Version no
|
37423
|
+
|
37224
37424
|
=head2 Text Tags
|
37225
37425
|
|
37226
37426
|
Although basic text files contain no metadata, the following tags are
|
@@ -38009,6 +38209,8 @@ values, may created via the ExifTool configuration file.
|
|
38009
38209
|
OriginalDecisionData OriginalDecisionDataOffset yes!
|
38010
38210
|
OtherImage OtherImageStart yes
|
38011
38211
|
OtherImageLength
|
38212
|
+
OtherImageStart (1)
|
38213
|
+
OtherImageLength (1)
|
38012
38214
|
PeakSpectralSensitivity FLIR:PlanckB no
|
38013
38215
|
PreviewImage PreviewImageStart yes
|
38014
38216
|
PreviewImageLength
|
@@ -17,7 +17,7 @@ use strict;
|
|
17
17
|
use vars qw($VERSION);
|
18
18
|
use Image::ExifTool qw(:DataAccess :Utils);
|
19
19
|
|
20
|
-
$VERSION = '1.
|
20
|
+
$VERSION = '1.07';
|
21
21
|
|
22
22
|
my %unescapeVCard = ( '\\'=>'\\', ','=>',', 'n'=>"\n", 'N'=>"\n" );
|
23
23
|
|
@@ -190,6 +190,15 @@ my %timeInfo = (
|
|
190
190
|
'X-wr-alarmuid' => 'AlarmUID',
|
191
191
|
);
|
192
192
|
|
193
|
+
%Image::ExifTool::VCard::VNote = (
|
194
|
+
GROUPS => { 1 => 'VNote', 2 => 'Document' },
|
195
|
+
NOTES => 'Tags extracted from V-Note VNT files.',
|
196
|
+
Version => { },
|
197
|
+
Body => { },
|
198
|
+
Dcreated => { Name => 'CreateDate', Groups => { 2 => 'Time' }, %timeInfo },
|
199
|
+
'Last-modified' => { Name => 'ModifyDate', Groups => { 2 => 'Time' }, %timeInfo },
|
200
|
+
);
|
201
|
+
|
193
202
|
#------------------------------------------------------------------------------
|
194
203
|
# Get vCard tag, creating if necessary
|
195
204
|
# Inputs: 0) ExifTool ref, 1) tag table ref, 2) tag ID, 3) tag Name,
|
@@ -254,9 +263,14 @@ sub ProcessVCard($$)
|
|
254
263
|
my $raf = $$dirInfo{RAF};
|
255
264
|
my ($buff, $val, $ok, $component, %compNum, @count);
|
256
265
|
|
257
|
-
return 0 unless $raf->Read($buff, 24) and $raf->Seek(0,0) and $buff=~/^BEGIN:(VCARD|VCALENDAR)\r\n/i;
|
258
|
-
my
|
259
|
-
|
266
|
+
return 0 unless $raf->Read($buff, 24) and $raf->Seek(0,0) and $buff=~/^BEGIN:(VCARD|VCALENDAR|VNOTE)\r\n/i;
|
267
|
+
my %info = (
|
268
|
+
VCARD => [ qw(VCard vCard Main VCF) ],
|
269
|
+
VCALENDAR => [ qw(ICS iCalendar VCalendar ICS) ],
|
270
|
+
VNOTE => [ qw(VNote vNote VNote VNT text/v-note) ],
|
271
|
+
);
|
272
|
+
my ($type, $lbl, $tbl, $ext, $mime) = @{$info{uc($1)}};
|
273
|
+
$et->SetFileType($type, $mime, $ext);
|
260
274
|
return 1 if $$et{OPTIONS}{FastScan} and $$et{OPTIONS}{FastScan} == 3;
|
261
275
|
local $/ = "\r\n";
|
262
276
|
my $tagTablePtr = GetTagTable("Image::ExifTool::VCard::$tbl");
|
@@ -274,7 +288,7 @@ sub ProcessVCard($$)
|
|
274
288
|
}
|
275
289
|
if ($val =~ /^(BEGIN|END):(V?)(\w+)$/i) {
|
276
290
|
my ($begin, $v, $what) = ((lc($1) eq 'begin' ? 1 : 0), $2, ucfirst lc $3);
|
277
|
-
if ($what eq 'Card' or $what eq 'Calendar') {
|
291
|
+
if ($what eq 'Card' or $what eq 'Calendar' or $what eq 'Note') {
|
278
292
|
if ($begin) {
|
279
293
|
@count = ( { } ); # reset group counters
|
280
294
|
} else {
|
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.56';
|
33
33
|
$RELEASE = '';
|
34
34
|
@ISA = qw(Exporter);
|
35
35
|
%EXPORT_TAGS = (
|
@@ -150,8 +150,8 @@ sub ReadValue($$$;$$$);
|
|
150
150
|
Real::Media Real::Audio Real::Metafile Red RIFF AIFF ASF WTV DICOM FITS MIE
|
151
151
|
JSON HTML XMP::SVG Palm Palm::MOBI Palm::EXTH Torrent EXE EXE::PEVersion
|
152
152
|
EXE::PEString EXE::MachO EXE::PEF EXE::ELF EXE::AR EXE::CHM LNK Font VCard
|
153
|
-
Text VCard::VCalendar RSRC Rawzor ZIP ZIP::GZIP ZIP::RAR RTF
|
154
|
-
FLIR::AFF FLIR::FPF MacOS MacOS::MDItem FlashPix::DocTable
|
153
|
+
Text VCard::VCalendar VCard::VNote RSRC Rawzor ZIP ZIP::GZIP ZIP::RAR RTF
|
154
|
+
OOXML iWork ISO FLIR::AFF FLIR::FPF MacOS MacOS::MDItem FlashPix::DocTable
|
155
155
|
);
|
156
156
|
|
157
157
|
# alphabetical list of current Lang modules
|
@@ -526,6 +526,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
526
526
|
VCARD=> ['VCard','Virtual Card'],
|
527
527
|
VCF => 'VCARD',
|
528
528
|
VOB => ['MPEG', 'Video Object'],
|
529
|
+
VNT => [['FPX','VCard'], 'Scene7 Vignette or V-Note text file'],
|
529
530
|
VRD => ['VRD', 'Canon VRD Recipe Data'],
|
530
531
|
VSD => ['FPX', 'Microsoft Visio Drawing'],
|
531
532
|
WAV => ['RIFF', 'WAVeform (Windows digital audio)'],
|
@@ -577,6 +578,7 @@ my %fileDescription = (
|
|
577
578
|
'Win32 DLL' => 'Windows 32-bit Dynamic Link Library',
|
578
579
|
'Win64 EXE' => 'Windows 64-bit Executable',
|
579
580
|
'Win64 DLL' => 'Windows 64-bit Dynamic Link Library',
|
581
|
+
VNote => 'V-Note document',
|
580
582
|
);
|
581
583
|
|
582
584
|
# MIME types for applicable file types above
|
@@ -977,7 +979,7 @@ $testLen = 1024; # number of bytes to read when testing for magic number
|
|
977
979
|
TAR => '.{257}ustar( )?\0', # (this doesn't catch old-style tar files)
|
978
980
|
TXT => '(\xff\xfe|(\0\0)?\xfe\xff|(\xef\xbb\xbf)?[\x07-\x0d\x20-\x7e\x80-\xfe]*$)',
|
979
981
|
TIFF => '(II|MM)', # don't test magic number (some raw formats are different)
|
980
|
-
VCard=> '(?i)BEGIN:(VCARD|VCALENDAR)\r\n',
|
982
|
+
VCard=> '(?i)BEGIN:(VCARD|VCALENDAR|VNOTE)\r\n',
|
981
983
|
VRD => 'CANON OPTIONAL DATA\0',
|
982
984
|
WMF => '(\xd7\xcd\xc6\x9a\0\0|\x01\0\x09\0\0\x03)',
|
983
985
|
WTV => '\xb7\xd8\x00\x20\x37\x49\xda\x11\xa6\x4e\x00\x07\xe9\x5e\xad\x8d',
|
@@ -6871,7 +6873,7 @@ sub ProcessJPEG($$)
|
|
6871
6873
|
$self->Warn("Ignored APP1 segment length $length (unknown header)");
|
6872
6874
|
}
|
6873
6875
|
}
|
6874
|
-
} elsif ($marker == 0xe2) { # APP2 (ICC Profile, FPXR, MPF, PreviewImage)
|
6876
|
+
} elsif ($marker == 0xe2) { # APP2 (ICC Profile, FPXR, MPF, InfiRay, PreviewImage)
|
6875
6877
|
if ($$segDataPt =~ /^ICC_PROFILE\0/ and $length >= 14) {
|
6876
6878
|
$dumpType = 'ICC_Profile';
|
6877
6879
|
# must concatenate profile chunks (note: handle the case where
|
@@ -6933,6 +6935,12 @@ sub ProcessJPEG($$)
|
|
6933
6935
|
# extract the MPF information (it is in standard TIFF format)
|
6934
6936
|
my $tagTablePtr = GetTagTable('Image::ExifTool::MPF::Main');
|
6935
6937
|
$self->ProcessTIFF(\%dirInfo, $tagTablePtr);
|
6938
|
+
} elsif ($$segDataPt =~ /^....IJPEG\0/s) {
|
6939
|
+
$dumpType = 'InfiRay Version';
|
6940
|
+
$$self{HasIJPEG} = 1;
|
6941
|
+
SetByteOrder('II');
|
6942
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::InfiRay::Version');
|
6943
|
+
$self->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
6936
6944
|
} elsif ($$segDataPt =~ /^(|QVGA\0|BGTH)\xff\xd8\xff[\xdb\xe0\xe1]/) {
|
6937
6945
|
# Samsung/GE/GoPro="", BenQ DC C1220/Pentacon/Polaroid="QVGA\0",
|
6938
6946
|
# Digilife DDC-690/Rollei="BGTH"
|
@@ -6973,8 +6981,8 @@ sub ProcessJPEG($$)
|
|
6973
6981
|
SetByteOrder('MM');
|
6974
6982
|
my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::JPS');
|
6975
6983
|
$self->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
6976
|
-
} elsif ($$self{Make} eq 'DJI') {
|
6977
|
-
$dumpType = 'DJI ThermalData';
|
6984
|
+
} elsif ($$self{HasIJPEG} or $$self{Make} eq 'DJI') {
|
6985
|
+
$dumpType = $$self{HasIJPEG} ? 'InfiRay ImagingData' : 'DJI ThermalData';
|
6978
6986
|
# add this data to the combined data if it exists
|
6979
6987
|
my $dataPt = $segDataPt;
|
6980
6988
|
if (defined $combinedSegData) {
|
@@ -6984,11 +6992,14 @@ sub ProcessJPEG($$)
|
|
6984
6992
|
if ($nextMarker == $marker) {
|
6985
6993
|
$combinedSegData = $$segDataPt unless defined $combinedSegData;
|
6986
6994
|
} else {
|
6987
|
-
# process DJI
|
6995
|
+
# process InfiRay/DJI thermal data
|
6988
6996
|
my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::Main');
|
6989
6997
|
$self->HandleTag($tagTablePtr, 'APP3', $$dataPt);
|
6990
6998
|
undef $combinedSegData;
|
6991
6999
|
}
|
7000
|
+
} elsif ($$self{HasIJPEG}) {
|
7001
|
+
$dumpType = 'InfiRay Data',
|
7002
|
+
|
6992
7003
|
} elsif ($$segDataPt =~ /^\xff\xd8\xff\xdb/) {
|
6993
7004
|
$dumpType = 'PreviewImage'; # (Samsung, HP, BenQ)
|
6994
7005
|
$preview = $$segDataPt;
|
@@ -6997,7 +7008,7 @@ sub ProcessJPEG($$)
|
|
6997
7008
|
$self->FoundTag('PreviewImage', $preview);
|
6998
7009
|
undef $preview;
|
6999
7010
|
}
|
7000
|
-
} elsif ($marker == 0xe4) { # APP4 ("SCALADO", FPXR, PreviewImage)
|
7011
|
+
} elsif ($marker == 0xe4) { # APP4 (InfiRay, "SCALADO", FPXR, PreviewImage)
|
7001
7012
|
if ($$segDataPt =~ /^SCALADO\0/ and $length >= 16) {
|
7002
7013
|
$dumpType = 'SCALADO';
|
7003
7014
|
my ($num, $idx, $len) = unpack('x8n2N', $$segDataPt);
|
@@ -7028,6 +7039,11 @@ sub ProcessJPEG($$)
|
|
7028
7039
|
DirStart(\%dirInfo, 0, 0);
|
7029
7040
|
my $tagTablePtr = GetTagTable('Image::ExifTool::DJI::ThermalParams');
|
7030
7041
|
$self->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
7042
|
+
} elsif ($$self{HasIJPEG} and $length >= 120) {
|
7043
|
+
$dumpType = 'InfiRay Factory';
|
7044
|
+
SetByteOrder('II');
|
7045
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::InfiRay::Factory');
|
7046
|
+
$self->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
7031
7047
|
} elsif ($preview) {
|
7032
7048
|
# continued Samsung S1060 preview from APP3
|
7033
7049
|
$dumpType = 'PreviewImage';
|
@@ -7039,7 +7055,7 @@ sub ProcessJPEG($$)
|
|
7039
7055
|
$self->FoundTag('PreviewImage', $preview);
|
7040
7056
|
undef $preview;
|
7041
7057
|
}
|
7042
|
-
} elsif ($marker == 0xe5) { # APP5 (Ricoh "RMETA")
|
7058
|
+
} elsif ($marker == 0xe5) { # APP5 (InfiRay, Ricoh "RMETA")
|
7043
7059
|
if ($$segDataPt =~ /^RMETA\0/) {
|
7044
7060
|
# (NOTE: apparently these may span multiple segments, but I haven't seen
|
7045
7061
|
# a sample like this, so multi-segment support hasn't yet been implemented)
|
@@ -7054,13 +7070,18 @@ sub ProcessJPEG($$)
|
|
7054
7070
|
$dumpType = 'DJI ThermalCal';
|
7055
7071
|
my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::Main');
|
7056
7072
|
$self->HandleTag($tagTablePtr, 'APP5', $$segDataPt);
|
7073
|
+
} elsif ($$self{HasIJPEG} and $length >= 38) {
|
7074
|
+
$dumpType = 'InfiRay Picture';
|
7075
|
+
SetByteOrder('II');
|
7076
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::InfiRay::Picture');
|
7077
|
+
$self->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
7057
7078
|
} elsif ($preview) {
|
7058
7079
|
$dumpType = 'PreviewImage';
|
7059
7080
|
$preview .= $$segDataPt;
|
7060
7081
|
$self->FoundTag('PreviewImage', $preview);
|
7061
7082
|
undef $preview;
|
7062
7083
|
}
|
7063
|
-
} elsif ($marker == 0xe6) { # APP6 (Toshiba EPPIM, NITF, HP_TDHD)
|
7084
|
+
} elsif ($marker == 0xe6) { # APP6 (InfiRay, Toshiba EPPIM, NITF, HP_TDHD)
|
7064
7085
|
if ($$segDataPt =~ /^EPPIM\0/) {
|
7065
7086
|
undef $dumpType; # (will be dumped here)
|
7066
7087
|
DirStart(\%dirInfo, 6, 6);
|
@@ -7093,8 +7114,13 @@ sub ProcessJPEG($$)
|
|
7093
7114
|
$dumpType = 'DJI_DTAT';
|
7094
7115
|
my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::Main');
|
7095
7116
|
$self->HandleTag($tagTablePtr, 'APP6', $$segDataPt);
|
7117
|
+
} elsif ($$self{HasIJPEG} and $length >= 129) {
|
7118
|
+
$dumpType = 'InfiRay MixMode';
|
7119
|
+
SetByteOrder('II');
|
7120
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::InfiRay::MixMode');
|
7121
|
+
$self->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
7096
7122
|
}
|
7097
|
-
} elsif ($marker == 0xe7) { # APP7 (Pentax, Huawei, Qualcomm)
|
7123
|
+
} elsif ($marker == 0xe7) { # APP7 (InfiRay, Pentax, Huawei, Qualcomm)
|
7098
7124
|
if ($$segDataPt =~ /^PENTAX \0(II|MM)/) {
|
7099
7125
|
# found in K-3 images (is this multi-segment??)
|
7100
7126
|
SetByteOrder($1);
|
@@ -7133,16 +7159,26 @@ sub ProcessJPEG($$)
|
|
7133
7159
|
DirStart(\%dirInfo, 27);
|
7134
7160
|
$dirInfo{DirName} = 'Qualcomm';
|
7135
7161
|
$self->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
7162
|
+
} elsif ($$self{HasIJPEG} and $length >= 32) {
|
7163
|
+
$dumpType = 'InfiRay OpMode';
|
7164
|
+
SetByteOrder('II');
|
7165
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::InfiRay::OpMode');
|
7166
|
+
$self->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
7136
7167
|
}
|
7137
|
-
} elsif ($marker == 0xe8) { # APP8 (SPIFF)
|
7168
|
+
} elsif ($marker == 0xe8) { # APP8 (InfiRay, SPIFF)
|
7138
7169
|
# my sample SPIFF has 32 bytes of data, but spec states 30
|
7139
7170
|
if ($$segDataPt =~ /^SPIFF\0/ and $length == 32) {
|
7140
7171
|
$dumpType = 'SPIFF';
|
7141
7172
|
DirStart(\%dirInfo, 6);
|
7142
7173
|
my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::SPIFF');
|
7143
7174
|
$self->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
7175
|
+
} elsif ($$self{HasIJPEG} and $length >= 32) {
|
7176
|
+
$dumpType = 'InfiRay Isothermal';
|
7177
|
+
SetByteOrder('II');
|
7178
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::InfiRay::Isothermal');
|
7179
|
+
$self->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
7144
7180
|
}
|
7145
|
-
} elsif ($marker == 0xe9) { # APP9 (Media Jukebox)
|
7181
|
+
} elsif ($marker == 0xe9) { # APP9 (InfiRay, Media Jukebox)
|
7146
7182
|
if ($$segDataPt =~ /^Media Jukebox\0/ and $length > 22) {
|
7147
7183
|
$dumpType = 'MediaJukebox';
|
7148
7184
|
# (start parsing after the "<MJMD>")
|
@@ -7151,6 +7187,11 @@ sub ProcessJPEG($$)
|
|
7151
7187
|
require Image::ExifTool::XMP;
|
7152
7188
|
my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::MediaJukebox');
|
7153
7189
|
$self->ProcessDirectory(\%dirInfo, $tagTablePtr, \&Image::ExifTool::XMP::ProcessXMP);
|
7190
|
+
} elsif ($$self{HasIJPEG} and $length >= 768) {
|
7191
|
+
$dumpType = 'InfiRay Sensor';
|
7192
|
+
SetByteOrder('II');
|
7193
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::InfiRay::Sensor');
|
7194
|
+
$self->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
7154
7195
|
}
|
7155
7196
|
} elsif ($marker == 0xea) { # APP10 (PhotoStudio Unicode comments)
|
7156
7197
|
if ($$segDataPt =~ /^UNICODE\0/) {
|