exiftool_vendored 12.55.0 → 12.56.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.
- 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/) {
|