- Timestamp:
- 2021-02-26T19:39:51+13:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone2/perllib/cpan/Image/ExifTool/XMP2.pl
r24107 r34921 2 2 # File: XMP2.pl 3 3 # 4 # Description: Additional XMP schemadefinitions4 # Description: Additional XMP namespace definitions 5 5 # 6 6 # Revisions: 10/12/2008 - P. Harvey Created … … 9 9 # 2) PRISM - http://www.prismstandard.org/ 10 10 # 3) http://www.portfoliofaq.com/pfaq/v7mappings.htm 11 # 4) http://www.iptc.org/IPTC4XMP/ 11 12 # 5) http://creativecommons.org/technology/xmp 12 13 # --> changed to http://wiki.creativecommons.org/Companion_File_metadata_specification (2007/12/21) 13 14 # 6) http://www.optimasc.com/products/fileid/xmp-extensions.pdf 14 15 # 9) http://www.w3.org/TR/SVG11/ 16 # 11) http://www.extensis.com/en/support/kb_article.jsp?articleNumber=6102211 17 # 12) XMPSpecificationPart3_May2013, page 58 18 # 13) https://developer.android.com/training/camera2/Dynamic-depth-v1.0.pdf 15 19 #------------------------------------------------------------------------------ 16 20 … … 21 25 use Image::ExifTool::XMP; 22 26 23 # structure definitions 27 sub Init_crd($); 28 29 #------------------------------------------------------------------------------ 30 31 # xmpDM structure definitions 24 32 my %sCuePointParam = ( 25 33 STRUCT_NAME => 'CuePointParam', … … 68 76 }, 69 77 timeValue => { }, 70 value => { Writable => 'integer' }, 71 ); 72 73 # XMP Dynamic Media schema properties (xmpDM) 78 value => { Writable => 'integer', Notes => 'only in XMP 2008 spec; an error?' }, 79 ); 80 my %sPose = ( 81 STRUCT_NAME => 'Pose', 82 NAMESPACE => { Pose => 'http://ns.google.com/photos/dd/1.0/pose/' }, 83 PositionX => { Writable => 'real', Groups => { 2 => 'Location' } }, 84 PositionY => { Writable => 'real', Groups => { 2 => 'Location' } }, 85 PositionZ => { Writable => 'real', Groups => { 2 => 'Location' } }, 86 RotationX => { Writable => 'real', Groups => { 2 => 'Location' } }, 87 RotationY => { Writable => 'real', Groups => { 2 => 'Location' } }, 88 RotationZ => { Writable => 'real', Groups => { 2 => 'Location' } }, 89 RotationW => { Writable => 'real', Groups => { 2 => 'Location' } }, 90 Timestamp => { 91 Writable => 'integer', 92 Shift => 'Time', 93 Groups => { 2 => 'Time' }, 94 ValueConv => 'ConvertUnixTime($val / 1000, 1, 3)', 95 ValueConvInv => 'int(GetUnixTime($val, 1) * 1000)', 96 PrintConv => '$self->ConvertDateTime($val)', 97 PrintConvInv => '$self->InverseDateTime($val,undef,1)', 98 }, 99 ); 100 my %sEarthPose = ( 101 STRUCT_NAME => 'EarthPose', 102 NAMESPACE => { EarthPose => 'http://ns.google.com/photos/dd/1.0/earthpose/' }, 103 Latitude => { Writable => 'real', Groups => { 2 => 'Location' }, %latConv }, 104 Longitude => { Writable => 'real', Groups => { 2 => 'Location' }, %longConv }, 105 Altitude => { 106 Writable => 'real', 107 Groups => { 2 => 'Location' }, 108 PrintConv => '"$val m"', 109 PrintConvInv => '$val=~s/\s*m$//;$val', 110 }, 111 RotationX => { Writable => 'real', Groups => { 2 => 'Location' } }, 112 RotationY => { Writable => 'real', Groups => { 2 => 'Location' } }, 113 RotationZ => { Writable => 'real', Groups => { 2 => 'Location' } }, 114 RotationW => { Writable => 'real', Groups => { 2 => 'Location' } }, 115 Timestamp => { 116 Writable => 'integer', 117 Shift => 'Time', 118 Groups => { 2 => 'Time' }, 119 ValueConv => 'ConvertUnixTime($val / 1000, 1, 3)', 120 ValueConvInv => 'int(GetUnixTime($val, 1) * 1000)', 121 PrintConv => '$self->ConvertDateTime($val)', 122 PrintConvInv => '$self->InverseDateTime($val,undef,1)', 123 }, 124 ); 125 my %sVendorInfo = ( 126 STRUCT_NAME => 'VendorInfo', 127 NAMESPACE => { VendorInfo => 'http://ns.google.com/photos/dd/1.0/vendorinfo/' }, 128 Model => { }, 129 Manufacturer => { }, 130 Notes => { }, 131 ); 132 my %sAppInfo = ( 133 STRUCT_NAME => 'AppInfo', 134 NAMESPACE => { AppInfo => 'http://ns.google.com/photos/dd/1.0/appinfo/' }, 135 Application => { }, 136 Version => { }, 137 ItemURI => { }, 138 ); 139 140 # camera-raw defaults 141 %Image::ExifTool::XMP::crd = ( 142 %xmpTableDefaults, 143 INIT_TABLE => \&Init_crd, 144 GROUPS => { 1 => 'XMP-crd', 2 => 'Image' }, 145 NAMESPACE => 'crd', 146 AVOID => 1, 147 TABLE_DESC => 'Photoshop Camera Defaults namespace', 148 NOTES => 'Adobe Camera Raw Defaults tags.', 149 # (tags added dynamically when WRITE_PROC is called) 150 ); 151 152 # XMP Dynamic Media namespace properties (xmpDM) 74 153 %Image::ExifTool::XMP::xmpDM = ( 75 154 %xmpTableDefaults, 76 155 GROUPS => { 1 => 'XMP-xmpDM', 2 => 'Image' }, 77 156 NAMESPACE => 'xmpDM', 78 NOTES => 'XMP Dynamic Media schematags.',157 NOTES => 'XMP Dynamic Media namespace tags.', 79 158 absPeakAudioFilePath=> { }, 80 159 album => { }, … … 139 218 director => { }, 140 219 directorPhotography => { }, 220 discNumber => { }, #12 141 221 duration => { Struct => \%sTime }, 142 222 engineer => { }, … … 156 236 logComment => { }, 157 237 loop => { Writable => 'boolean' }, 238 lyrics => { }, #12 158 239 numberOfBeats => { Writable => 'real' }, 159 240 markers => { Struct => \%sMarker, List => 'Seq' }, 160 241 metadataModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo }, 161 242 outCue => { Struct => \%sTime }, 243 partOfCompilation=>{ Writable => 'boolean' }, #12 162 244 projectName => { }, 163 245 projectRef => { … … 213 295 speakerPlacement=> { }, 214 296 startTimecode => { Struct => \%sTimecode }, 297 startTimeSampleSize => { Writable => 'integer' }, #PH 298 startTimeScale => { }, #PH (real?) 215 299 stretchMode => { 216 300 PrintConv => { … … 270 354 }, 271 355 }, 272 videoCompressor 356 videoCompressor => { }, 273 357 videoFieldOrder => { 274 358 PrintConv => { … … 278 362 }, 279 363 }, 280 videoFrameRate => {},281 videoFrameSize 282 videoModDate 364 videoFrameRate => { Writable => 'real' }, 365 videoFrameSize => { Struct => \%sDimensions }, 366 videoModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo }, 283 367 videoPixelAspectRatio => { Writable => 'rational' }, 284 368 videoPixelDepth => { … … 295 379 296 380 #------------------------------------------------------------------------------ 297 # PLUS vocabulary conversions 298 my %plusVocab = ( 299 ValueConv => '$val =~ s{http://ns.useplus.org/ldf/vocab/}{}; $val', 300 ValueConvInv => '"http://ns.useplus.org/ldf/vocab/$val"', 301 ); 302 303 # PLUS License Data Format 1.2.0 structures 304 # (this seems crazy to me -- why did they define different ID/Name structures 305 # for each field rather than just re-using the same structure?) 306 my %plusLicensee = ( 307 STRUCT_NAME => 'Licensee', 308 NAMESPACE => 'plus', 309 TYPE => 'plus:LicenseeDetail', 310 LicenseeID => { }, 311 LicenseeName=> { }, 312 ); 313 my %plusEndUser = ( 314 STRUCT_NAME => 'EndUser', 315 NAMESPACE => 'plus', 316 TYPE => 'plus:EndUserDetail', 317 EndUserID => { }, 318 EndUserName => { }, 319 ); 320 my %plusLicensor = ( 321 STRUCT_NAME => 'Licensor', 322 NAMESPACE => 'plus', 323 TYPE => 'plus:LicensorDetail', 324 LicensorID => { }, 325 LicensorName => { }, 326 LicensorStreetAddress => { }, 327 LicensorExtendedAddress => { }, 328 LicensorCity => { }, 329 LicensorRegion => { }, 330 LicensorPostalCode => { }, 331 LicensorCountry => { }, 332 LicensorTelephoneType1 => { 333 %plusVocab, 334 PrintConv => { 335 'work' => 'Work', 336 'cell' => 'Cell', 337 'fax' => 'FAX', 338 'home' => 'Home', 339 'pager' => 'Pager', 340 }, 341 }, 342 LicensorTelephone1 => { }, 343 LicensorTelephoneType2 => { 344 %plusVocab, 345 PrintConv => { 346 'work' => 'Work', 347 'cell' => 'Cell', 348 'fax' => 'FAX', 349 'home' => 'Home', 350 'pager' => 'Pager', 351 }, 352 }, 353 LicensorTelephone2 => { }, 354 LicensorEmail => { }, 355 LicensorURL => { }, 356 ); 357 my %plusCopyrightOwner = ( 358 STRUCT_NAME => 'CopyrightOwner', 359 NAMESPACE => 'plus', 360 TYPE => 'plus:CopyrightOwnerDetail', 361 CopyrightOwnerID => { }, 362 CopyrightOwnerName => { }, 363 ); 364 my %plusImageCreator = ( 365 STRUCT_NAME => 'ImageCreator', 366 NAMESPACE => 'plus', 367 TYPE => 'plus:ImageCreatorDetail', 368 ImageCreatorID => { }, 369 ImageCreatorName => { }, 370 ); 371 my %plusImageSupplier = ( 372 STRUCT_NAME => 'ImageSupplier', 373 NAMESPACE => 'plus', 374 TYPE => 'plus:ImageSupplierDetail', 375 ImageSupplierID => { }, 376 ImageSupplierName => { }, 377 ); 378 379 # PLUS License Data Format 1.2.0 (plus) (ref 1) 380 %Image::ExifTool::XMP::plus = ( 381 %xmpTableDefaults, 382 GROUPS => { 0 => 'XMP', 1 => 'XMP-plus', 2 => 'Author' }, 383 NAMESPACE => 'plus', 381 # IPTC Extensions version 1.3 (+ proposed video extensions) 382 383 # IPTC Extension 1.0 structures 384 my %sLocationDetails = ( 385 STRUCT_NAME => 'LocationDetails', 386 NAMESPACE => 'Iptc4xmpExt', 387 GROUPS => { 2 => 'Location' }, 388 Identifier => { List => 'Bag', Namespace => 'xmp' }, 389 City => { }, 390 CountryCode => { }, 391 CountryName => { }, 392 ProvinceState => { }, 393 Sublocation => { }, 394 WorldRegion => { }, 395 LocationId => { List => 'Bag' }, 396 LocationName => { Writable => 'lang-alt' }, 397 GPSLatitude => { Namespace => 'exif', %latConv }, 398 GPSLongitude => { Namespace => 'exif', %longConv }, 399 GPSAltitude => { 400 Namespace => 'exif', 401 Writable => 'rational', 402 PrintConv => '$val =~ /^(inf|undef)$/ ? $val : "$val m"', 403 PrintConvInv => '$val=~s/\s*m$//;$val', 404 }, 405 ); 406 my %sCVTermDetails = ( 407 STRUCT_NAME => 'CVTermDetails', 408 NAMESPACE => 'Iptc4xmpExt', 409 CvTermId => { }, 410 CvTermName => { Writable => 'lang-alt' }, 411 CvId => { }, 412 CvTermRefinedAbout => { }, 413 ); 414 415 # IPTC video extensions 416 my %sPublicationEvent = ( 417 STRUCT_NAME => 'PublicationEvent', 418 NAMESPACE => 'Iptc4xmpExt', 419 Date => { Groups => { 2 => 'Time' }, %dateTimeInfo }, 420 Name => { }, 421 Identifier => { }, 422 ); 423 my %sEntity = ( 424 STRUCT_NAME => 'Entity', 425 NAMESPACE => 'Iptc4xmpExt', 426 Identifier => { List => 'Bag', Namespace => 'xmp' }, 427 Name => { Writable => 'lang-alt' }, 428 ); 429 my %sEntityWithRole = ( 430 STRUCT_NAME => 'EntityWithRole', 431 NAMESPACE => 'Iptc4xmpExt', 432 Identifier => { List => 'Bag', Namespace => 'xmp' }, 433 Name => { Writable => 'lang-alt' }, 434 Role => { List => 'Bag' }, 435 ); 436 # (no longer used) 437 #my %sFrameSize = ( 438 # STRUCT_NAME => 'FrameSize', 439 # NAMESPACE => 'Iptc4xmpExt', 440 # WidthPixels => { Writable => 'integer' }, 441 # HeightPixels => { Writable => 'integer' }, 442 #); 443 my %sRating = ( 444 STRUCT_NAME => 'Rating', 445 NAMESPACE => 'Iptc4xmpExt', 446 RatingValue => { FlatName => 'Value' }, 447 RatingSourceLink => { FlatName => 'SourceLink' }, 448 RatingScaleMinValue => { FlatName => 'ScaleMinValue' }, 449 RatingScaleMaxValue => { FlatName => 'ScaleMaxValue' }, 450 RatingValueLogoLink => { FlatName => 'ValueLogoLink' }, 451 RatingRegion => { 452 FlatName => 'Region', 453 Struct => \%sLocationDetails, 454 List => 'Bag', 455 }, 456 ); 457 my %sEpisode = ( 458 STRUCT_NAME => 'EpisodeOrSeason', 459 NAMESPACE => 'Iptc4xmpExt', 460 Name => { }, 461 Number => { }, 462 Identifier => { }, 463 ); 464 my %sSeries = ( 465 STRUCT_NAME => 'Series', 466 NAMESPACE => 'Iptc4xmpExt', 467 Name => { }, 468 Identifier => { }, 469 ); 470 my %sTemporalCoverage = ( 471 STRUCT_NAME => 'TemporalCoverage', 472 NAMESPACE => 'Iptc4xmpExt', 473 tempCoverageFrom => { FlatName => 'From', %dateTimeInfo, Groups => { 2 => 'Time' } }, 474 tempCoverageTo => { FlatName => 'To', %dateTimeInfo, Groups => { 2 => 'Time' } }, 475 ); 476 my %sQualifiedLink = ( 477 STRUCT_NAME => 'QualifiedLink', 478 NAMESPACE => 'Iptc4xmpExt', 479 Link => { }, 480 LinkQualifier => { }, 481 ); 482 my %sTextRegion = ( 483 STRUCT_NAME => 'TextRegion', 484 NAMESPACE => 'Iptc4xmpExt', 485 RegionText => { }, 486 Region => { Struct => \%Image::ExifTool::XMP::sArea }, 487 ); 488 my %sLinkedImage = ( 489 STRUCT_NAME => 'LinkedImage', 490 NAMESPACE => 'Iptc4xmpExt', 491 Link => { }, 492 LinkQualifier => { List => 'Bag' }, 493 ImageRole => { }, 494 'format' => { Namespace => 'dc' }, 495 WidthPixels => { Writable => 'integer' }, 496 HeightPixels=> { Writable => 'integer' }, 497 UsedVideoFrame => { Struct => \%sTimecode }, 498 ); 499 my %sBoundaryPoint = ( # new in 1.5 500 STRUCT_NAME => 'BoundaryPoint', 501 NAMESPACE => 'Iptc4xmpExt', 502 rbX => { FlatName => 'X', Writable => 'real' }, 503 rbY => { FlatName => 'Y', Writable => 'real' }, 504 ); 505 my %sRegionBoundary = ( # new in 1.5 506 STRUCT_NAME => 'RegionBoundary', 507 NAMESPACE => 'Iptc4xmpExt', 508 rbShape => { FlatName => 'Shape', PrintConv => { rectangle => 'Rectangle', circle => 'Circle', polygon => 'Polygon' } }, 509 rbUnit => { FlatName => 'Unit', PrintConv => { pixel => 'Pixel', relative => 'Relative' } }, 510 rbX => { FlatName => 'X', Writable => 'real' }, 511 rbY => { FlatName => 'Y', Writable => 'real' }, 512 rbW => { FlatName => 'W', Writable => 'real' }, 513 rbH => { FlatName => 'H', Writable => 'real' }, 514 rbRx => { FlatName => 'Rx', Writable => 'real' }, 515 rbVertices => { FlatName => 'Vertices', List => 'Seq', Struct => \%sBoundaryPoint }, 516 ); 517 my %sImageRegion = ( # new in 1.5 518 STRUCT_NAME => 'ImageRegion', 519 NAMESPACE => undef, # undefined to allow variable-namespace extensions 384 520 NOTES => q{ 385 PLUS License Data Format 1.2.0 schema tags. Note that all 386 controlled-vocabulary tags in this table (ie. tags with a fixed set of 387 values) have raw values which begin with "http://ns.useplus.org/ldf/vocab/", 388 but to reduce clutter this prefix has been removed from the values shown 389 below. (see L<http://ns.useplus.org/>) 390 }, 391 Version => { Name => 'PLUSVersion' }, 392 Licensee => { 393 Struct => \%plusLicensee, 394 List => 'Seq', 395 }, 396 LicenseeLicenseeID => { Flat => 1, Name => 'LicenseeID' }, 397 LicenseeLicenseeName => { Flat => 1, Name => 'LicenseeName' }, 398 EndUser => { 399 Struct => \%plusEndUser, 400 List => 'Seq', 401 }, 402 EndUserEndUserID => { Flat => 1, Name => 'EndUserID' }, 403 EndUserEndUserName => { Flat => 1, Name => 'EndUserName' }, 404 Licensor => { 405 Struct => \%plusLicensor, 406 List => 'Seq', 407 }, 408 LicensorLicensorID => { Flat => 1, Name => 'LicensorID' }, 409 LicensorLicensorName => { Flat => 1, Name => 'LicensorName' }, 410 LicensorLicensorStreetAddress => { Flat => 1, Name => 'LicensorStreetAddress' }, 411 LicensorLicensorExtendedAddress => { Flat => 1, Name => 'LicensorExtendedAddress' }, 412 LicensorLicensorCity => { Flat => 1, Name => 'LicensorCity' }, 413 LicensorLicensorRegion => { Flat => 1, Name => 'LicensorRegion' }, 414 LicensorLicensorPostalCode => { Flat => 1, Name => 'LicensorPostalCode' }, 415 LicensorLicensorCountry => { Flat => 1, Name => 'LicensorCountry' }, 416 LicensorLicensorTelephoneType1 => { Flat => 1, Name => 'LicensorTelephoneType1' }, 417 LicensorLicensorTelephone1 => { Flat => 1, Name => 'LicensorTelephone1' }, 418 LicensorLicensorTelephoneType2 => { Flat => 1, Name => 'LicensorTelephoneType2' }, 419 LicensorLicensorTelephone2 => { Flat => 1, Name => 'LicensorTelephone2' }, 420 LicensorLicensorEmail => { Flat => 1, Name => 'LicensorEmail' }, 421 LicensorLicensorURL => { Flat => 1, Name => 'LicensorURL' }, 422 LicensorNotes => { Writable => 'lang-alt' }, 423 MediaSummaryCode => { }, 424 LicenseStartDate => { %dateTimeInfo, Groups => { 2 => 'Time'} }, 425 LicenseEndDate => { %dateTimeInfo, Groups => { 2 => 'Time'} }, 426 MediaConstraints => { Writable => 'lang-alt' }, 427 RegionConstraints => { Writable => 'lang-alt' }, 428 ProductOrServiceConstraints => { Writable => 'lang-alt' }, 429 ImageFileConstraints => { 430 List => 'Bag', 431 %plusVocab, 432 PrintConv => { 433 'IF-MFN' => 'Maintain File Name', 434 'IF-MID' => 'Maintain ID in File Name', 435 'IF-MMD' => 'Maintain Metadata', 436 'IF-MFT' => 'Maintain File Type', 437 }, 438 }, 439 ImageAlterationConstraints => { 440 List => 'Bag', 441 %plusVocab, 442 PrintConv => { 443 'AL-CRP' => 'No Cropping', 444 'AL-FLP' => 'No Flipping', 445 'AL-RET' => 'No Retouching', 446 'AL-CLR' => 'No Colorization', 447 'AL-DCL' => 'No De-Colorization', 448 'AL-MRG' => 'No Merging', 449 }, 450 }, 451 ImageDuplicationConstraints => { 452 %plusVocab, 453 PrintConv => { 454 'DP-NDC' => 'No Duplication Constraints', 455 'DP-LIC' => 'Duplication Only as Necessary Under License', 456 'DP-NOD' => 'No Duplication', 457 }, 458 }, 459 ModelReleaseStatus => { 460 %plusVocab, 461 PrintConv => { 462 'MR-NON' => 'None', 463 'MR-NAP' => 'Not Applicable', 464 'MR-UMR' => 'Unlimited Model Releases', 465 'MR-LMR' => 'Limited or Incomplete Model Releases', 466 }, 467 }, 468 ModelReleaseID => { List => 'Bag' }, 469 MinorModelAgeDisclosure => { 470 %plusVocab, 471 PrintConv => { 472 'AG-UNK' => 'Age Unknown', 473 'AG-A25' => 'Age 25 or Over', 474 'AG-A24' => 'Age 24', 475 'AG-A23' => 'Age 23', 476 'AG-A22' => 'Age 22', 477 'AG-A21' => 'Age 21', 478 'AG-A20' => 'Age 20', 479 'AG-A19' => 'Age 19', 480 'AG-A18' => 'Age 18', 481 'AG-A17' => 'Age 17', 482 'AG-A16' => 'Age 16', 483 'AG-A15' => 'Age 15', 484 'AG-U14' => 'Age 14 or Under', 485 }, 486 }, 487 PropertyReleaseStatus => { 488 %plusVocab, 489 PrintConv => { 490 'PR-NON' => 'None', 491 'PR-NAP' => 'Not Applicable', 492 'PR-UPR' => 'Unlimited Property Releases', 493 'PR-LPR' => 'Limited or Incomplete Property Releases', 494 }, 495 }, 496 PropertyReleaseID => { List => 'Bag' }, 497 OtherConstraints => { Writable => 'lang-alt' }, 498 CreditLineRequired => { 499 %plusVocab, 500 PrintConv => { 501 'CR-NRQ' => 'Not Required', 502 'CR-COI' => 'Credit on Image', 503 'CR-CAI' => 'Credit Adjacent To Image', 504 'CR-CCA' => 'Credit in Credits Area', 505 }, 506 }, 507 AdultContentWarning => { 508 %plusVocab, 509 PrintConv => { 510 'CW-NRQ' => 'Not Required', 511 'CW-AWR' => 'Adult Content Warning Required', 512 'CW-UNK' => 'Unknown', 513 }, 514 }, 515 OtherLicenseRequirements => { Writable => 'lang-alt' }, 516 TermsAndConditionsText => { Writable => 'lang-alt' }, 517 TermsAndConditionsURL => { }, 518 OtherConditions => { Writable => 'lang-alt' }, 519 ImageType => { 520 %plusVocab, 521 PrintConv => { 522 'TY-PHO' => 'Photographic Image', 523 'TY-ILL' => 'Illustrated Image', 524 'TY-MCI' => 'Multimedia or Composited Image', 525 'TY-VID' => 'Video', 526 'TY-OTR' => 'Other', 527 }, 528 }, 529 LicensorImageID => { }, 530 FileNameAsDelivered => { }, 531 ImageFileFormatAsDelivered => { 532 %plusVocab, 533 PrintConv => { 534 'FF-JPG' => 'JPEG Interchange Formats (JPG, JIF, JFIF)', 535 'FF-TIF' => 'Tagged Image File Format (TIFF)', 536 'FF-GIF' => 'Graphics Interchange Format (GIF)', 537 'FF-RAW' => 'Proprietary RAW Image Format', 538 'FF-DNG' => 'Digital Negative (DNG)', 539 'FF-EPS' => 'Encapsulated PostScript (EPS)', 540 'FF-BMP' => 'Windows Bitmap (BMP)', 541 'FF-PSD' => 'Photoshop Document (PSD)', 542 'FF-PIC' => 'Macintosh Picture (PICT)', 543 'FF-PNG' => 'Portable Network Graphics (PNG)', 544 'FF-WMP' => 'Windows Media Photo (HD Photo)', 545 'FF-OTR' => 'Other', 546 }, 547 }, 548 ImageFileSizeAsDelivered => { 549 %plusVocab, 550 PrintConv => { 551 'SZ-U01' => 'Up to 1 MB', 552 'SZ-U10' => 'Up to 10 MB', 553 'SZ-U30' => 'Up to 30 MB', 554 'SZ-U50' => 'Up to 50 MB', 555 'SZ-G50' => 'Greater than 50 MB', 556 }, 557 }, 558 CopyrightStatus => { 559 %plusVocab, 560 PrintConv => { 561 'CS-PRO' => 'Protected', 562 'CS-PUB' => 'Public Domain', 563 'CS-UNK' => 'Unknown', 564 }, 565 }, 566 CopyrightRegistrationNumber => { }, 567 FirstPublicationDate => { %dateTimeInfo, Groups => { 2 => 'Time'} }, 568 CopyrightOwner => { Struct => \%plusCopyrightOwner, List => 'Seq' }, 569 CopyrightOwnerCopyrightOwnerID => { Flat => 1, Name => 'CopyrightOwnerID' }, 570 CopyrightOwnerCopyrightOwnerName => { Flat => 1, Name => 'CopyrightOwnerName' }, 571 CopyrightOwnerImageID => { }, 572 ImageCreator => { 573 Struct => \%plusImageCreator, 574 List => 'Seq', 575 }, 576 ImageCreatorImageCreatorID => { Flat => 1, Name => 'ImageCreatorID' }, 577 ImageCreatorImageCreatorName => { Flat => 1, Name => 'ImageCreatorName' }, 578 ImageCreatorImageID => { }, 579 ImageSupplier => { 580 Struct => \%plusImageSupplier, 581 List => 'Seq', 582 }, 583 ImageSupplierImageSupplierID => { Flat => 1, Name => 'ImageSupplierID' }, 584 ImageSupplierImageSupplierName => { Flat => 1, Name => 'ImageSupplierName' }, 585 ImageSupplierImageID => { }, 586 LicenseeImageID => { }, 587 LicenseeImageNotes => { Writable => 'lang-alt' }, 588 OtherImageInfo => { Writable => 'lang-alt' }, 589 LicenseID => { }, 590 LicensorTransactionID => { List => 'Bag' }, 591 LicenseeTransactionID => { List => 'Bag' }, 592 LicenseeProjectReference=> { List => 'Bag' }, 593 LicenseTransactionDate => { %dateTimeInfo, Groups => { 2 => 'Time'} }, 594 Reuse => { 595 %plusVocab, 596 PrintConv => { 597 'RE-REU' => 'Repeat Use', 598 'RE-NAP' => 'Not Applicable', 599 }, 600 }, 601 OtherLicenseDocuments => { List => 'Bag' }, 602 OtherLicenseInfo => { Writable => 'lang-alt' }, 603 # Note: these are Bag's of lang-alt lists -- a nested list tag! 604 Custom1 => { List => 'Bag', Writable => 'lang-alt' }, 605 Custom2 => { List => 'Bag', Writable => 'lang-alt' }, 606 Custom3 => { List => 'Bag', Writable => 'lang-alt' }, 607 Custom4 => { List => 'Bag', Writable => 'lang-alt' }, 608 Custom5 => { List => 'Bag', Writable => 'lang-alt' }, 609 Custom6 => { List => 'Bag', Writable => 'lang-alt' }, 610 Custom7 => { List => 'Bag', Writable => 'lang-alt' }, 611 Custom8 => { List => 'Bag', Writable => 'lang-alt' }, 612 Custom9 => { List => 'Bag', Writable => 'lang-alt' }, 613 Custom10 => { List => 'Bag', Writable => 'lang-alt' }, 521 This structure is new in the IPTC Extension version 1.5 specification. As 522 well as the fields defined below, this structure may contain any top-level 523 XMP tags, but since they aren't pre-defined the only way to add these tags 524 is to write ImageRegion as a structure with these tags as new fields. 525 }, 526 RegionBoundary => { Namespace => 'Iptc4xmpExt', FlatName => 'Boundary', Struct => \%sRegionBoundary }, 527 rId => { Namespace => 'Iptc4xmpExt', FlatName => 'ID' }, 528 Name => { Namespace => 'Iptc4xmpExt', Writable => 'lang-alt' }, 529 rCtype => { Namespace => 'Iptc4xmpExt', FlatName => 'Ctype', List => 'Bag', Struct => \%sEntity }, 530 rRole => { Namespace => 'Iptc4xmpExt', FlatName => 'Role', List => 'Bag', Struct => \%sEntity }, 531 ); 532 533 # IPTC Extension namespace properties (Iptc4xmpExt) (ref 4) 534 %Image::ExifTool::XMP::iptcExt = ( 535 %xmpTableDefaults, 536 GROUPS => { 1 => 'XMP-iptcExt', 2 => 'Author' }, 537 NAMESPACE => 'Iptc4xmpExt', 538 TABLE_DESC => 'XMP IPTC Extension', 539 NOTES => q{ 540 This table contains tags defined by the IPTC Extension schema version 1.5. 541 The actual namespace prefix is "Iptc4xmpExt", but ExifTool shortens this for 542 the family 1 group name. (see L<http://www.iptc.org/IPTC4XMP/>) 543 }, 544 AboutCvTerm => { 545 Struct => \%sCVTermDetails, 546 List => 'Bag', 547 }, 548 AboutCvTermCvId => { Flat => 1, Name => 'AboutCvTermCvId' }, 549 AboutCvTermCvTermId => { Flat => 1, Name => 'AboutCvTermId' }, 550 AboutCvTermCvTermName => { Flat => 1, Name => 'AboutCvTermName' }, 551 AboutCvTermCvTermRefinedAbout => { Flat => 1, Name => 'AboutCvTermRefinedAbout' }, 552 AddlModelInfo => { Name => 'AdditionalModelInformation' }, 553 ArtworkOrObject => { 554 Struct => { 555 STRUCT_NAME => 'ArtworkOrObjectDetails', 556 NAMESPACE => 'Iptc4xmpExt', 557 AOCopyrightNotice => { }, 558 AOCreator => { List => 'Seq' }, 559 AODateCreated=> { Groups => { 2 => 'Time' }, %dateTimeInfo }, 560 AOSource => { }, 561 AOSourceInvNo=> { }, 562 AOTitle => { Writable => 'lang-alt' }, 563 AOCurrentCopyrightOwnerName => { }, 564 AOCurrentCopyrightOwnerId => { }, 565 AOCurrentLicensorName => { }, 566 AOCurrentLicensorId => { }, 567 AOCreatorId => { List => 'Seq' }, 568 AOCircaDateCreated => { Groups => { 2 => 'Time' }, Protected => 1 }, 569 AOStylePeriod => { List => 'Bag' }, 570 AOSourceInvURL => { }, 571 AOContentDescription => { Writable => 'lang-alt' }, 572 AOContributionDescription => { Writable => 'lang-alt' }, 573 AOPhysicalDescription => { Writable => 'lang-alt' }, 574 }, 575 List => 'Bag', 576 }, 577 ArtworkOrObjectAOCopyrightNotice => { Flat => 1, Name => 'ArtworkCopyrightNotice' }, 578 ArtworkOrObjectAOCreator => { Flat => 1, Name => 'ArtworkCreator' }, 579 ArtworkOrObjectAODateCreated => { Flat => 1, Name => 'ArtworkDateCreated' }, 580 ArtworkOrObjectAOSource => { Flat => 1, Name => 'ArtworkSource' }, 581 ArtworkOrObjectAOSourceInvNo => { Flat => 1, Name => 'ArtworkSourceInventoryNo' }, 582 ArtworkOrObjectAOTitle => { Flat => 1, Name => 'ArtworkTitle' }, 583 ArtworkOrObjectAOCurrentCopyrightOwnerName => { Flat => 1, Name => 'ArtworkCopyrightOwnerName' }, 584 ArtworkOrObjectAOCurrentCopyrightOwnerId => { Flat => 1, Name => 'ArtworkCopyrightOwnerID' }, 585 ArtworkOrObjectAOCurrentLicensorName => { Flat => 1, Name => 'ArtworkLicensorName' }, 586 ArtworkOrObjectAOCurrentLicensorId => { Flat => 1, Name => 'ArtworkLicensorID' }, 587 ArtworkOrObjectAOCreatorId => { Flat => 1, Name => 'ArtworkCreatorID' }, 588 ArtworkOrObjectAOCircaDateCreated => { Flat => 1, Name => 'ArtworkCircaDateCreated' }, 589 ArtworkOrObjectAOStylePeriod => { Flat => 1, Name => 'ArtworkStylePeriod' }, 590 ArtworkOrObjectAOSourceInvURL => { Flat => 1, Name => 'ArtworkSourceInvURL' }, 591 ArtworkOrObjectAOContentDescription => { Flat => 1, Name => 'ArtworkContentDescription' }, 592 ArtworkOrObjectAOContributionDescription => { Flat => 1, Name => 'ArtworkContributionDescription' }, 593 ArtworkOrObjectAOPhysicalDescription => { Flat => 1, Name => 'ArtworkPhysicalDescription' }, 594 CVterm => { 595 Name => 'ControlledVocabularyTerm', 596 List => 'Bag', 597 Notes => 'deprecated by version 1.2', 598 }, 599 DigImageGUID => { Groups => { 2 => 'Image' }, Name => 'DigitalImageGUID' }, 600 DigitalSourcefileType => { 601 Name => 'DigitalSourceFileType', 602 Notes => 'now deprecated -- replaced by DigitalSourceType', 603 Groups => { 2 => 'Image' }, 604 }, 605 DigitalSourceType => { Name => 'DigitalSourceType', Groups => { 2 => 'Image' } }, 606 EmbdEncRightsExpr => { 607 Struct => { 608 STRUCT_NAME => 'EEREDetails', 609 NAMESPACE => 'Iptc4xmpExt', 610 EncRightsExpr => { }, 611 RightsExprEncType => { }, 612 RightsExprLangId => { }, 613 }, 614 List => 'Bag', 615 }, 616 EmbdEncRightsExprEncRightsExpr => { Flat => 1, Name => 'EmbeddedEncodedRightsExpr' }, 617 EmbdEncRightsExprRightsExprEncType => { Flat => 1, Name => 'EmbeddedEncodedRightsExprType' }, 618 EmbdEncRightsExprRightsExprLangId => { Flat => 1, Name => 'EmbeddedEncodedRightsExprLangID' }, 619 Event => { Writable => 'lang-alt' }, 620 IptcLastEdited => { 621 Name => 'IPTCLastEdited', 622 Groups => { 2 => 'Time' }, 623 %dateTimeInfo, 624 }, 625 LinkedEncRightsExpr => { 626 Struct => { 627 STRUCT_NAME => 'LEREDetails', 628 NAMESPACE => 'Iptc4xmpExt', 629 LinkedRightsExpr => { }, 630 RightsExprEncType => { }, 631 RightsExprLangId => { }, 632 }, 633 List => 'Bag', 634 }, 635 LinkedEncRightsExprLinkedRightsExpr => { Flat => 1, Name => 'LinkedEncodedRightsExpr' }, 636 LinkedEncRightsExprRightsExprEncType => { Flat => 1, Name => 'LinkedEncodedRightsExprType' }, 637 LinkedEncRightsExprRightsExprLangId => { Flat => 1, Name => 'LinkedEncodedRightsExprLangID' }, 638 LocationCreated => { 639 Struct => \%sLocationDetails, 640 Groups => { 2 => 'Location' }, 641 List => 'Bag', 642 }, 643 LocationShown => { 644 Struct => \%sLocationDetails, 645 Groups => { 2 => 'Location' }, 646 List => 'Bag', 647 }, 648 MaxAvailHeight => { Groups => { 2 => 'Image' }, Writable => 'integer' }, 649 MaxAvailWidth => { Groups => { 2 => 'Image' }, Writable => 'integer' }, 650 ModelAge => { List => 'Bag', Writable => 'integer' }, 651 OrganisationInImageCode => { List => 'Bag' }, 652 OrganisationInImageName => { List => 'Bag' }, 653 PersonInImage => { List => 'Bag' }, 654 PersonInImageWDetails => { 655 Struct => { 656 STRUCT_NAME => 'PersonDetails', 657 NAMESPACE => 'Iptc4xmpExt', 658 PersonId => { List => 'Bag' }, 659 PersonName => { Writable => 'lang-alt' }, 660 PersonCharacteristic => { 661 Struct => \%sCVTermDetails, 662 List => 'Bag', 663 }, 664 PersonDescription => { Writable => 'lang-alt' }, 665 }, 666 List => 'Bag', 667 }, 668 PersonInImageWDetailsPersonId => { Flat => 1, Name => 'PersonInImageId' }, 669 PersonInImageWDetailsPersonName => { Flat => 1, Name => 'PersonInImageName' }, 670 PersonInImageWDetailsPersonCharacteristic => { Flat => 1, Name => 'PersonInImageCharacteristic' }, 671 PersonInImageWDetailsPersonCharacteristicCvId => { Flat => 1, Name => 'PersonInImageCvTermCvId' }, 672 PersonInImageWDetailsPersonCharacteristicCvTermId => { Flat => 1, Name => 'PersonInImageCvTermId' }, 673 PersonInImageWDetailsPersonCharacteristicCvTermName => { Flat => 1, Name => 'PersonInImageCvTermName' }, 674 PersonInImageWDetailsPersonCharacteristicCvTermRefinedAbout => { Flat => 1, Name => 'PersonInImageCvTermRefinedAbout' }, 675 PersonInImageWDetailsPersonDescription => { Flat => 1, Name => 'PersonInImageDescription' }, 676 ProductInImage => { 677 Struct => { 678 STRUCT_NAME => 'ProductDetails', 679 NAMESPACE => 'Iptc4xmpExt', 680 ProductName => { Writable => 'lang-alt' }, 681 ProductGTIN => { }, 682 ProductDescription => { Writable => 'lang-alt' }, 683 }, 684 List => 'Bag', 685 }, 686 ProductInImageProductName => { Flat => 1, Name => 'ProductInImageName' }, 687 ProductInImageProductGTIN => { Flat => 1, Name => 'ProductInImageGTIN' }, 688 ProductInImageProductDescription => { Flat => 1, Name => 'ProductInImageDescription' }, 689 RegistryId => { 690 Name => 'RegistryID', 691 Struct => { 692 STRUCT_NAME => 'RegistryEntryDetails', 693 NAMESPACE => 'Iptc4xmpExt', 694 RegItemId => { }, 695 RegOrgId => { }, 696 RegEntryRole=> { }, # (new in 1.3) 697 }, 698 List => 'Bag', 699 }, 700 RegistryIdRegItemId => { Flat => 1, Name => 'RegistryItemID' }, 701 RegistryIdRegOrgId => { Flat => 1, Name => 'RegistryOrganisationID' }, 702 RegistryIdRegEntryRole => { Flat => 1, Name => 'RegistryEntryRole' }, 703 704 # new Extension 1.3 properties 705 Genre => { Groups => { 2 => 'Image' }, List => 'Bag', Struct => \%sCVTermDetails }, 706 707 # new video properties (Oct 2016, ref Michael Steidl) 708 # (see http://www.iptc.org/std/videometadatahub/recommendation/IPTC-VideoMetadataHub-props-Rec_1.0.html) 709 CircaDateCreated=> { Groups => { 2 => 'Time' } }, 710 Episode => { Groups => { 2 => 'Video' }, Struct => \%sEpisode }, 711 ExternalMetadataLink => { Groups => { 2 => 'Other' }, List => 'Bag' }, 712 FeedIdentifier => { Groups => { 2 => 'Video' } }, 713 PublicationEvent=> { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sPublicationEvent }, 714 Rating => { 715 Groups => { 2 => 'Other' }, 716 Struct => \%sRating, 717 List => 'Bag', 718 }, 719 ReleaseReady => { Groups => { 2 => 'Other' }, Writable => 'boolean' }, 720 Season => { Groups => { 2 => 'Video' }, Struct => \%sEpisode }, 721 Series => { Groups => { 2 => 'Video' }, Struct => \%sSeries }, 722 StorylineIdentifier => { Groups => { 2 => 'Video' }, List => 'Bag' }, 723 StylePeriod => { Groups => { 2 => 'Video' } }, 724 TemporalCoverage=> { Groups => { 2 => 'Video' }, Struct => \%sTemporalCoverage }, 725 WorkflowTag => { Groups => { 2 => 'Video' }, Struct => \%sCVTermDetails }, 726 DataOnScreen => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sTextRegion }, 727 Dopesheet => { Groups => { 2 => 'Video' }, Writable => 'lang-alt' }, 728 DopesheetLink => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sQualifiedLink }, 729 Headline => { Groups => { 2 => 'Video' }, Writable => 'lang-alt', Avoid => 1 }, 730 PersonHeard => { Groups => { 2 => 'Audio' }, List => 'Bag', Struct => \%sEntity }, 731 VideoShotType => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sEntity }, 732 EventExt => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sEntity, Name => 'ShownEvent' }, 733 Transcript => { Groups => { 2 => 'Video' }, Writable => 'lang-alt' }, 734 TranscriptLink => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sQualifiedLink }, 735 VisualColour => { 736 Name => 'VisualColor', 737 Groups => { 2 => 'Video' }, 738 PrintConv => { 739 'bw-monochrome' => 'Monochrome', 740 'colour' => 'Color', 741 }, 742 }, 743 Contributor => { List => 'Bag', Struct => \%sEntityWithRole }, 744 CopyrightYear => { Groups => { 2 => 'Time' }, Writable => 'integer' }, 745 Creator => { List => 'Bag', Struct => \%sEntityWithRole }, 746 SupplyChainSource => { Groups => { 2 => 'Other' }, List => 'Bag', Struct => \%sEntity }, 747 audioBitRate => { Groups => { 2 => 'Audio' }, Writable => 'integer', Name => 'AudioBitrate' }, 748 audioBitRateMode=> { 749 Name => 'AudioBitrateMode', 750 Groups => { 2 => 'Audio' }, 751 PrintConv => { 752 fixed => 'Fixed', 753 variable => 'Variable', 754 }, 755 }, 756 audioChannelCount => { Groups => { 2 => 'Audio' }, Writable => 'integer' }, 757 videoDisplayAspectRatio => { Groups => { 2 => 'Audio' }, Writable => 'rational' }, 758 ContainerFormat => { Groups => { 2 => 'Video' }, Struct => \%sEntity }, 759 StreamReady => { 760 Groups => { 2 => 'Video' }, 761 PrintConv => { 762 true => 'True', 763 false => 'False', 764 unknown => 'Unknown', 765 }, 766 }, 767 videoBitRate => { Groups => { 2 => 'Video' }, Writable => 'integer', Name => 'VideoBitrate' }, 768 videoBitRateMode => { 769 Name => 'VideoBitrateMode', 770 Groups => { 2 => 'Video' }, 771 PrintConv => { 772 fixed => 'Fixed', 773 variable => 'Variable', 774 }, 775 }, 776 videoEncodingProfile => { Groups => { 2 => 'Video' } }, 777 videoStreamsCount => { Groups => { 2 => 'Video' }, Writable => 'integer' }, 778 # new IPTC video metadata 1.1 properties 779 # (ref https://www.iptc.org/std/videometadatahub/recommendation/IPTC-VideoMetadataHub-props-Rec_1.1.html) 780 SnapshotLink => { Groups => { 2 => 'Image' }, List => 'Bag', Struct => \%sLinkedImage, Name => 'Snapshot' }, 781 # new IPTC video metadata 1.2 properties 782 # (ref http://www.iptc.org/std/videometadatahub/recommendation/IPTC-VideoMetadataHub-props-Rec_1.2.html) 783 RecDevice => { 784 Groups => { 2 => 'Device' }, 785 Struct => { 786 STRUCT_NAME => 'Device', 787 NAMESPACE => 'Iptc4xmpExt', 788 Manufacturer => { }, 789 ModelName => { }, 790 SerialNumber => { }, 791 AttLensDescription => { }, 792 OwnersDeviceId => { }, 793 }, 794 }, 795 PlanningRef => { List => 'Bag', Struct => \%sEntityWithRole }, 796 audioBitsPerSample => { Groups => { 2 => 'Audio' }, Writable => 'integer' }, 797 # new IPTC Extension schema 1.5 property 798 ImageRegion => { Groups => { 2 => 'Image' }, List => 'Bag', Struct => \%sImageRegion }, 614 799 ); 615 800 … … 617 802 # PRISM 618 803 # 619 # NOTE: The "Avoid" flag is set for all PRISM tags 804 # NOTE: The "Avoid" flag is set for all PRISM tags (via tag table AVOID flag) 620 805 621 806 # my %obsolete = ( … … 631 816 # ); 632 817 633 # Publishing Requirements for Industry Standard Metadata 2.1 (prism) (ref 2) 818 # PRISM structure definitions 819 my %prismPublicationDate = ( 820 STRUCT_NAME => 'prismPublicationDate', 821 NAMESPACE => 'prism', 822 date => { %dateTimeInfo, Groups => { 2 => 'Time'} }, 823 'a-platform'=> { }, 824 ); 825 826 # Publishing Requirements for Industry Standard Metadata (prism) (ref 2) 634 827 %Image::ExifTool::XMP::prism = ( 635 828 %xmpTableDefaults, 636 829 GROUPS => { 0 => 'XMP', 1 => 'XMP-prism', 2 => 'Document' }, 637 830 NAMESPACE => 'prism', 831 AVOID => 1, 638 832 NOTES => q{ 639 Publishing Requirements for Industry Standard Metadata 2.1 schema tags. (see 640 L<http://www.prismstandard.org/>) 641 }, 833 Publishing Requirements for Industry Standard Metadata 3.0 namespace 834 tags. (see L<http://www.prismstandard.org/>) 835 }, 836 academicField => { }, # (3.0) 837 aggregateIssueNumber => { Writable => 'integer' }, # (3.0) 642 838 aggregationType => { List => 'Bag' }, 643 alternateTitle => { List => 'Bag' }, 839 alternateTitle => { 840 List => 'Bag', 841 Struct => { # (becomes a structure in 3.0) 842 STRUCT_NAME => 'prismAlternateTitle', 843 NAMESPACE => 'prism', 844 text => { }, 845 'a-platform'=> { }, 846 'a-lang' => { }, 847 }, 848 }, 849 blogTitle => { }, # (3.0) 850 blogURL => { }, # (3.0) 851 bookEdition => { }, # (3.0) 644 852 byteCount => { Writable => 'integer' }, 645 channel => { List => 'Bag' }, 853 channel => { 854 List => 'Bag', 855 Struct => { # (becomes a structure in 3.0) 856 STRUCT_NAME => 'prismChannel', 857 NAMESPACE => 'prism', 858 channel => { }, 859 subchannel1 => { }, 860 subchannel2 => { }, 861 subchannel3 => { }, 862 subchannel4 => { }, 863 'a-lang' => { }, 864 }, 865 }, 646 866 complianceProfile=>{ PrintConv => { three => 'Three' } }, 647 copyright => { Groups => { 2 => 'Author' } }, 867 contentType => { }, # (3.0) 868 copyrightYear => { }, # (3.0) 869 # copyright => { Groups => { 2 => 'Author' } }, # (deprecated in 3.0) 648 870 corporateEntity => { List => 'Bag' }, 649 871 coverDate => { %dateTimeInfo, Groups => { 2 => 'Time'} }, … … 651 873 creationDate => { %dateTimeInfo, Groups => { 2 => 'Time'} }, 652 874 dateRecieved => { %dateTimeInfo, Groups => { 2 => 'Time'} }, 875 device => { }, # (3.0) 653 876 distributor => { }, 654 877 doi => { Name => 'DOI', Description => 'Digital Object Identifier' }, 655 878 edition => { }, 656 879 eIssn => { }, 657 embargoDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} },880 #embargoDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} }, # (deprecated in 3.0) 658 881 endingPage => { }, 659 882 event => { List => 'Bag' }, 660 expirationDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} },883 #expirationDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} }, # (deprecated in 3.0) 661 884 genre => { List => 'Bag' }, 662 885 hasAlternative => { List => 'Bag' }, 663 hasCorrection => { }, 664 hasPreviousVersion => { }, 886 hasCorrection => { 887 Struct => { # (becomes a structure in 3.0) 888 STRUCT_NAME => 'prismHasCorrection', 889 NAMESPACE => 'prism', 890 text => { }, 891 'a-platform'=> { }, 892 'a-lang' => { }, 893 }, 894 }, 895 # hasPreviousVersion => { }, # (not in 3.0) 665 896 hasTranslation => { List => 'Bag' }, 666 897 industry => { List => 'Bag' }, 898 isAlternativeOf => { List => 'Bag' }, # (3.0) 899 isbn => { Name => 'ISBN', List => 'Bag' }, # 2.1 (becomes a list in 3.0) 667 900 isCorrectionOf => { List => 'Bag' }, 668 901 issn => { Name => 'ISSN' }, 669 902 issueIdentifier => { }, 670 903 issueName => { }, 904 issueTeaser => { }, # (3.0) 905 issueType => { }, # (3.0) 671 906 isTranslationOf => { }, 672 907 keyword => { List => 'Bag' }, 673 killDate => { %dateTimeInfo, Groups => { 2 => 'Time'} }, 908 killDate => { 909 Struct => { # (becomes a structure in 3.0) 910 STRUCT_NAME => 'prismKillDate', 911 NAMESPACE => 'prism', 912 date => { %dateTimeInfo, Groups => { 2 => 'Time'} }, 913 'a-platform'=> { }, #PH (missed in spec?) 914 }, 915 }, 916 'link' => { List => 'Bag' }, # (3.0) 674 917 location => { List => 'Bag' }, 675 918 # metadataContainer => { }, (not valid for PRISM XMP) 676 919 modificationDate=> { %dateTimeInfo, Groups => { 2 => 'Time'} }, 920 nationalCatalogNumber => { }, # (3.0) 677 921 number => { }, 678 922 object => { List => 'Bag' }, 923 onSaleDate => { # (3.0) 924 List => 'Bag', 925 Struct => { 926 STRUCT_NAME => 'prismOnSaleDate', 927 NAMESPACE => 'prism', 928 date => { %dateTimeInfo, Groups => { 2 => 'Time'} }, 929 'a-platform'=> { }, 930 }, 931 }, 932 onSaleDay => { # (3.0) 933 List => 'Bag', 934 Struct => { 935 STRUCT_NAME => 'prismOnSaleDay', 936 NAMESPACE => 'prism', 937 day => { }, #PH (not named in spec) 938 'a-platform'=> { }, 939 }, 940 }, 941 offSaleDate => { # (3.0) 942 List => 'Bag', 943 Struct => { 944 STRUCT_NAME => 'prismOffSaleDate', 945 NAMESPACE => 'prism', 946 date => { %dateTimeInfo, Groups => { 2 => 'Time'} }, 947 'a-platform'=> { }, 948 }, 949 }, 679 950 organization => { List => 'Bag' }, 680 951 originPlatform => { … … 690 961 }, 691 962 }, 963 pageCount => { Writable => 'integer' }, # (3.0) 964 pageProgressionDirection => { # (3.0) 965 PrintConv => { LTR => 'Left to Right', RTL => 'Right to Left' }, 966 }, 692 967 pageRange => { List => 'Bag' }, 693 968 person => { }, 694 publicationDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} }, 969 platform => { }, # (3.0) 970 productCode => { }, # (3.0) 971 profession => { }, # (3.0) 972 publicationDate => { 973 List => 'Bag', 974 Struct => \%prismPublicationDate, # (becomes a structure in 3.0) 975 }, 976 publicationDisplayDate => { # (3.0) 977 List => 'Bag', 978 Struct => \%prismPublicationDate, 979 }, 695 980 publicationName => { }, 696 rightsAgent => { }, 981 publishingFrequency => { }, # (3.0) 982 rating => { }, 983 # rightsAgent => { }, # (deprecated in 3.0) 984 samplePageRange => { }, # (3.0) 697 985 section => { }, 986 sellingAgency => { }, # (3.0) 987 seriesNumber => { Writable => 'integer' }, # (3.0) 988 seriesTitle => { }, # (3.0) 989 sport => { }, # (3.0) 698 990 startingPage => { }, 699 991 subsection1 => { }, … … 701 993 subsection3 => { }, 702 994 subsection4 => { }, 995 subtitle => { }, # (3.0) 996 supplementDisplayID => { }, # (3.0) 997 supplementStartingPage => { }, # (3.0) 998 supplementTitle => { }, # (3.0) 703 999 teaser => { List => 'Bag' }, 704 1000 ticker => { List => 'Bag' }, 705 1001 timePeriod => { }, 706 url => { Name => 'URL', List => 'Bag' }, 1002 url => { 1003 Name => 'URL', 1004 List => 'Bag', 1005 Struct => { # (becomes a structure in 3.0) 1006 STRUCT_NAME => 'prismUrl', 1007 NAMESPACE => 'prism', 1008 url => { }, 1009 'a-platform'=> { }, 1010 }, 1011 }, 1012 uspsNumber => { }, # (3.0) 707 1013 versionIdentifier => { }, 708 1014 volume => { }, 709 1015 wordCount => { Writable => 'integer' }, 710 # new in PRISM 2.1711 isbn => { Name => 'ISBN' },712 1016 # tags that existed in version 1.3 713 1017 # category => { %obsolete, List => 'Bag' }, … … 738 1042 ); 739 1043 740 # PRISM Rights Language 2.1 schema(prl) (ref 2)1044 # PRISM Rights Language namespace (prl) (ref 2) 741 1045 %Image::ExifTool::XMP::prl = ( 742 1046 %xmpTableDefaults, 743 1047 GROUPS => { 0 => 'XMP', 1 => 'XMP-prl', 2 => 'Document' }, 744 1048 NAMESPACE => 'prl', 1049 AVOID => 1, 745 1050 NOTES => q{ 746 PRISM Rights Language 2.1 schema tags. (see 1051 PRISM Rights Language 2.1 namespace tags. These tags have been deprecated 1052 since the release of the PRISM Usage Rights 3.0. (see 747 1053 L<http://www.prismstandard.org/>) 748 1054 }, … … 752 1058 ); 753 1059 754 # PRISM Usage Rights 2.1 schema(prismusagerights) (ref 2)1060 # PRISM Usage Rights namespace (prismusagerights) (ref 2) 755 1061 %Image::ExifTool::XMP::pur = ( 756 1062 %xmpTableDefaults, 757 1063 GROUPS => { 0 => 'XMP', 1 => 'XMP-pur', 2 => 'Document' }, 758 1064 NAMESPACE => 'pur', 1065 AVOID => 1, 759 1066 NOTES => q{ 760 Prism Usage Rights 2.1 schema tags. (see L<http://www.prismstandard.org/>) 1067 PRISM Usage Rights 3.0 namespace tags. (see 1068 L<http://www.prismstandard.org/>) 761 1069 }, 762 1070 adultContentWarning => { List => 'Bag' }, 763 1071 agreement => { List => 'Bag' }, 764 copyright => { Writable => 'lang-alt', Groups => { 2 => 'Author' } }, 1072 copyright => { 1073 # (not clear in 3.0 spec, which lists only "bag Text", and called 1074 # "copyrightDate" instead of "copyright" the PRISM basic 3.0 spec) 1075 Writable => 'lang-alt', 1076 Groups => { 2 => 'Author' }, 1077 }, 765 1078 creditLine => { List => 'Bag' }, 766 1079 embargoDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} }, … … 774 1087 rightsAgent => { }, 775 1088 rightsOwner => { }, 776 usageFee => { List => 'Bag' }, 777 ); 778 779 # DICOM schema properties (DICOM) (ref PH, written by CS3) 1089 # usageFee => { List => 'Bag' }, # (not in 3.0) 1090 ); 1091 1092 # PRISM Metadata for Images namespace (pmi) (ref 2) 1093 %Image::ExifTool::XMP::pmi = ( 1094 %xmpTableDefaults, 1095 GROUPS => { 0 => 'XMP', 1 => 'XMP-pmi', 2 => 'Image' }, 1096 NAMESPACE => 'pmi', 1097 AVOID => 1, 1098 NOTES => q{ 1099 PRISM Metadata for Images 3.0 namespace tags. (see 1100 L<http://www.prismstandard.org/>) 1101 }, 1102 color => { 1103 PrintConv => { 1104 bw => 'BW', 1105 color => 'Color', 1106 sepia => 'Sepia', 1107 duotone => 'Duotone', 1108 tritone => 'Tritone', 1109 quadtone => 'Quadtone', 1110 }, 1111 }, 1112 contactInfo => { }, 1113 displayName => { }, 1114 distributorProductID => { }, 1115 eventAlias => { }, 1116 eventEnd => { }, 1117 eventStart => { }, 1118 eventSubtype => { }, 1119 eventType => { }, 1120 field => { }, 1121 framing => { }, 1122 location => { }, 1123 make => { }, 1124 manufacturer => { }, 1125 model => { }, 1126 modelYear => { }, 1127 objectDescription=>{ }, 1128 objectSubtype => { }, 1129 objectType => { }, 1130 orientation => { 1131 PrintConv => { 1132 horizontal => 'Horizontal', 1133 vertical => 'Vertical', 1134 } 1135 }, 1136 positionDescriptor => { }, 1137 productID => { }, 1138 productIDType => { }, 1139 season => { 1140 PrintConv => { 1141 spring => 'Spring', 1142 summer => 'Summer', 1143 fall => 'Fall', 1144 winter => 'Winter', 1145 }, 1146 }, 1147 sequenceName => { }, 1148 sequenceNumber => { }, 1149 sequenceTotalNumber => { }, 1150 setting => { }, 1151 shootID => { }, 1152 slideshowName => { }, 1153 slideshowNumber => { Writable => 'integer' }, 1154 slideshowTotalNumber => { Writable => 'integer' }, 1155 viewpoint => { }, 1156 visualTechnique => { }, 1157 ); 1158 1159 # PRISM Recipe Metadata (prm) (ref 2) 1160 %Image::ExifTool::XMP::prm = ( 1161 %xmpTableDefaults, 1162 GROUPS => { 0 => 'XMP', 1 => 'XMP-prm', 2 => 'Document' }, 1163 NAMESPACE => 'prm', 1164 AVOID => 1, 1165 NOTES => q{ 1166 PRISM Recipe Metadata 3.0 namespace tags. (see 1167 L<http://www.prismstandard.org/>) 1168 }, 1169 cookingEquipment => { }, 1170 cookingMethod => { }, 1171 course => { }, 1172 cuisine => { }, 1173 dietaryNeeds => { }, 1174 dishType => { }, 1175 duration => { }, 1176 ingredientExclusion => { }, 1177 mainIngredient => { }, 1178 meal => { }, 1179 recipeEndingPage => { }, 1180 recipePageRange => { }, 1181 recipeSource => { }, 1182 recipeStartingPage => { }, 1183 recipeTitle => { }, 1184 servingSize => { }, 1185 skillLevel => { }, 1186 specialOccasion => { }, 1187 yield => { }, 1188 ); 1189 1190 #------------------------------------------------------------------------------ 1191 1192 # DICOM namespace properties (DICOM) (ref PH, written by CS3) 780 1193 %Image::ExifTool::XMP::DICOM = ( 781 1194 %xmpTableDefaults, 782 1195 GROUPS => { 1 => 'XMP-DICOM', 2 => 'Image' }, 783 1196 NAMESPACE => 'DICOM', 784 NOTES => 'DICOM schema tags.', 1197 NOTES => q{ 1198 DICOM namespace tags. These XMP tags allow some DICOM information to be 1199 stored in files of other than DICOM format. See the 1200 L<DICOM Tags documentation|Image::ExifTool::TagNames/DICOM Tags> for a list 1201 of tags available in DICOM-format files. 1202 }, 785 1203 # change some tag names to correspond with DICOM tags 786 1204 PatientName => { }, … … 804 1222 ); 805 1223 806 # PixelLive schemaproperties (PixelLive) (ref 3)1224 # PixelLive namespace properties (PixelLive) (ref 3) 807 1225 %Image::ExifTool::XMP::PixelLive = ( 808 1226 GROUPS => { 1 => 'XMP-PixelLive', 2 => 'Image' }, 809 1227 NAMESPACE => 'PixelLive', 1228 AVOID => 1, 810 1229 NOTES => q{ 811 PixelLive schema tags. These tags are not writable becase they are very1230 PixelLive namespace tags. These tags are not writable because they are very 812 1231 uncommon and I haven't been able to locate a reference which gives the 813 1232 namespace URI. 814 1233 }, 815 AUTHOR => { Name => 'Author', Avoid => 1, Groups => { 2 => 'Author' } }, 816 COMMENTS => { Name => 'Comments', Avoid => 1 }, 817 COPYRIGHT => { Name => 'Copyright',Avoid => 1, Groups => { 2 => 'Author' } }, 818 DATE => { Name => 'Date', Avoid => 1, Groups => { 2 => 'Time' } }, 819 GENRE => { Name => 'Genre', Avoid => 1 }, 820 TITLE => { Name => 'Title', Avoid => 1 }, 821 ); 822 823 # ACDSee schema (acdsee) (ref PH) 1234 AUTHOR => { Name => 'Author', Groups => { 2 => 'Author' } }, 1235 COMMENTS => { Name => 'Comments' }, 1236 COPYRIGHT => { Name => 'Copyright', Groups => { 2 => 'Author' } }, 1237 DATE => { Name => 'Date', Groups => { 2 => 'Time' } }, 1238 GENRE => { Name => 'Genre' }, 1239 TITLE => { Name => 'Title' }, 1240 ); 1241 1242 # Extensis Portfolio tags (extensis) (ref 11) 1243 %Image::ExifTool::XMP::extensis = ( 1244 %xmpTableDefaults, 1245 GROUPS => { 1 => 'XMP-extensis', 2 => 'Image' }, 1246 NAMESPACE => 'extensis', 1247 NOTES => 'Tags used by Extensis Portfolio.', 1248 Approved => { Writable => 'boolean' }, 1249 ApprovedBy => { }, 1250 ClientName => { }, 1251 JobName => { }, 1252 JobStatus => { }, 1253 RoutedTo => { }, 1254 RoutingNotes => { }, 1255 WorkToDo => { }, 1256 ); 1257 1258 # IDimager structures (ref PH) 1259 my %sTagStruct; 1260 %sTagStruct = ( 1261 STRUCT_NAME => 'TagStructure', 1262 NAMESPACE => 'ics', 1263 LabelName => { }, 1264 Reference => { }, 1265 ParentReference => { }, 1266 SubLabels => { Struct => \%sTagStruct, List => 'Bag' }, 1267 ); 1268 my %sSubVersion = ( 1269 STRUCT_NAME => 'SubVersion', 1270 NAMESPACE => 'ics', 1271 VersRef => { }, 1272 FileName => { }, 1273 ); 1274 1275 # IDimager namespace (ics) (ref PH) 1276 %Image::ExifTool::XMP::ics = ( 1277 %xmpTableDefaults, 1278 GROUPS => { 0 => 'XMP', 1 => 'XMP-ics', 2 => 'Image' }, 1279 NAMESPACE => 'ics', 1280 NOTES => q{ 1281 Tags used by IDimager. Nested TagStructure structures are unrolled to an 1282 arbitrary depth of 6 to avoid infinite recursion. 1283 }, 1284 ImageRef => { }, 1285 TagStructure => { Struct => \%sTagStruct, List => 'Bag' }, 1286 TagStructureLabelName => { Name => 'LabelName1', Flat => 1 }, 1287 TagStructureReference => { Name => 'Reference1', Flat => 1 }, 1288 TagStructureSubLabels => { Name => 'SubLabels1', Flat => 1 }, 1289 TagStructureParentReference => { Name => 'ParentReference1', Flat => 1 }, 1290 TagStructureSubLabelsLabelName => { Name => 'LabelName2', Flat => 1 }, 1291 TagStructureSubLabelsReference => { Name => 'Reference2', Flat => 1 }, 1292 TagStructureSubLabelsSubLabels => { Name => 'SubLabels2', Flat => 1 }, 1293 TagStructureSubLabelsParentReference => { Name => 'ParentReference2', Flat => 1 }, 1294 TagStructureSubLabelsSubLabelsLabelName => { Name => 'LabelName3', Flat => 1 }, 1295 TagStructureSubLabelsSubLabelsReference => { Name => 'Reference3', Flat => 1 }, 1296 TagStructureSubLabelsSubLabelsSubLabels => { Name => 'SubLabels3', Flat => 1 }, 1297 TagStructureSubLabelsSubLabelsParentReference => { Name => 'ParentReference3', Flat => 1 }, 1298 TagStructureSubLabelsSubLabelsSubLabelsLabelName => { Name => 'LabelName4', Flat => 1 }, 1299 TagStructureSubLabelsSubLabelsSubLabelsReference => { Name => 'Reference4', Flat => 1 }, 1300 TagStructureSubLabelsSubLabelsSubLabelsSubLabels => { Name => 'SubLabels4', Flat => 1 }, 1301 TagStructureSubLabelsSubLabelsSubLabelsParentReference => { Name => 'ParentReference4', Flat => 1 }, 1302 TagStructureSubLabelsSubLabelsSubLabelsSubLabelsLabelName => { Name => 'LabelName5', Flat => 1 }, 1303 TagStructureSubLabelsSubLabelsSubLabelsSubLabelsReference => { Name => 'Reference5', Flat => 1 }, 1304 TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabels => { Name => 'SubLabels5', Flat => 1, NoSubStruct => 1 }, # break infinite recursion 1305 TagStructureSubLabelsSubLabelsSubLabelsSubLabelsParentReference => { Name => 'ParentReference5', Flat => 1 }, 1306 TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsLabelName => { Name => 'LabelName6', Flat => 1 }, 1307 TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsReference => { Name => 'Reference6', Flat => 1 }, 1308 TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsParentReference => { Name => 'ParentReference6', Flat => 1 }, 1309 SubVersions => { Struct => \%sSubVersion, List => 'Bag' }, 1310 SubVersionsVersRef => { Name => 'SubVersionReference', Flat => 1 }, 1311 SubVersionsFileName => { Name => 'SubVersionFileName', Flat => 1 }, 1312 TimeStamp => { Avoid => 1, Groups => { 2 => 'Time' }, %dateTimeInfo }, 1313 AppVersion => { Avoid => 1 }, 1314 ); 1315 1316 # ACDSee namespace (acdsee) (ref PH) 824 1317 %Image::ExifTool::XMP::acdsee = ( 825 1318 %xmpTableDefaults, 826 1319 GROUPS => { 0 => 'XMP', 1 => 'XMP-acdsee', 2 => 'Image' }, 827 1320 NAMESPACE => 'acdsee', 1321 AVOID => 1, 828 1322 NOTES => q{ 829 ACD Systems ACDSee schematags.1323 ACD Systems ACDSee namespace tags. 830 1324 831 1325 (A note to software developers: Re-inventing your own private tags instead 832 of using the equivalent tags in standard XMP schemas defeats one of the most 833 valuable features of metadata: interoperability. Your applications mumble 834 to themselves instead of speaking out for the rest of the world to hear.) 835 }, 836 author => { Avoid => 1, Groups => { 2 => 'Author' } }, 837 caption => { Avoid => 1 }, 838 categories => { Avoid => 1 }, 839 datetime => { Avoid => 1, Groups => { 2 => 'Time' }, %dateTimeInfo }, 840 keywords => { Avoid => 1, List => 'Bag' }, 841 notes => { Avoid => 1 }, 842 rating => { Avoid => 1, Writable => 'real' }, # integer? 843 tagged => { Avoid => 1, Writable => 'boolean' }, 1326 of using the equivalent tags in standard XMP namespaces defeats one of the 1327 most valuable features of metadata: interoperability. Your applications 1328 mumble to themselves instead of speaking out for the rest of the world to 1329 hear.) 1330 }, 1331 author => { Groups => { 2 => 'Author' } }, 1332 caption => { }, 1333 categories => { }, 1334 collections=> { }, 1335 datetime => { Name => 'DateTime', Groups => { 2 => 'Time' }, %dateTimeInfo }, 1336 keywords => { List => 'Bag' }, 1337 notes => { }, 1338 rating => { Writable => 'real' }, # integer? 1339 tagged => { Writable => 'boolean' }, 1340 rawrppused => { Writable => 'boolean' }, 844 1341 rpp => { 845 1342 Name => 'RPP', … … 848 1345 Binary => 1, 849 1346 }, 850 ); 851 852 # Picture Licensing Universal System schema properties (xmpPLUS) 1347 dpp => { 1348 Name => 'DPP', 1349 Writable => 'lang-alt', 1350 Notes => 'newer version of XML raw processing settings', 1351 Binary => 1, 1352 }, 1353 # more tags (ref forum6840) 1354 FixtureIdentifier => { }, 1355 EditStatus => { }, 1356 ReleaseDate => { }, 1357 ReleaseTime => { }, 1358 OriginatingProgram => { }, 1359 ObjectCycle => { }, 1360 Snapshots => { List => 'Bag', Binary => 1 }, 1361 ); 1362 1363 # Picture Licensing Universal System namespace properties (xmpPLUS) 853 1364 %Image::ExifTool::XMP::xmpPLUS = ( 854 1365 %xmpTableDefaults, 855 1366 GROUPS => { 1 => 'XMP-xmpPLUS', 2 => 'Author' }, 856 1367 NAMESPACE => 'xmpPLUS', 857 NOTES => 'XMP Picture Licensing Universal System (PLUS) schema tags.', 1368 AVOID => 1, 1369 NOTES => q{ 1370 XMP Picture Licensing Universal System (PLUS) tags as written by some older 1371 Adobe applications. See L<PLUS XMP Tags|Image::ExifTool::TagNames/PLUS XMP Tags> 1372 for the current PLUS tags. 1373 }, 858 1374 CreditLineReq => { Writable => 'boolean' }, 859 1375 ReuseAllowed => { Writable => 'boolean' }, 860 1376 ); 861 1377 862 # Creative Commons schemaproperties (cc) (ref 5)1378 # Creative Commons namespace properties (cc) (ref 5) 863 1379 %Image::ExifTool::XMP::cc = ( 864 1380 %xmpTableDefaults, … … 866 1382 NAMESPACE => 'cc', 867 1383 NOTES => q{ 868 Creative Commons schema tags. (see 869 L<http://creativecommons.org/technology/xmp>) 870 }, 871 license => { }, 872 morePermissions => { }, 1384 Creative Commons namespace tags. Note that the CC specification for XMP is 1385 non-existent, so ExifTool must make some assumptions about the format of the 1386 specific properties in XMP (see L<http://creativecommons.org/ns>). 1387 }, 1388 # Work properties 1389 license => { Resource => 1 }, 873 1390 attributionName => { }, 874 attributionURL => { }, 875 ); 876 877 # Description Explorer schema properties (dex) (ref 6) 1391 attributionURL => { Resource => 1 }, 1392 morePermissions => { Resource => 1 }, 1393 useGuidelines => { Resource => 1 }, 1394 # License properties 1395 permits => { 1396 List => 'Bag', 1397 Resource => 1, 1398 PrintConv => { 1399 'cc:Sharing' => 'Sharing', 1400 'cc:DerivativeWorks' => 'Derivative Works', 1401 'cc:Reproduction' => 'Reproduction', 1402 'cc:Distribution' => 'Distribution', 1403 }, 1404 }, 1405 requires => { 1406 List => 'Bag', 1407 Resource => 1, 1408 PrintConv => { 1409 'cc:Copyleft' => 'Copyleft', 1410 'cc:LesserCopyleft' => 'Lesser Copyleft', 1411 'cc:SourceCode' => 'Source Code', 1412 'cc:ShareAlike' => 'Share Alike', 1413 'cc:Notice' => 'Notice', 1414 'cc:Attribution' => 'Attribution', 1415 }, 1416 }, 1417 prohibits => { 1418 List => 'Bag', 1419 Resource => 1, 1420 PrintConv => { 1421 'cc:HighIncomeNationUse' => 'High Income Nation Use', 1422 'cc:CommercialUse' => 'Commercial Use', 1423 }, 1424 }, 1425 jurisdiction => { Resource => 1 }, 1426 legalcode => { Name => 'LegalCode', Resource => 1 }, 1427 deprecatedOn => { %dateTimeInfo, Groups => { 2 => 'Time' } }, 1428 ); 1429 1430 # Description Explorer namespace properties (dex) (ref 6) 878 1431 %Image::ExifTool::XMP::dex = ( 879 1432 %xmpTableDefaults, … … 881 1434 NAMESPACE => 'dex', 882 1435 NOTES => q{ 883 Description Explorer schematags. These tags are not very common. The1436 Description Explorer namespace tags. These tags are not very common. The 884 1437 Source and Rating tags are avoided when writing due to name conflicts with 885 1438 other XMP tags. (see L<http://www.optimasc.com/products/fileid/>) … … 910 1463 ); 911 1464 912 # iView MediaPro schemaproperties (mediapro) (ref PH)1465 # iView MediaPro namespace properties (mediapro) (ref PH) 913 1466 %Image::ExifTool::XMP::MediaPro = ( 914 1467 %xmpTableDefaults, 915 1468 GROUPS => { 1 => 'XMP-mediapro', 2 => 'Image' }, 916 1469 NAMESPACE => 'mediapro', 917 NOTES => 'iView MediaPro schema tags.', 918 Event => { }, 1470 NOTES => 'iView MediaPro namespace tags.', 1471 Event => { 1472 Avoid => 1, 1473 Notes => 'avoided due to conflict with XMP-iptcExt:Event', 1474 }, 919 1475 Location => { 920 1476 Avoid => 1, … … 928 1484 ); 929 1485 930 # DigiKam schema tags (ref PH) 1486 # Microsoft ExpressionMedia namespace properties (expressionmedia) 1487 # (ref https://exiftool.org/forum/index.php/topic,4235.0.html) 1488 %Image::ExifTool::XMP::ExpressionMedia = ( 1489 %xmpTableDefaults, 1490 GROUPS => { 1 => 'XMP-expressionmedia', 2 => 'Image' }, 1491 NAMESPACE => 'expressionmedia', 1492 AVOID => 1, 1493 NOTES => q{ 1494 Microsoft Expression Media namespace tags. These tags are avoided when 1495 writing due to name conflicts with tags in other schemas. 1496 }, 1497 Event => { }, 1498 Status => { }, 1499 People => { List => 'Bag' }, 1500 CatalogSets => { List => 'Bag' }, 1501 ); 1502 1503 # DigiKam namespace tags (ref PH) 931 1504 %Image::ExifTool::XMP::digiKam = ( 932 1505 %xmpTableDefaults, 933 1506 GROUPS => { 1 => 'XMP-digiKam', 2 => 'Image' }, 934 1507 NAMESPACE => 'digiKam', 935 NOTES => 'DigiKam schematags.',1508 NOTES => 'DigiKam namespace tags.', 936 1509 CaptionsAuthorNames => { Writable => 'lang-alt' }, 937 CaptionsDateTimeStamps => { Writable => 'lang-alt' },1510 CaptionsDateTimeStamps => { Writable => 'lang-alt', Groups => { 2 => 'Time' } }, 938 1511 TagsList => { List => 'Seq' }, 939 ); 940 941 # SWF schema tags (ref PH) 1512 ColorLabel => { }, 1513 PickLabel => { }, 1514 ImageHistory => { Avoid => 1, Notes => 'different format from EXIF:ImageHistory' }, 1515 LensCorrectionSettings => { }, 1516 ImageUniqueID => { Avoid => 1 }, 1517 ); 1518 1519 # SWF namespace tags (ref PH) 942 1520 %Image::ExifTool::XMP::swf = ( 943 1521 %xmpTableDefaults, 944 1522 GROUPS => { 1 => 'XMP-swf', 2 => 'Image' }, 945 1523 NAMESPACE => 'swf', 946 NOTES => 'Adobe SWF schematags.',1524 NOTES => 'Adobe SWF namespace tags.', 947 1525 type => { Avoid => 1 }, 948 1526 bgalpha => { Name => 'BackgroundAlpha', Writable => 'integer' }, … … 968 1546 ); 969 1547 970 my %sExtensions = ( 971 STRUCT_NAME => 'Extensions', 972 NAMESPACE => undef, # variable namespace 1548 # Apple adjustment settings (ref PH) 1549 %Image::ExifTool::XMP::aas = ( 1550 %xmpTableDefaults, 1551 GROUPS => { 1 => 'XMP-aas', 2 => 'Image' }, 1552 NAMESPACE => 'aas', 1553 NOTES => 'Apple Adjustment Settings used by iPhone/iPad.', 1554 CropX => { Writable => 'integer', Avoid => 1 }, 1555 CropY => { Writable => 'integer', Avoid => 1 }, 1556 CropW => { Writable => 'integer', Avoid => 1 }, 1557 CropH => { Writable => 'integer', Avoid => 1 }, 1558 AffineA => { Writable => 'real' }, 1559 AffineB => { Writable => 'real' }, 1560 AffineC => { Writable => 'real' }, 1561 AffineD => { Writable => 'real' }, 1562 AffineX => { Writable => 'real' }, 1563 AffineY => { Writable => 'real' }, 1564 Vibrance => { Writable => 'real', Avoid => 1 }, 1565 Curve0x => { Writable => 'real' }, 1566 Curve0y => { Writable => 'real' }, 1567 Curve1x => { Writable => 'real' }, 1568 Curve1y => { Writable => 'real' }, 1569 Curve2x => { Writable => 'real' }, 1570 Curve2y => { Writable => 'real' }, 1571 Curve3x => { Writable => 'real' }, 1572 Curve3y => { Writable => 'real' }, 1573 Curve4x => { Writable => 'real' }, 1574 Curve4y => { Writable => 'real' }, 1575 Shadows => { Writable => 'real', Avoid => 1 }, 1576 Highlights => { Writable => 'real', Avoid => 1 }, 1577 # the following from StarGeek 1578 FaceBalanceOrigI => { Writable => 'real' }, 1579 FaceBalanceOrigQ => { Writable => 'real' }, 1580 FaceBalanceStrength => { Writable => 'real' }, 1581 FaceBalanceWarmth => { Writable => 'real' }, 1582 ); 1583 1584 # Adobe creatorAtom properties (ref PH) 1585 %Image::ExifTool::XMP::creatorAtom = ( 1586 %xmpTableDefaults, 1587 GROUPS => { 1 => 'XMP-creatorAtom', 2 => 'Image' }, 1588 NAMESPACE => 'creatorAtom', 1589 NOTES => 'Adobe creatorAtom tags, written by After Effects.', 1590 macAtom => { 1591 Struct => { 1592 STRUCT_NAME => 'MacAtom', 1593 NAMESPACE => 'creatorAtom', 1594 applicationCode => { }, 1595 invocationAppleEvent => { }, 1596 posixProjectPath => { }, 1597 }, 1598 }, 1599 windowsAtom => { 1600 Struct => { 1601 STRUCT_NAME => 'WindowsAtom', 1602 NAMESPACE => 'creatorAtom', 1603 extension => { }, 1604 invocationFlags => { }, 1605 uncProjectPath => { }, 1606 }, 1607 }, 1608 aeProjectLink => { # (After Effects Project Link) 1609 Struct => { 1610 STRUCT_NAME => 'AEProjectLink', 1611 NAMESPACE => 'creatorAtom', 1612 renderTimeStamp => { Writable => 'integer' }, 1613 compositionID => { }, 1614 renderQueueItemID => { }, 1615 renderOutputModuleIndex => { }, 1616 fullPath => { }, 1617 }, 1618 }, 1619 ); 1620 1621 # FastPictureViewer namespace properties (http://www.fastpictureviewer.com/help/#rtfcomments) 1622 %Image::ExifTool::XMP::fpv = ( 1623 %xmpTableDefaults, 1624 GROUPS => { 1 => 'XMP-fpv', 2 => 'Image' }, 1625 NAMESPACE => 'fpv', 973 1626 NOTES => q{ 974 This structure may contain any top-level XMP tags, but none have been 975 pre-defined in ExifTool. Without pre-defined flattened tag names, 976 RegionExtensions may be written only as a structure (ie. 977 C<{xmp-dc:creator=me,rating=5}>). Fields for this structure are identified 978 using the standard ExifTool tag name (with optional leading group name, 979 and/or trailing language code, and/or trailing C<#> symbol to disable print 980 conversion). 981 }, 982 ); 983 my %sRegionStruct = ( 984 STRUCT_NAME => 'RegionStruct', 985 NAMESPACE => 'mwg-rs', 986 Area => { Struct => \%sArea }, 987 Type => { 988 PrintConv => { 989 Face => 'Face', 990 Pet => 'Pet', 991 Focus => 'Focus', 992 BarCode => 'BarCode', 993 }, 994 }, 995 Name => { }, 996 Description => { }, 997 FocusUsage => { 998 PrintConv => { 999 EvaluatedUsed => 'Evaluated, Used', 1000 EvaluatedNotUsed => 'Evaluated, Not Used', 1001 NotEvaluatedNotUsed => 'Not Evaluated, Not Used', 1002 }, 1003 }, 1004 BarCodeValue=> { }, 1005 Extensions => { Struct => \%sExtensions }, 1006 seeAlso => { Namespace => 'rdfs', Resource => 1 }, 1007 ); 1008 my %sKeywordStruct4 = ( 1009 STRUCT_NAME => 'KeywordStruct4', 1010 NAMESPACE => 'mwg-kw', 1011 Keyword => { }, 1012 Applied => { Writable => 'boolean' }, 1013 ); 1014 my %sKeywordStruct3 = ( 1015 STRUCT_NAME => 'KeywordStruct3', 1016 NAMESPACE => 'mwg-kw', 1017 Keyword => { }, 1018 Applied => { Writable => 'boolean' }, 1019 Children => { Struct => \%sKeywordStruct4, List => 'Bag' }, 1020 ); 1021 my %sKeywordStruct2 = ( 1022 STRUCT_NAME => 'KeywordStruct2', 1023 NAMESPACE => 'mwg-kw', 1024 Keyword => { }, 1025 Applied => { Writable => 'boolean' }, 1026 Children => { Struct => \%sKeywordStruct3, List => 'Bag' }, 1027 ); 1028 my %sKeywordStruct1 = ( 1029 STRUCT_NAME => 'KeywordStruct1', 1030 NAMESPACE => 'mwg-kw', 1031 Keyword => { }, 1032 Applied => { Writable => 'boolean' }, 1033 Children => { Struct => \%sKeywordStruct2, List => 'Bag' }, 1034 ); 1035 1036 # MWG 2.0 region schema tags 1037 %Image::ExifTool::XMP::mwg_rs = ( 1038 %xmpTableDefaults, 1039 GROUPS => { 1 => 'XMP-mwg-rs', 2 => 'Image' }, 1040 NAMESPACE => 'mwg-rs', 1627 Fast Picture Viewer tags (see 1628 L<http://www.fastpictureviewer.com/help/#rtfcomments>). 1629 }, 1630 RichTextComment => { }, 1631 ); 1632 1633 # Apple FaceInfo namespace properties (ref PH) 1634 %Image::ExifTool::XMP::apple_fi = ( 1635 %xmpTableDefaults, 1636 GROUPS => { 1 => 'XMP-apple-fi', 2 => 'Image' }, 1637 NAMESPACE => 'apple-fi', 1041 1638 NOTES => q{ 1042 Image region metadata defined by the MWG 2.0 specification. See 1043 L<http://www.metadataworkinggroup.org/> for the official specification. 1044 }, 1045 Regions => { 1046 Name => 'RegionInfo', 1047 Struct => { 1048 STRUCT_NAME => 'RegionInfo', 1049 NAMESPACE => 'mwg-rs', 1050 RegionList => { Struct => \%sRegionStruct, List => 'Bag' }, 1051 AppliedToDimensions => { Struct => \%sDimensions }, 1052 }, 1053 }, 1054 RegionsAppliedToDimensions => { Flat => 1, Name => 'RegionAppliedToDimensions' }, 1055 RegionsAppliedToDimensionsW => { Flat => 1, Name => 'RegionAppliedToDimensionsW' }, 1056 RegionsAppliedToDimensionsH => { Flat => 1, Name => 'RegionAppliedToDimensionsH' }, 1057 RegionsAppliedToDimensionsUnit=>{Flat => 1, Name => 'RegionAppliedToDimensionsUnit' }, 1058 RegionsRegionList => { Flat => 1, Name => 'RegionList' }, 1059 RegionsRegionListArea => { Flat => 1, Name => 'RegionArea' }, 1060 RegionsRegionListAreaX => { Flat => 1, Name => 'RegionAreaX' }, 1061 RegionsRegionListAreaY => { Flat => 1, Name => 'RegionAreaY' }, 1062 RegionsRegionListAreaW => { Flat => 1, Name => 'RegionAreaW' }, 1063 RegionsRegionListAreaH => { Flat => 1, Name => 'RegionAreaH' }, 1064 RegionsRegionListAreaD => { Flat => 1, Name => 'RegionAreaD' }, 1065 RegionsRegionListAreaUnit => { Flat => 1, Name => 'RegionAreaUnit' }, 1066 RegionsRegionListType => { Flat => 1, Name => 'RegionType' }, 1067 RegionsRegionListName => { Flat => 1, Name => 'RegionName' }, 1068 RegionsRegionListDescription=> { Flat => 1, Name => 'RegionDescription' }, 1069 RegionsRegionListFocusUsage => { Flat => 1, Name => 'RegionFocusUsage' }, 1070 RegionsRegionListBarCodeValue=>{ Flat => 1, Name => 'RegionBarCodeValue' }, 1071 RegionsRegionListExtensions => { Flat => 1, Name => 'RegionExtensions' }, 1072 RegionsRegionListSeeAlso => { Flat => 1, Name => 'RegionSeeAlso' }, 1073 ); 1074 1075 # MWG 2.0 hierarchical keyword schema tags 1076 %Image::ExifTool::XMP::mwg_kw = ( 1077 %xmpTableDefaults, 1078 GROUPS => { 1 => 'XMP-mwg-kw', 2 => 'Image' }, 1079 NAMESPACE => 'mwg-kw', 1639 Face information tags written by the Apple iPhone 5 inside the mwg-rs 1640 RegionExtensions. 1641 }, 1642 Timestamp => { 1643 Name => 'TimeStamp', 1644 Writable => 'integer', 1645 # (don't know how to convert this) 1646 }, 1647 FaceID => { Writable => 'integer' }, 1648 AngleInfoRoll => { Writable => 'integer' }, 1649 AngleInfoYaw => { Writable => 'integer' }, 1650 ConfidenceLevel => { Writable => 'integer' }, 1651 ); 1652 1653 # Google audio namespace 1654 %Image::ExifTool::XMP::GAudio = ( 1655 %xmpTableDefaults, 1656 GROUPS => { 1 => 'XMP-GAudio', 2 => 'Audio' }, 1657 NAMESPACE => 'GAudio', 1658 Data => { 1659 Name => 'AudioData', 1660 ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)', 1661 ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)', 1662 }, 1663 Mime => { Name => 'AudioMimeType' }, 1664 ); 1665 1666 # Google image namespace 1667 %Image::ExifTool::XMP::GImage = ( 1668 %xmpTableDefaults, 1669 GROUPS => { 1 => 'XMP-GImage', 2 => 'Image' }, 1670 NAMESPACE => 'GImage', 1671 Data => { 1672 Name => 'ImageData', 1673 ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)', 1674 ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)', 1675 }, 1676 Mime => { Name => 'ImageMimeType' }, 1677 ); 1678 1679 # Google panorama namespace properties 1680 # (ref https://exiftool.org/forum/index.php/topic,4569.0.html) 1681 %Image::ExifTool::XMP::GPano = ( 1682 %xmpTableDefaults, 1683 GROUPS => { 1 => 'XMP-GPano', 2 => 'Image' }, 1684 NAMESPACE => 'GPano', 1080 1685 NOTES => q{ 1081 Hierarchical keywords metadata defined by the MWG 2.0 specification. 1082 ExifTool unrolls keyword structures to an arbitrary depth of 4 to allow 1083 individual levels to be accessed with different tag names, and to avoid 1084 infinite recursion. See L<http://www.metadataworkinggroup.org/> for the 1085 official specification. 1086 }, 1087 # arbitrarily define only the first 4 levels of the keyword hierarchy 1088 Keywords => { 1089 Name => 'KeywordInfo', 1090 Struct => { 1091 STRUCT_NAME => 'KeywordInfo', 1092 NAMESPACE => 'mwg-kw', 1093 Hierarchy => { Struct => \%sKeywordStruct1, List => 'Bag' }, 1094 }, 1095 }, 1096 KeywordsHierarchy => { Name => 'HierarchicalKeywords', Flat => 1 }, 1097 KeywordsHierarchyKeyword => { Name => 'HierarchicalKeywords1', Flat => 1 }, 1098 KeywordsHierarchyApplied => { Name => 'HierarchicalKeywords1Applied', Flat => 1 }, 1099 KeywordsHierarchyChildren => { Name => 'HierarchicalKeywords1Children', Flat => 1 }, 1100 KeywordsHierarchyChildrenKeyword => { Name => 'HierarchicalKeywords2', Flat => 1 }, 1101 KeywordsHierarchyChildrenApplied => { Name => 'HierarchicalKeywords2Applied', Flat => 1 }, 1102 KeywordsHierarchyChildrenChildren => { Name => 'HierarchicalKeywords2Children', Flat => 1 }, 1103 KeywordsHierarchyChildrenChildrenKeyword => { Name => 'HierarchicalKeywords3', Flat => 1 }, 1104 KeywordsHierarchyChildrenChildrenApplied => { Name => 'HierarchicalKeywords3Applied', Flat => 1 }, 1105 KeywordsHierarchyChildrenChildrenChildren => { Name => 'HierarchicalKeywords3Children', Flat => 1 }, 1106 KeywordsHierarchyChildrenChildrenChildrenKeyword => { Name => 'HierarchicalKeywords4', Flat => 1 }, 1107 KeywordsHierarchyChildrenChildrenChildrenApplied => { Name => 'HierarchicalKeywords4Applied', Flat => 1 }, 1108 ); 1109 1110 # MWG 2.0 collections schema tags 1111 %Image::ExifTool::XMP::mwg_coll = ( 1112 %xmpTableDefaults, 1113 GROUPS => { 1 => 'XMP-mwg-coll', 2 => 'Image' }, 1114 NAMESPACE => 'mwg-coll', 1686 Panorama tags written by Google Photosphere. See 1687 L<https://developers.google.com/panorama/metadata/> for the specification. 1688 }, 1689 UsePanoramaViewer => { Writable => 'boolean' }, 1690 CaptureSoftware => { }, 1691 StitchingSoftware => { }, 1692 ProjectionType => { }, 1693 PoseHeadingDegrees => { Writable => 'real' }, 1694 PosePitchDegrees => { Writable => 'real' }, 1695 PoseRollDegrees => { Writable => 'real' }, 1696 InitialViewHeadingDegrees => { Writable => 'real' }, 1697 InitialViewPitchDegrees => { Writable => 'real' }, 1698 InitialViewRollDegrees => { Writable => 'real' }, 1699 InitialHorizontalFOVDegrees => { Writable => 'real' }, 1700 InitialVerticalFOVDegrees => { Writable => 'real' }, 1701 FirstPhotoDate => { %dateTimeInfo, Groups => { 2 => 'Time' } }, 1702 LastPhotoDate => { %dateTimeInfo, Groups => { 2 => 'Time' } }, 1703 SourcePhotosCount => { Writable => 'integer' }, 1704 ExposureLockUsed => { Writable => 'boolean' }, 1705 CroppedAreaImageWidthPixels => { Writable => 'real' }, 1706 CroppedAreaImageHeightPixels => { Writable => 'real' }, 1707 FullPanoWidthPixels => { Writable => 'real' }, 1708 FullPanoHeightPixels => { Writable => 'real' }, 1709 CroppedAreaLeftPixels => { Writable => 'real' }, 1710 CroppedAreaTopPixels => { Writable => 'real' }, 1711 InitialCameraDolly => { Writable => 'real' }, 1712 # (the following have been observed, but are not in the specification) 1713 LargestValidInteriorRectLeft => { Writable => 'real' }, 1714 LargestValidInteriorRectTop => { Writable => 'real' }, 1715 LargestValidInteriorRectWidth => { Writable => 'real' }, 1716 LargestValidInteriorRectHeight => { Writable => 'real' }, 1717 ); 1718 1719 # Google Spherical Images namespace (ref https://github.com/google/spatial-media/blob/master/docs/spherical-video-rfc.md) 1720 %Image::ExifTool::XMP::GSpherical = ( 1721 %xmpTableDefaults, 1722 GROUPS => { 1 => 'XMP-GSpherical', 2 => 'Image' }, 1723 WRITE_GROUP => 'GSpherical', # write in special location for video files 1724 NAMESPACE => 'GSpherical', 1725 AVOID => 1, 1115 1726 NOTES => q{ 1116 Collections metadata defined by the MWG 2.0 specification. See 1117 L<http://www.metadataworkinggroup.org/> for the official specification. 1118 }, 1119 Collections => { 1120 List => 'Bag', 1121 Struct => { 1122 STRUCT_NAME => 'CollectionInfo', 1123 NAMESPACE => 'mwg-coll', 1124 CollectionName => { }, 1125 CollectionURI => { }, 1126 }, 1127 }, 1128 CollectionsCollectionName => { Name => 'CollectionName', Flat => 1 }, 1129 CollectionsCollectionURI => { Name => 'CollectionURI', Flat => 1 }, 1130 ); 1131 1132 # SVG schema properties (ref 9) 1727 Not actually XMP. These RDF/XML tags are used in Google spherical MP4 1728 videos. These tags are written into the video track of MOV/MP4 files, and 1729 not at the top level like other XMP tags. See 1730 L<https://github.com/google/spatial-media/blob/master/docs/spherical-video-rfc.md> 1731 for the specification. 1732 }, 1733 # (avoid due to conflicts with XMP-GPano tags) 1734 Spherical => { Writable => 'boolean' }, 1735 Stitched => { Writable => 'boolean' }, 1736 StitchingSoftware => { }, 1737 ProjectionType => { }, 1738 StereoMode => { }, 1739 SourceCount => { Writable => 'integer' }, 1740 InitialViewHeadingDegrees => { Writable => 'real' }, 1741 InitialViewPitchDegrees => { Writable => 'real' }, 1742 InitialViewRollDegrees => { Writable => 'real' }, 1743 Timestamp => { 1744 Name => 'TimeStamp', 1745 Groups => { 2 => 'Time' }, 1746 Writable => 'integer', 1747 Shift => 'Time', 1748 ValueConv => 'ConvertUnixTime($val)', #(NC) 1749 ValueConvInv => 'GetUnixTime($val)', 1750 PrintConv => '$self->ConvertDateTime($val)', 1751 PrintConvInv => '$self->InverseDateTime($val)', 1752 }, 1753 FullPanoWidthPixels => { Writable => 'integer' }, 1754 FullPanoHeightPixels => { Writable => 'integer' }, 1755 CroppedAreaImageWidthPixels => { Writable => 'integer' }, 1756 CroppedAreaImageHeightPixels=> { Writable => 'integer' }, 1757 CroppedAreaLeftPixels => { Writable => 'integer' }, 1758 CroppedAreaTopPixels => { Writable => 'integer' }, 1759 ); 1760 1761 # Google depthmap information (ref https://developers.google.com/depthmap-metadata/reference) 1762 %Image::ExifTool::XMP::GDepth = ( 1763 GROUPS => { 0 => 'XMP', 1 => 'XMP-GDepth', 2 => 'Image' }, 1764 NAMESPACE => 'GDepth', 1765 AVOID => 1, # (too many potential tag name conflicts) 1766 NOTES => q{ 1767 Google depthmap information. See 1768 L<https://developers.google.com/depthmap-metadata/> for the specification. 1769 }, 1770 WRITABLE => 'string', # (default to string-type tags) 1771 PRIORITY => 0, 1772 Format => { 1773 PrintConv => { 1774 RangeInverse => 'RangeInverse', 1775 RangeLinear => 'RangeLinear', 1776 }, 1777 }, 1778 Near => { Writable => 'real' }, 1779 Far => { Writable => 'real' }, 1780 Mime => { }, 1781 Data => { 1782 Name => 'DepthImage', 1783 ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)', 1784 ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)', 1785 }, 1786 Units => { }, 1787 MeasureType => { 1788 PrintConv => { 1789 OpticalAxis => 'OpticalAxis', 1790 OpticalRay => 'OpticalRay', 1791 }, 1792 }, 1793 ConfidenceMime => { }, 1794 Confidence => { 1795 ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)', 1796 ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)', 1797 }, 1798 Manufacturer=> { }, 1799 Model => { }, 1800 Software => { }, 1801 ImageWidth => { Writable => 'real' }, 1802 ImageHeight => { Writable => 'real' }, 1803 ); 1804 1805 # Google focus namespace 1806 %Image::ExifTool::XMP::GFocus = ( 1807 %xmpTableDefaults, 1808 GROUPS => { 1 => 'XMP-GFocus', 2 => 'Image' }, 1809 NAMESPACE => 'GFocus', 1810 NOTES => 'Focus information found in Google depthmap images.', 1811 BlurAtInfinity => { Writable => 'real' }, 1812 FocalDistance => { Writable => 'real' }, 1813 FocalPointX => { Writable => 'real' }, 1814 FocalPointY => { Writable => 'real' }, 1815 ); 1816 1817 # Google camera namespace (ref PH) 1818 %Image::ExifTool::XMP::GCamera = ( 1819 %xmpTableDefaults, 1820 GROUPS => { 1 => 'XMP-GCamera', 2 => 'Camera' }, 1821 NAMESPACE => 'GCamera', 1822 NOTES => 'Camera information found in Google panorama images.', 1823 BurstID => { }, 1824 BurstPrimary => { }, 1825 PortraitNote => { }, 1826 PortraitRequest => { 1827 Notes => 'High Definition Render Pipeline (HDRP) data', #PH (guess) 1828 ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)', 1829 ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)', 1830 }, 1831 PortraitVersion => { }, 1832 SpecialTypeID => { List => 'Bag' }, 1833 PortraitNote => { }, 1834 DisableAutoCreation => { List => 'Bag' }, 1835 hdrp_makernote => { 1836 Name => 'HDRPMakerNote', 1837 # decoded data starts with the following bytes, but nothing yet is known about its contents: 1838 # 48 44 52 50 02 ef 64 35 6d 5e 70 1e 2c ea e3 4c [HDRP..d5m^p.,..L] 1839 ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)', 1840 ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)', 1841 }, 1842 MicroVideo => { Writable => 'integer' }, 1843 MicroVideoVersion => { Writable => 'integer' }, 1844 MicroVideoOffset => { Writable => 'integer' }, 1845 MicroVideoPresentationTimestampUs => { Writable => 'integer' }, 1846 ); 1847 1848 # Google creations namespace (ref PH) 1849 %Image::ExifTool::XMP::GCreations = ( 1850 %xmpTableDefaults, 1851 GROUPS => { 1 => 'XMP-GCreations', 2 => 'Camera' }, 1852 NAMESPACE => 'GCreations', 1853 NOTES => 'Google creations tags.', 1854 CameraBurstID => { }, 1855 ); 1856 1857 # Google depth-map Device namespace (ref 13) 1858 %Image::ExifTool::XMP::Device = ( 1859 %xmpTableDefaults, 1860 GROUPS => { 1 => 'XMP-Device', 2 => 'Camera' }, 1861 NAMESPACE => { Device => 'http://ns.google.com/photos/dd/1.0/device/' }, 1862 NOTES => q{ 1863 Google depth-map Device tags. See 1864 L<https://developer.android.com/training/camera2/Dynamic-depth-v1.0.pdf> for 1865 the specification. 1866 }, 1867 Container => { 1868 Struct => { 1869 STRUCT_NAME => 'DeviceContainer', 1870 NAMESPACE => { Container => 'http://ns.google.com/photos/dd/1.0/container/' }, 1871 Directory => { 1872 List => 'Seq', 1873 Struct => { 1874 STRUCT_NAME => 'DeviceDirectory', 1875 NAMESPACE => { Container => 'http://ns.google.com/photos/dd/1.0/container/' }, 1876 Item => { 1877 Struct => { 1878 STRUCT_NAME => 'DeviceItem', 1879 NAMESPACE => { Item => 'http://ns.google.com/photos/dd/1.0/item/' }, 1880 Mime => { }, 1881 Length => { Writable => 'integer' }, 1882 Padding => { Writable => 'integer' }, 1883 DataURI => { }, 1884 }, 1885 }, 1886 }, 1887 } 1888 }, 1889 }, 1890 Profiles => { 1891 List => 'Seq', 1892 FlatName => '', 1893 Struct => { 1894 STRUCT_NAME => 'DeviceProfiles', 1895 NAMESPACE => { Device => 'http://ns.google.com/photos/dd/1.0/device/' }, 1896 Profile => { 1897 Struct => { 1898 STRUCT_NAME => 'DeviceProfile', 1899 NAMESPACE => { Profile => 'http://ns.google.com/photos/dd/1.0/profile/' }, 1900 CameraIndices => { List => 'Seq', Writable => 'integer' }, 1901 Type => { }, 1902 }, 1903 }, 1904 }, 1905 }, 1906 Cameras => { 1907 List => 'Seq', 1908 FlatName => '', 1909 Struct => { 1910 STRUCT_NAME => 'DeviceCameras', 1911 NAMESPACE => { Device => 'http://ns.google.com/photos/dd/1.0/device/' }, 1912 Camera => { 1913 Struct => { 1914 STRUCT_NAME => 'DeviceCamera', 1915 NAMESPACE => { Camera => 'http://ns.google.com/photos/dd/1.0/camera/' }, 1916 DepthMap => { 1917 Struct => { 1918 STRUCT_NAME => 'DeviceDepthMap', 1919 NAMESPACE => { DepthMap => 'http://ns.google.com/photos/dd/1.0/depthmap/' }, 1920 ConfidenceURI => { }, 1921 DepthURI => { }, 1922 Far => { Writable => 'real' }, 1923 Format => { }, 1924 ItemSemantic=> { }, 1925 MeasureType => { }, 1926 Near => { Writable => 'real' }, 1927 Units => { }, 1928 Software => { }, 1929 FocalTableEntryCount => { Writable => 'integer' }, 1930 FocalTable => { }, # (base64) 1931 }, 1932 }, 1933 Image => { 1934 Struct => { 1935 STRUCT_NAME => 'DeviceImage', 1936 NAMESPACE => { Image => 'http://ns.google.com/photos/dd/1.0/image/' }, 1937 ItemSemantic=> { }, 1938 ItemURI => { }, 1939 }, 1940 }, 1941 ImagingModel => { 1942 Struct => { 1943 STRUCT_NAME => 'DeviceImagingModel', 1944 NAMESPACE => { ImagingModel => 'http://ns.google.com/photos/dd/1.0/imagingmodel/' }, 1945 Distortion => { }, # (base64) 1946 DistortionCount => { Writable => 'integer' }, 1947 FocalLengthX => { Writable => 'real' }, 1948 FocalLengthY => { Writable => 'real' }, 1949 ImageHeight => { Writable => 'integer' }, 1950 ImageWidth => { Writable => 'integer' }, 1951 PixelAspectRatio=> { Writable => 'real' }, 1952 PrincipalPointX => { Writable => 'real' }, 1953 PrincipalPointY => { Writable => 'real' }, 1954 Skew => { Writable => 'real' }, 1955 }, 1956 }, 1957 PointCloud => { 1958 Struct => { 1959 STRUCT_NAME => 'DevicePointCloud', 1960 NAMESPACE => { PointCloud => 'http://ns.google.com/photos/dd/1.0/pointcloud/' }, 1961 PointCloud => { Writable => 'integer' }, 1962 Points => { }, 1963 Metric => { Writable => 'boolean' }, 1964 }, 1965 }, 1966 Pose => { Struct => \%sPose }, 1967 LightEstimate => { 1968 Struct => { 1969 STRUCT_NAME => 'DeviceLightEstimate', 1970 NAMESPACE => { LightEstimate => 'http://ns.google.com/photos/dd/1.0/lightestimate/' }, 1971 ColorCorrectionR => { Writable => 'real' }, 1972 ColorCorrectionG => { Writable => 'real' }, 1973 ColorCorrectionB => { Writable => 'real' }, 1974 PixelIntensity => { Writable => 'real' }, 1975 }, 1976 }, 1977 VendorInfo => { Struct => \%sVendorInfo }, 1978 AppInfo => { Struct => \%sAppInfo }, 1979 Trait => { }, 1980 }, 1981 }, 1982 }, 1983 }, 1984 VendorInfo => { Struct => \%sVendorInfo }, 1985 AppInfo => { Struct => \%sAppInfo }, 1986 EarthPos => { Struct => \%sEarthPose }, 1987 Pose => { Struct => \%sPose }, 1988 Planes => { 1989 List => 'Seq', 1990 FlatName => '', 1991 Struct => { 1992 STRUCT_NAME => 'DevicePlanes', 1993 NAMESPACE => { Device => 'http://ns.google.com/photos/dd/1.0/device/' }, 1994 Plane => { 1995 Struct => { 1996 STRUCT_NAME => 'DevicePlane', 1997 NAMESPACE => { Plane => 'http://ns.google.com/photos/dd/1.0/plane/' }, 1998 Pose => { Struct => \%sPose }, 1999 ExtentX => { Writable => 'real' }, 2000 ExtentZ => { Writable => 'real' }, 2001 BoundaryVertexCount => { Writable => 'integer' }, 2002 Boundary => { }, 2003 }, 2004 }, 2005 }, 2006 }, 2007 ); 2008 2009 # Getty Images namespace (ref PH) 2010 %Image::ExifTool::XMP::GettyImages = ( 2011 %xmpTableDefaults, 2012 GROUPS => { 1 => 'XMP-getty', 2 => 'Image' }, 2013 NAMESPACE => 'GettyImagesGIFT', 2014 NOTES => q{ 2015 The actual Getty Images namespace prefix is "GettyImagesGIFT", which is the 2016 prefix recorded in the file, but ExifTool shortens this for the family 1 2017 group name. 2018 }, 2019 Personality => { List => 'Bag' }, 2020 OriginalFilename => { Name => 'OriginalFileName' }, 2021 ParentMEID => { }, 2022 # the following from StarGeek 2023 AssetID => { }, 2024 CallForImage => { }, 2025 CameraFilename => { }, 2026 CameraMakeModel => { Avoid => 1 }, 2027 Composition => { }, 2028 CameraSerialNumber => { Avoid => 1 }, 2029 ExclusiveCoverage => { }, 2030 GIFTFtpPriority => { }, 2031 ImageRank => { }, 2032 MediaEventIdDate => { }, 2033 OriginalCreateDateTime => { %dateTimeInfo, Groups => { 2 => 'Time' }, Avoid => 1 }, 2034 ParentMediaEventID => { }, 2035 PrimaryFTP => { List => 'Bag' }, 2036 RoutingDestinations => { List => 'Bag' }, 2037 RoutingExclusions => { List => 'Bag' }, 2038 SecondaryFTP => { List => 'Bag' }, 2039 TimeShot => { }, 2040 ); 2041 2042 # RED smartphone images (ref PH) 2043 %Image::ExifTool::XMP::LImage = ( 2044 %xmpTableDefaults, 2045 GROUPS => { 1 => 'XMP-LImage', 2 => 'Image' }, 2046 NAMESPACE => 'LImage', 2047 NOTES => 'Tags written by RED smartphones.', 2048 MajorVersion => { }, 2049 MinorVersion => { }, 2050 RightAlbedo => { 2051 Notes => 'Right stereoscopic image', 2052 Groups => { 2 => 'Preview' }, 2053 ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)', 2054 ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)', 2055 }, 2056 ); 2057 2058 # SVG namespace properties (ref 9) 1133 2059 %Image::ExifTool::XMP::SVG = ( 1134 2060 GROUPS => { 0 => 'SVG', 1 => 'SVG', 2 => 'Image' }, … … 1145 2071 id => 'ID', 1146 2072 metadataId => 'MetadataID', 1147 width => 'ImageWidth', 1148 height => 'ImageHeight', 2073 width => { 2074 Name => 'ImageWidth', 2075 ValueConv => '$val =~ s/px$//; $val', 2076 }, 2077 height => { 2078 Name => 'ImageHeight', 2079 ValueConv => '$val =~ s/px$//; $val', 2080 }, 1149 2081 ); 1150 2082 … … 1156 2088 ); 1157 2089 1158 # set "Avoid" flag for all PRISM tags 1159 my ($table, $key); 1160 foreach $table ( 1161 \%Image::ExifTool::XMP::prism, 1162 \%Image::ExifTool::XMP::prl, 1163 \%Image::ExifTool::XMP::pur) 2090 #------------------------------------------------------------------------------ 2091 # Generate crd tags 2092 # Inputs: 0) tag table ref 2093 sub Init_crd($) 1164 2094 { 1165 foreach $key (TagTableKeys($table)) { 1166 $table->{$key}->{Avoid} = 1; 2095 my $tagTablePtr = shift; 2096 # import tags from CRS namespace 2097 my $crsTable = GetTagTable('Image::ExifTool::XMP::crs'); 2098 my $tag; 2099 foreach $tag (Image::ExifTool::TagTableKeys($crsTable)) { 2100 my $crsInfo = $$crsTable{$tag}; 2101 my $tagInfo = $$tagTablePtr{$tag} = { %$crsInfo }; 2102 $$tagInfo{Groups} = { 0 => 'XMP', 1 => 'XMP-crd' , 2 => $$crsInfo{Groups}{2} } if $$crsInfo{Groups}; 1167 2103 } 1168 2104 } … … 1175 2111 =head1 NAME 1176 2112 1177 Image::ExifTool::XMP2.pl - Additional XMP schemadefinitions2113 Image::ExifTool::XMP2.pl - Additional XMP namespace definitions 1178 2114 1179 2115 =head1 SYNOPSIS … … 1183 2119 =head1 DESCRIPTION 1184 2120 1185 This file contains definitions for less common XMP schemas.2121 This file contains definitions for less common XMP namespaces. 1186 2122 1187 2123 =head1 AUTHOR 1188 2124 1189 Copyright 2003-20 11, Phil Harvey (phil at owl.phy.queensu.ca)2125 Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com) 1190 2126 1191 2127 This library is free software; you can redistribute it and/or modify it … … 1202 2138 =item L<http://www.portfoliofaq.com/pfaq/v7mappings.htm> 1203 2139 2140 =item L<http://www.iptc.org/IPTC4XMP/> 2141 1204 2142 =item L<http://creativecommons.org/technology/xmp> 1205 2143
Note:
See TracChangeset
for help on using the changeset viewer.