1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582 |
- #------------------------------------------------------------------------------
- # File: XMP2.pl
- #
- # Description: Additional XMP namespace definitions
- #
- # Revisions: 10/12/2008 - P. Harvey Created
- #
- # References: 1) PLUS - http://ns.useplus.org/
- # 2) PRISM - http://www.prismstandard.org/
- # 3) http://www.portfoliofaq.com/pfaq/v7mappings.htm
- # 5) http://creativecommons.org/technology/xmp
- # --> changed to http://wiki.creativecommons.org/Companion_File_metadata_specification (2007/12/21)
- # 6) http://www.optimasc.com/products/fileid/xmp-extensions.pdf
- # 9) http://www.w3.org/TR/SVG11/
- # 11) http://www.extensis.com/en/support/kb_article.jsp?articleNumber=6102211
- # 12) XMPSpecificationPart3_May2013, page 58
- #------------------------------------------------------------------------------
- package Image::ExifTool::XMP;
- use strict;
- use Image::ExifTool qw(:Utils);
- use Image::ExifTool::XMP;
- # xmpDM structure definitions
- my %sCuePointParam = (
- STRUCT_NAME => 'CuePointParam',
- NAMESPACE => 'xmpDM',
- key => { },
- value => { },
- );
- my %sMarker = (
- STRUCT_NAME => 'Marker',
- NAMESPACE => 'xmpDM',
- comment => { },
- duration => { },
- location => { },
- name => { },
- startTime => { },
- target => { },
- type => { },
- # added Oct 2008
- cuePointParams => { Struct => \%sCuePointParam, List => 'Seq' },
- cuePointType=> { },
- probability => { Writable => 'real' },
- speaker => { },
- );
- my %sTime = (
- STRUCT_NAME => 'Time',
- NAMESPACE => 'xmpDM',
- scale => { Writable => 'rational' },
- value => { Writable => 'integer' },
- );
- my %sTimecode = (
- STRUCT_NAME => 'Timecode',
- NAMESPACE => 'xmpDM',
- timeFormat => {
- PrintConv => {
- '24Timecode' => '24 fps',
- '25Timecode' => '25 fps',
- '2997DropTimecode' => '29.97 fps (drop)',
- '2997NonDropTimecode' => '29.97 fps (non-drop)',
- '30Timecode' => '30 fps',
- '50Timecode' => '50 fps',
- '5994DropTimecode' => '59.94 fps (drop)',
- '5994NonDropTimecode' => '59.94 fps (non-drop)',
- '60Timecode' => '60 fps',
- '23976Timecode' => '23.976 fps',
- },
- },
- timeValue => { },
- value => { Writable => 'integer' },
- );
- # XMP Dynamic Media namespace properties (xmpDM)
- %Image::ExifTool::XMP::xmpDM = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-xmpDM', 2 => 'Image' },
- NAMESPACE => 'xmpDM',
- NOTES => 'XMP Dynamic Media namespace tags.',
- absPeakAudioFilePath=> { },
- album => { },
- altTapeName => { },
- altTimecode => { Struct => \%sTimecode },
- artist => { Avoid => 1, Groups => { 2 => 'Author' } },
- audioModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
- audioSampleRate => { Writable => 'integer' },
- audioSampleType => {
- PrintConv => {
- '8Int' => '8-bit integer',
- '16Int' => '16-bit integer',
- '24Int' => '24-bit integer',
- '32Int' => '32-bit integer',
- '32Float' => '32-bit float',
- 'Compressed' => 'Compressed',
- 'Packed' => 'Packed',
- 'Other' => 'Other',
- },
- },
- audioChannelType => {
- PrintConv => {
- 'Mono' => 'Mono',
- 'Stereo' => 'Stereo',
- '5.1' => '5.1',
- '7.1' => '7.1',
- '16 Channel' => '16 Channel',
- 'Other' => 'Other',
- },
- },
- audioCompressor => { },
- beatSpliceParams => {
- Struct => {
- STRUCT_NAME => 'BeatSpliceStretch',
- NAMESPACE => 'xmpDM',
- riseInDecibel => { Writable => 'real' },
- riseInTimeDuration => { Struct => \%sTime },
- useFileBeatsMarker => { Writable => 'boolean' },
- },
- },
- cameraAngle => { },
- cameraLabel => { },
- cameraModel => { },
- cameraMove => { },
- client => { },
- comment => { Name => 'DMComment' },
- composer => { Groups => { 2 => 'Author' } },
- contributedMedia => {
- Struct => {
- STRUCT_NAME => 'Media',
- NAMESPACE => 'xmpDM',
- duration => { Struct => \%sTime },
- managed => { Writable => 'boolean' },
- path => { },
- startTime => { Struct => \%sTime },
- track => { },
- webStatement=> { },
- },
- List => 'Bag',
- },
- copyright => { Avoid => 1, Groups => { 2 => 'Author' } }, # (deprecated)
- director => { },
- directorPhotography => { },
- discNumber => { }, #12
- duration => { Struct => \%sTime },
- engineer => { },
- fileDataRate => { Writable => 'rational' },
- genre => { },
- good => { Writable => 'boolean' },
- instrument => { },
- introTime => { Struct => \%sTime },
- key => {
- PrintConvColumns => 3,
- PrintConv => {
- 'C' => 'C', 'C#' => 'C#', 'D' => 'D', 'D#' => 'D#',
- 'E' => 'E', 'F' => 'F', 'F#' => 'F#', 'G' => 'G',
- 'G#' => 'G#', 'A' => 'A', 'A#' => 'A#', 'B' => 'B',
- },
- },
- logComment => { },
- loop => { Writable => 'boolean' },
- lyrics => { }, #12
- numberOfBeats => { Writable => 'real' },
- markers => { Struct => \%sMarker, List => 'Seq' },
- metadataModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
- outCue => { Struct => \%sTime },
- partOfCompilation=>{ Writable => 'boolean' }, #12
- projectName => { },
- projectRef => {
- Struct => {
- STRUCT_NAME => 'ProjectLink',
- NAMESPACE => 'xmpDM',
- path => { },
- type => {
- PrintConv => {
- movie => 'Movie',
- still => 'Still Image',
- audio => 'Audio',
- custom => 'Custom',
- },
- },
- },
- },
- pullDown => {
- PrintConvColumns => 2,
- PrintConv => {
- 'WSSWW' => 'WSSWW', 'SSWWW' => 'SSWWW',
- 'SWWWS' => 'SWWWS', 'WWWSS' => 'WWWSS',
- 'WWSSW' => 'WWSSW', 'WWWSW' => 'WWWSW',
- 'WWSWW' => 'WWSWW', 'WSWWW' => 'WSWWW',
- 'SWWWW' => 'SWWWW', 'WWWWS' => 'WWWWS',
- },
- },
- relativePeakAudioFilePath => { },
- relativeTimestamp => { Struct => \%sTime },
- releaseDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
- resampleParams => {
- Struct => {
- STRUCT_NAME => 'ResampleStretch',
- NAMESPACE => 'xmpDM',
- quality => { PrintConv => { Low => 'Low', Medium => 'Medium', High => 'High' } },
- },
- },
- scaleType => {
- PrintConv => {
- Major => 'Major',
- Minor => 'Minor',
- Both => 'Both',
- Neither => 'Neither',
- },
- },
- scene => { Avoid => 1 },
- shotDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
- shotDay => { },
- shotLocation => { },
- shotName => { },
- shotNumber => { },
- shotSize => { },
- speakerPlacement=> { },
- startTimecode => { Struct => \%sTimecode },
- startTimeSampleSize => { Writable => 'integer' }, #PH
- startTimeScale => { }, #PH (real?)
- stretchMode => {
- PrintConv => {
- 'Fixed length' => 'Fixed length',
- 'Time-Scale' => 'Time-Scale',
- 'Resample' => 'Resample',
- 'Beat Splice' => 'Beat Splice',
- 'Hybrid' => 'Hybrid',
- },
- },
- takeNumber => { Writable => 'integer' },
- tapeName => { },
- tempo => { Writable => 'real' },
- timeScaleParams => {
- Struct => {
- STRUCT_NAME => 'TimeScaleStretch',
- NAMESPACE => 'xmpDM',
- frameOverlappingPercentage => { Writable => 'real' },
- frameSize => { Writable => 'real' },
- quality => { PrintConv => { Low => 'Low', Medium => 'Medium', High => 'High' } },
- },
- },
- timeSignature => {
- PrintConvColumns => 3,
- PrintConv => {
- '2/4' => '2/4', '3/4' => '3/4', '4/4' => '4/4',
- '5/4' => '5/4', '7/4' => '7/4', '6/8' => '6/8',
- '9/8' => '9/8', '12/8'=> '12/8', 'other' => 'other',
- },
- },
- trackNumber => { Writable => 'integer' },
- Tracks => {
- Struct => {
- STRUCT_NAME => 'Track',
- NAMESPACE => 'xmpDM',
- frameRate => { },
- markers => { Struct => \%sMarker, List => 'Seq' },
- trackName => { },
- trackType => { },
- },
- List => 'Bag',
- },
- videoAlphaMode => {
- PrintConv => {
- 'straight' => 'Straight',
- 'pre-multiplied', => 'Pre-multiplied',
- 'none' => 'None',
- },
- },
- videoAlphaPremultipleColor => { Struct => \%sColorant },
- videoAlphaUnityIsTransparent => { Writable => 'boolean' },
- videoColorSpace => {
- PrintConv => {
- 'sRGB' => 'sRGB',
- 'CCIR-601' => 'CCIR-601',
- 'CCIR-709' => 'CCIR-709',
- },
- },
- videoCompressor => { },
- videoFieldOrder => {
- PrintConv => {
- Upper => 'Upper',
- Lower => 'Lower',
- Progressive => 'Progressive',
- },
- },
- videoFrameRate => { Writable => 'real' },
- videoFrameSize => { Struct => \%sDimensions },
- videoModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
- videoPixelAspectRatio => { Writable => 'rational' },
- videoPixelDepth => {
- PrintConv => {
- '8Int' => '8-bit integer',
- '16Int' => '16-bit integer',
- '24Int' => '24-bit integer',
- '32Int' => '32-bit integer',
- '32Float' => '32-bit float',
- 'Other' => 'Other',
- },
- },
- );
- #------------------------------------------------------------------------------
- # PLUS (Picture Licensing Universal System)
- # PLUS vocabulary conversions
- my %plusVocab = (
- ValueConv => '$val =~ s{http://ns.useplus.org/ldf/vocab/}{}; $val',
- ValueConvInv => '"http://ns.useplus.org/ldf/vocab/$val"',
- );
- # PLUS License Data Format 1.2.1 structures
- # (this seems crazy to me -- why did they define different ID/Name structures
- # for each field rather than just re-using the same structure?)
- my %plusLicensee = (
- STRUCT_NAME => 'Licensee',
- NAMESPACE => 'plus',
- # all "rdf:type" properties removed in version 1.2.1
- # (idiots. Why did they put them there in the first place? -- it required
- # a special patch for ExifTool to support these, and now they are gone!)
- # TYPE => 'plus:LicenseeDetail', (removed in 1.2.1)
- LicenseeID => { },
- LicenseeName=> { },
- );
- my %plusEndUser = (
- STRUCT_NAME => 'EndUser',
- NAMESPACE => 'plus',
- # TYPE => 'plus:EndUserDetail', (removed in 1.2.1)
- EndUserID => { },
- EndUserName => { },
- );
- my %plusLicensor = (
- STRUCT_NAME => 'Licensor',
- NAMESPACE => 'plus',
- # TYPE => 'plus:LicensorDetail', (removed in 1.2.1)
- LicensorID => { },
- LicensorName => { },
- LicensorStreetAddress => { },
- LicensorExtendedAddress => { },
- LicensorCity => { },
- LicensorRegion => { },
- LicensorPostalCode => { },
- LicensorCountry => { },
- LicensorTelephoneType1 => {
- %plusVocab,
- PrintConv => {
- 'work' => 'Work',
- 'cell' => 'Cell',
- 'fax' => 'FAX',
- 'home' => 'Home',
- 'pager' => 'Pager',
- },
- },
- LicensorTelephone1 => { },
- LicensorTelephoneType2 => {
- %plusVocab,
- PrintConv => {
- 'work' => 'Work',
- 'cell' => 'Cell',
- 'fax' => 'FAX',
- 'home' => 'Home',
- 'pager' => 'Pager',
- },
- },
- LicensorTelephone2 => { },
- LicensorEmail => { },
- LicensorURL => { },
- );
- my %plusCopyrightOwner = (
- STRUCT_NAME => 'CopyrightOwner',
- NAMESPACE => 'plus',
- # TYPE => 'plus:CopyrightOwnerDetail', (removed in 1.2.1)
- CopyrightOwnerID => { },
- CopyrightOwnerName => { },
- );
- my %plusImageCreator = (
- STRUCT_NAME => 'ImageCreator',
- NAMESPACE => 'plus',
- # TYPE => 'plus:ImageCreatorDetail', (removed in 1.2.1)
- ImageCreatorID => { },
- ImageCreatorName => { },
- );
- my %plusImageSupplier = (
- STRUCT_NAME => 'ImageSupplier',
- NAMESPACE => 'plus',
- # TYPE => 'plus:ImageSupplierDetail', (removed in 1.2.1)
- ImageSupplierID => { },
- ImageSupplierName => { },
- );
- # PLUS License Data Format 1.2.0 (plus) (ref 1)
- %Image::ExifTool::XMP::plus = (
- %xmpTableDefaults,
- GROUPS => { 0 => 'XMP', 1 => 'XMP-plus', 2 => 'Author' },
- NAMESPACE => 'plus',
- NOTES => q{
- PLUS License Data Format 1.2.1 namespace tags. Note that all
- controlled-vocabulary tags in this table (ie. tags with a fixed set of
- values) have raw values which begin with "http://ns.useplus.org/ldf/vocab/",
- but to reduce clutter this prefix has been removed from the values shown
- below. (see L<http://ns.useplus.org/>)
- },
- Version => { Name => 'PLUSVersion' },
- Licensee => {
- FlatName => '',
- Struct => \%plusLicensee,
- List => 'Seq',
- },
- EndUser => {
- FlatName => '',
- Struct => \%plusEndUser,
- List => 'Seq',
- },
- Licensor => {
- FlatName => '',
- Struct => \%plusLicensor,
- List => 'Seq',
- },
- LicensorNotes => { Writable => 'lang-alt' },
- MediaSummaryCode => { },
- LicenseStartDate => { %dateTimeInfo, Groups => { 2 => 'Time'} },
- LicenseEndDate => { %dateTimeInfo, Groups => { 2 => 'Time'} },
- MediaConstraints => { Writable => 'lang-alt' },
- RegionConstraints => { Writable => 'lang-alt' },
- ProductOrServiceConstraints => { Writable => 'lang-alt' },
- ImageFileConstraints => {
- List => 'Bag',
- %plusVocab,
- PrintConv => {
- 'IF-MFN' => 'Maintain File Name',
- 'IF-MID' => 'Maintain ID in File Name',
- 'IF-MMD' => 'Maintain Metadata',
- 'IF-MFT' => 'Maintain File Type',
- },
- },
- ImageAlterationConstraints => {
- List => 'Bag',
- %plusVocab,
- PrintConv => {
- 'AL-CRP' => 'No Cropping',
- 'AL-FLP' => 'No Flipping',
- 'AL-RET' => 'No Retouching',
- 'AL-CLR' => 'No Colorization',
- 'AL-DCL' => 'No De-Colorization',
- 'AL-MRG' => 'No Merging',
- },
- },
- ImageDuplicationConstraints => {
- %plusVocab,
- PrintConv => {
- 'DP-NDC' => 'No Duplication Constraints',
- 'DP-LIC' => 'Duplication Only as Necessary Under License',
- 'DP-NOD' => 'No Duplication',
- },
- },
- ModelReleaseStatus => {
- %plusVocab,
- PrintConv => {
- 'MR-NON' => 'None',
- 'MR-NAP' => 'Not Applicable',
- 'MR-UMR' => 'Unlimited Model Releases',
- 'MR-LMR' => 'Limited or Incomplete Model Releases',
- },
- },
- ModelReleaseID => { List => 'Bag' },
- MinorModelAgeDisclosure => {
- %plusVocab,
- PrintConv => {
- 'AG-UNK' => 'Age Unknown',
- 'AG-A25' => 'Age 25 or Over',
- 'AG-A24' => 'Age 24',
- 'AG-A23' => 'Age 23',
- 'AG-A22' => 'Age 22',
- 'AG-A21' => 'Age 21',
- 'AG-A20' => 'Age 20',
- 'AG-A19' => 'Age 19',
- 'AG-A18' => 'Age 18',
- 'AG-A17' => 'Age 17',
- 'AG-A16' => 'Age 16',
- 'AG-A15' => 'Age 15',
- 'AG-U14' => 'Age 14 or Under',
- },
- },
- PropertyReleaseStatus => {
- %plusVocab,
- PrintConv => {
- 'PR-NON' => 'None',
- 'PR-NAP' => 'Not Applicable',
- 'PR-UPR' => 'Unlimited Property Releases',
- 'PR-LPR' => 'Limited or Incomplete Property Releases',
- },
- },
- PropertyReleaseID => { List => 'Bag' },
- OtherConstraints => { Writable => 'lang-alt' },
- CreditLineRequired => {
- %plusVocab,
- PrintConv => {
- 'CR-NRQ' => 'Not Required',
- 'CR-COI' => 'Credit on Image',
- 'CR-CAI' => 'Credit Adjacent To Image',
- 'CR-CCA' => 'Credit in Credits Area',
- },
- },
- AdultContentWarning => {
- %plusVocab,
- PrintConv => {
- 'CW-NRQ' => 'Not Required',
- 'CW-AWR' => 'Adult Content Warning Required',
- 'CW-UNK' => 'Unknown',
- },
- },
- OtherLicenseRequirements => { Writable => 'lang-alt' },
- TermsAndConditionsText => { Writable => 'lang-alt' },
- TermsAndConditionsURL => { },
- OtherConditions => { Writable => 'lang-alt' },
- ImageType => {
- %plusVocab,
- PrintConv => {
- 'TY-PHO' => 'Photographic Image',
- 'TY-ILL' => 'Illustrated Image',
- 'TY-MCI' => 'Multimedia or Composited Image',
- 'TY-VID' => 'Video',
- 'TY-OTR' => 'Other',
- },
- },
- LicensorImageID => { },
- FileNameAsDelivered => { },
- ImageFileFormatAsDelivered => {
- %plusVocab,
- PrintConv => {
- 'FF-JPG' => 'JPEG Interchange Formats (JPG, JIF, JFIF)',
- 'FF-TIF' => 'Tagged Image File Format (TIFF)',
- 'FF-GIF' => 'Graphics Interchange Format (GIF)',
- 'FF-RAW' => 'Proprietary RAW Image Format',
- 'FF-DNG' => 'Digital Negative (DNG)',
- 'FF-EPS' => 'Encapsulated PostScript (EPS)',
- 'FF-BMP' => 'Windows Bitmap (BMP)',
- 'FF-PSD' => 'Photoshop Document (PSD)',
- 'FF-PIC' => 'Macintosh Picture (PICT)',
- 'FF-PNG' => 'Portable Network Graphics (PNG)',
- 'FF-WMP' => 'Windows Media Photo (HD Photo)',
- 'FF-OTR' => 'Other',
- },
- },
- ImageFileSizeAsDelivered => {
- %plusVocab,
- PrintConv => {
- 'SZ-U01' => 'Up to 1 MB',
- 'SZ-U10' => 'Up to 10 MB',
- 'SZ-U30' => 'Up to 30 MB',
- 'SZ-U50' => 'Up to 50 MB',
- 'SZ-G50' => 'Greater than 50 MB',
- },
- },
- CopyrightStatus => {
- %plusVocab,
- PrintConv => {
- 'CS-PRO' => 'Protected',
- 'CS-PUB' => 'Public Domain',
- 'CS-UNK' => 'Unknown',
- },
- },
- CopyrightRegistrationNumber => { },
- FirstPublicationDate => { %dateTimeInfo, Groups => { 2 => 'Time'} },
- CopyrightOwner => {
- FlatName => '',
- Struct => \%plusCopyrightOwner,
- List => 'Seq',
- },
- CopyrightOwnerImageID => { },
- ImageCreator => {
- FlatName => '',
- Struct => \%plusImageCreator,
- List => 'Seq',
- },
- ImageCreatorImageID => { },
- ImageSupplier => {
- FlatName => '',
- Struct => \%plusImageSupplier,
- List => 'Seq',
- },
- ImageSupplierImageID => { },
- LicenseeImageID => { },
- LicenseeImageNotes => { Writable => 'lang-alt' },
- OtherImageInfo => { Writable => 'lang-alt' },
- LicenseID => { },
- LicensorTransactionID => { List => 'Bag' },
- LicenseeTransactionID => { List => 'Bag' },
- LicenseeProjectReference=> { List => 'Bag' },
- LicenseTransactionDate => { %dateTimeInfo, Groups => { 2 => 'Time'} },
- Reuse => {
- %plusVocab,
- PrintConv => {
- 'RE-REU' => 'Repeat Use',
- 'RE-NAP' => 'Not Applicable',
- },
- },
- OtherLicenseDocuments => { List => 'Bag' },
- OtherLicenseInfo => { Writable => 'lang-alt' },
- # Note: these are Bag's of lang-alt lists -- a nested list tag!
- Custom1 => { List => 'Bag', Writable => 'lang-alt' },
- Custom2 => { List => 'Bag', Writable => 'lang-alt' },
- Custom3 => { List => 'Bag', Writable => 'lang-alt' },
- Custom4 => { List => 'Bag', Writable => 'lang-alt' },
- Custom5 => { List => 'Bag', Writable => 'lang-alt' },
- Custom6 => { List => 'Bag', Writable => 'lang-alt' },
- Custom7 => { List => 'Bag', Writable => 'lang-alt' },
- Custom8 => { List => 'Bag', Writable => 'lang-alt' },
- Custom9 => { List => 'Bag', Writable => 'lang-alt' },
- Custom10 => { List => 'Bag', Writable => 'lang-alt' },
- );
- #------------------------------------------------------------------------------
- # PRISM
- #
- # NOTE: The "Avoid" flag is set for all PRISM tags
- # my %obsolete = (
- # Notes => 'obsolete in 2.0',
- # ValueConvInv => sub {
- # my ($val, $self) = @_;
- # unless ($self->Options('IgnoreMinorErrors')) {
- # warn "Warning: [minor] Attempt to write obsolete tag\n";
- # return undef;
- # }
- # return $val;
- # }
- # );
- # PRISM structure definitions
- my %prismPublicationDate = (
- STRUCT_NAME => 'prismPublicationDate',
- NAMESPACE => 'prism',
- date => { %dateTimeInfo, Groups => { 2 => 'Time'} },
- 'a-platform'=> { },
- );
- # Publishing Requirements for Industry Standard Metadata (prism) (ref 2)
- %Image::ExifTool::XMP::prism = (
- %xmpTableDefaults,
- GROUPS => { 0 => 'XMP', 1 => 'XMP-prism', 2 => 'Document' },
- NAMESPACE => 'prism',
- NOTES => q{
- Publishing Requirements for Industry Standard Metadata 3.0 namespace
- tags. (see L<http://www.prismstandard.org/>)
- },
- acedemicField => { }, # (3.0)
- aggregateIssueNumber => { Writable => 'integer' }, # (3.0)
- aggregationType => { List => 'Bag' },
- alternateTitle => {
- List => 'Bag',
- Struct => { # (becomes a structure in 3.0)
- STRUCT_NAME => 'prismAlternateTitle',
- NAMESPACE => 'prism',
- text => { },
- 'a-platform'=> { },
- 'a-lang' => { },
- },
- },
- blogTitle => { }, # (3.0)
- blogURL => { }, # (3.0)
- bookEdition => { }, # (3.0)
- byteCount => { Writable => 'integer' },
- channel => {
- List => 'Bag',
- Struct => { # (becomes a structure in 3.0)
- STRUCT_NAME => 'prismChannel',
- NAMESPACE => 'prism',
- channel => { },
- subchannel1 => { },
- subchannel2 => { },
- subchannel3 => { },
- subchannel4 => { },
- 'a-lang' => { },
- },
- },
- complianceProfile=>{ PrintConv => { three => 'Three' } },
- contentType => { }, # (3.0)
- copyrightYear => { }, # (3.0)
- # copyright => { Groups => { 2 => 'Author' } }, # (deprecated in 3.0)
- corporateEntity => { List => 'Bag' },
- coverDate => { %dateTimeInfo, Groups => { 2 => 'Time'} },
- coverDisplayDate=> { },
- creationDate => { %dateTimeInfo, Groups => { 2 => 'Time'} },
- dateRecieved => { %dateTimeInfo, Groups => { 2 => 'Time'} },
- device => { }, # (3.0)
- distributor => { },
- doi => { Name => 'DOI', Description => 'Digital Object Identifier' },
- edition => { },
- eIssn => { },
- #embargoDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} }, # (deprecated in 3.0)
- endingPage => { },
- event => { List => 'Bag' },
- #expirationDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} }, # (deprecated in 3.0)
- genre => { List => 'Bag' },
- hasAlternative => { List => 'Bag' },
- hasCorrection => {
- Struct => { # (becomes a structure in 3.0)
- STRUCT_NAME => 'prismHasCorrection',
- NAMESPACE => 'prism',
- text => { },
- 'a-platform'=> { },
- 'a-lang' => { },
- },
- },
- # hasPreviousVersion => { }, # (not in 3.0)
- hasTranslation => { List => 'Bag' },
- industry => { List => 'Bag' },
- isAlternativeOf => { List => 'Bag' }, # (3.0)
- isbn => { Name => 'ISBN', List => 'Bag' }, # 2.1 (becomes a list in 3.0)
- isCorrectionOf => { List => 'Bag' },
- issn => { Name => 'ISSN' },
- issueIdentifier => { },
- issueName => { },
- issueTeaser => { }, # (3.0)
- issueType => { }, # (3.0)
- isTranslationOf => { },
- keyword => { List => 'Bag' },
- killDate => {
- Struct => { # (becomes a structure in 3.0)
- STRUCT_NAME => 'prismKillDate',
- NAMESPACE => 'prism',
- date => { %dateTimeInfo, Groups => { 2 => 'Time'} },
- 'a-platform'=> { }, #PH (missed in spec?)
- },
- },
- 'link' => { List => 'Bag' }, # (3.0)
- location => { List => 'Bag' },
- # metadataContainer => { }, (not valid for PRISM XMP)
- modificationDate=> { %dateTimeInfo, Groups => { 2 => 'Time'} },
- nationalCatalogNumber => { }, # (3.0)
- number => { },
- object => { List => 'Bag' },
- onSaleDate => { # (3.0)
- List => 'Bag',
- Struct => {
- STRUCT_NAME => 'prismOnSaleDate',
- NAMESPACE => 'prism',
- date => { %dateTimeInfo, Groups => { 2 => 'Time'} },
- 'a-platform'=> { },
- },
- },
- onSaleDay => { # (3.0)
- List => 'Bag',
- Struct => {
- STRUCT_NAME => 'prismOnSaleDay',
- NAMESPACE => 'prism',
- day => { }, #PH (not named in spec)
- 'a-platform'=> { },
- },
- },
- offSaleDate => { # (3.0)
- List => 'Bag',
- Struct => {
- STRUCT_NAME => 'prismOffSaleDate',
- NAMESPACE => 'prism',
- date => { %dateTimeInfo, Groups => { 2 => 'Time'} },
- 'a-platform'=> { },
- },
- },
- organization => { List => 'Bag' },
- originPlatform => {
- List => 'Bag',
- PrintConv => {
- email => 'E-Mail',
- mobile => 'Mobile',
- broadcast => 'Broadcast',
- web => 'Web',
- 'print' => 'Print',
- recordableMedia => 'Recordable Media',
- other => 'Other',
- },
- },
- pageCount => { Writable => 'integer' }, # (3.0)
- pageProgressionDirection => { # (3.0)
- PrintConv => { LTR => 'Left to Right', RTL => 'Right to Left' },
- },
- pageRange => { List => 'Bag' },
- person => { },
- platform => { }, # (3.0)
- productCode => { }, # (3.0)
- profession => { }, # (3.0)
- publicationDate => {
- List => 'Bag',
- Struct => \%prismPublicationDate, # (becomes a structure in 3.0)
- },
- publicationDisplayDate => { # (3.0)
- List => 'Bag',
- Struct => \%prismPublicationDate,
- },
- publicationName => { },
- publishingFrequency => { }, # (3.0)
- rating => { },
- # rightsAgent => { }, # (deprecated in 3.0)
- samplePageRange => { }, # (3.0)
- section => { },
- sellingAgency => { }, # (3.0)
- seriesNumber => { Writable => 'integer' }, # (3.0)
- seriesTitle => { }, # (3.0)
- sport => { }, # (3.0)
- startingPage => { },
- subsection1 => { },
- subsection2 => { },
- subsection3 => { },
- subsection4 => { },
- subtitle => { }, # (3.0)
- supplementDisplayID => { }, # (3.0)
- supplementStartingPage => { }, # (3.0)
- supplementTitle => { }, # (3.0)
- teaser => { List => 'Bag' },
- ticker => { List => 'Bag' },
- timePeriod => { },
- url => {
- Name => 'URL',
- List => 'Bag',
- Struct => { # (becomes a structure in 3.0)
- STRUCT_NAME => 'prismUrl',
- NAMESPACE => 'prism',
- url => { },
- 'a-platform'=> { },
- },
- },
- uspsNumber => { }, # (3.0)
- versionIdentifier => { },
- volume => { },
- wordCount => { Writable => 'integer' },
- # tags that existed in version 1.3
- # category => { %obsolete, List => 'Bag' },
- # hasFormat => { %obsolete, List => 'Bag' },
- # hasPart => { %obsolete, List => 'Bag' },
- # isFormatOf => { %obsolete, List => 'Bag' },
- # isPartOf => { %obsolete },
- # isReferencedBy => { %obsolete, List => 'Bag' },
- # isRequiredBy => { %obsolete, List => 'Bag' },
- # isVersionOf => { %obsolete },
- # objectTitle => { %obsolete, List => 'Bag' },
- # receptionDate => { %obsolete },
- # references => { %obsolete, List => 'Bag' },
- # requires => { %obsolete, List => 'Bag' },
- # tags in older versions
- # page
- # contentLength
- # creationTime
- # expirationTime
- # hasVersion
- # isAlternativeFor
- # isBasedOn
- # isBasisFor
- # modificationTime
- # publicationTime
- # receptionTime
- # releaseTime
- );
- # PRISM Rights Language namespace (prl) (ref 2)
- %Image::ExifTool::XMP::prl = (
- %xmpTableDefaults,
- GROUPS => { 0 => 'XMP', 1 => 'XMP-prl', 2 => 'Document' },
- NAMESPACE => 'prl',
- NOTES => q{
- PRISM Rights Language 2.1 namespace tags. These tags have been deprecated
- since the release of the PRISM Usage Rights 3.0. (see
- L<http://www.prismstandard.org/>)
- },
- geography => { List => 'Bag' },
- industry => { List => 'Bag' },
- usage => { List => 'Bag' },
- );
- # PRISM Usage Rights namespace (prismusagerights) (ref 2)
- %Image::ExifTool::XMP::pur = (
- %xmpTableDefaults,
- GROUPS => { 0 => 'XMP', 1 => 'XMP-pur', 2 => 'Document' },
- NAMESPACE => 'pur',
- NOTES => q{
- PRISM Usage Rights 3.0 namespace tags. (see
- L<http://www.prismstandard.org/>)
- },
- adultContentWarning => { List => 'Bag' },
- agreement => { List => 'Bag' },
- copyright => {
- # (not clear in 3.0 spec, which lists only "bag Text", and called
- # "copyrightDate" instead of "copyright" the PRISM basic 3.0 spec)
- Writable => 'lang-alt',
- Groups => { 2 => 'Author' },
- },
- creditLine => { List => 'Bag' },
- embargoDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} },
- exclusivityEndDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} },
- expirationDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} },
- imageSizeRestriction=> { },
- optionEndDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} },
- permissions => { List => 'Bag' },
- restrictions => { List => 'Bag' },
- reuseProhibited => { Writable => 'boolean' },
- rightsAgent => { },
- rightsOwner => { },
- # usageFee => { List => 'Bag' }, # (not in 3.0)
- );
- # PRISM Metadata for Images namespace (pmi) (ref 2)
- %Image::ExifTool::XMP::pmi = (
- %xmpTableDefaults,
- GROUPS => { 0 => 'XMP', 1 => 'XMP-pmi', 2 => 'Image' },
- NAMESPACE => 'pmi',
- NOTES => q{
- PRISM Metadata for Images 3.0 namespace tags. (see
- L<http://www.prismstandard.org/>)
- },
- color => {
- PrintConv => {
- bw => 'BW',
- color => 'Color',
- sepia => 'Sepia',
- duotone => 'Duotone',
- tritone => 'Tritone',
- quadtone => 'Quadtone',
- },
- },
- contactInfo => { },
- displayName => { },
- distributorProductID => { },
- eventAlias => { },
- eventEnd => { },
- eventStart => { },
- eventSubtype => { },
- eventType => { },
- field => { },
- framing => { },
- location => { },
- make => { },
- manufacturer => { },
- model => { },
- modelYear => { },
- objectDescription=>{ },
- objectSubtype => { },
- objectType => { },
- orientation => {
- PrintConv => {
- horizontal => 'Horizontal',
- vertical => 'Vertical',
- }
- },
- positionDescriptor => { },
- productID => { },
- productIDType => { },
- season => {
- PrintConv => {
- spring => 'Spring',
- summer => 'Summer',
- fall => 'Fall',
- winter => 'Winter',
- },
- },
- sequenceName => { },
- sequenceNumber => { },
- sequenceTotalNumber => { },
- setting => { },
- shootID => { },
- slideshowName => { },
- slideshowNumber => { Writable => 'integer' },
- slideshowTotalNumber => { Writable => 'integer' },
- viewpoint => { },
- visualTechnique => { },
- );
- # PRISM Recipe Metadata (prm) (ref 2)
- %Image::ExifTool::XMP::prm = (
- %xmpTableDefaults,
- GROUPS => { 0 => 'XMP', 1 => 'XMP-prm', 2 => 'Document' },
- NAMESPACE => 'prm',
- NOTES => q{
- PRISM Recipe Metadata 3.0 namespace tags. (see
- L<http://www.prismstandard.org/>)
- },
- cookingEquipment => { },
- cookingMethod => { },
- course => { },
- cuisine => { },
- dietaryNeeds => { },
- dishType => { },
- duration => { },
- ingredientExclusion => { },
- mainIngredient => { },
- meal => { },
- recipeEndingPage => { },
- recipePageRange => { },
- recipeSource => { },
- recipeStartingPage => { },
- recipeTitle => { },
- servingSize => { },
- skillLevel => { },
- specialOccasion => { },
- yield => { },
- );
- #------------------------------------------------------------------------------
- # DICOM namespace properties (DICOM) (ref PH, written by CS3)
- %Image::ExifTool::XMP::DICOM = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-DICOM', 2 => 'Image' },
- NAMESPACE => 'DICOM',
- NOTES => q{
- DICOM namespace tags. These XMP tags allow some DICOM information to be
- stored in files of other than DICOM format. See the
- L<DICOM Tags documentation|Image::ExifTool::TagNames/DICOM Tags> for a list
- of tags available in DICOM-format files.
- },
- # change some tag names to correspond with DICOM tags
- PatientName => { },
- PatientID => { },
- PatientSex => { },
- PatientDOB => {
- Name => 'PatientBirthDate',
- Groups => { 2 => 'Time' },
- %dateTimeInfo,
- },
- StudyID => { },
- StudyPhysician => { },
- StudyDateTime => { Groups => { 2 => 'Time' }, %dateTimeInfo },
- StudyDescription => { },
- SeriesNumber => { },
- SeriesModality => { },
- SeriesDateTime => { Groups => { 2 => 'Time' }, %dateTimeInfo },
- SeriesDescription => { },
- EquipmentInstitution => { },
- EquipmentManufacturer => { },
- );
- # PixelLive namespace properties (PixelLive) (ref 3)
- %Image::ExifTool::XMP::PixelLive = (
- GROUPS => { 1 => 'XMP-PixelLive', 2 => 'Image' },
- NAMESPACE => 'PixelLive',
- NOTES => q{
- PixelLive namespace tags. These tags are not writable becase they are very
- uncommon and I haven't been able to locate a reference which gives the
- namespace URI.
- },
- AUTHOR => { Name => 'Author', Avoid => 1, Groups => { 2 => 'Author' } },
- COMMENTS => { Name => 'Comments', Avoid => 1 },
- COPYRIGHT => { Name => 'Copyright',Avoid => 1, Groups => { 2 => 'Author' } },
- DATE => { Name => 'Date', Avoid => 1, Groups => { 2 => 'Time' } },
- GENRE => { Name => 'Genre', Avoid => 1 },
- TITLE => { Name => 'Title', Avoid => 1 },
- );
- # Extensis Portfolio tags (extensis) (ref 11)
- %Image::ExifTool::XMP::extensis = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-extensis', 2 => 'Image' },
- NAMESPACE => 'extensis',
- NOTES => 'Tags used by Extensis Portfolio.',
- Approved => { Writable => 'boolean' },
- ApprovedBy => { },
- ClientName => { },
- JobName => { },
- JobStatus => { },
- RoutedTo => { },
- RoutingNotes => { },
- WorkToDo => { },
- );
- # IDimager structures (ref PH)
- my %sTagStruct;
- %sTagStruct = (
- STRUCT_NAME => 'TagStructure',
- NAMESPACE => 'ics',
- LabelName => { },
- Reference => { },
- ParentReference => { },
- SubLabels => { Struct => \%sTagStruct, List => 'Bag' },
- );
- my %sSubVersion = (
- STRUCT_NAME => 'SubVersion',
- NAMESPACE => 'ics',
- VersRef => { },
- FileName => { },
- );
- # IDimager namespace (ics) (ref PH)
- %Image::ExifTool::XMP::ics = (
- %xmpTableDefaults,
- GROUPS => { 0 => 'XMP', 1 => 'XMP-ics', 2 => 'Image' },
- NAMESPACE => 'ics',
- NOTES => q{
- Tags used by IDimager. Nested TagStructure structures are unrolled to an
- arbitrary depth of 6 to avoid infinite recursion.
- },
- ImageRef => { },
- TagStructure => { Struct => \%sTagStruct, List => 'Bag' },
- TagStructureLabelName => { Name => 'LabelName1', Flat => 1 },
- TagStructureReference => { Name => 'Reference1', Flat => 1 },
- TagStructureSubLabels => { Name => 'SubLables1', Flat => 1 },
- TagStructureParentReference => { Name => 'ParentReference1', Flat => 1 },
- TagStructureSubLabelsLabelName => { Name => 'LabelName2', Flat => 1 },
- TagStructureSubLabelsReference => { Name => 'Reference2', Flat => 1 },
- TagStructureSubLabelsSubLabels => { Name => 'SubLables2', Flat => 1 },
- TagStructureSubLabelsParentReference => { Name => 'ParentReference2', Flat => 1 },
- TagStructureSubLabelsSubLabelsLabelName => { Name => 'LabelName3', Flat => 1 },
- TagStructureSubLabelsSubLabelsReference => { Name => 'Reference3', Flat => 1 },
- TagStructureSubLabelsSubLabelsSubLabels => { Name => 'SubLables3', Flat => 1 },
- TagStructureSubLabelsSubLabelsParentReference => { Name => 'ParentReference3', Flat => 1 },
- TagStructureSubLabelsSubLabelsSubLabelsLabelName => { Name => 'LabelName4', Flat => 1 },
- TagStructureSubLabelsSubLabelsSubLabelsReference => { Name => 'Reference4', Flat => 1 },
- TagStructureSubLabelsSubLabelsSubLabelsSubLabels => { Name => 'SubLabels4', Flat => 1 },
- TagStructureSubLabelsSubLabelsSubLabelsParentReference => { Name => 'ParentReference4', Flat => 1 },
- TagStructureSubLabelsSubLabelsSubLabelsSubLabelsLabelName => { Name => 'LabelName5', Flat => 1 },
- TagStructureSubLabelsSubLabelsSubLabelsSubLabelsReference => { Name => 'Reference5', Flat => 1 },
- TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabels => { Name => 'SubLabels5', Flat => 1, NoSubStruct => 1 }, # break infinite recursion
- TagStructureSubLabelsSubLabelsSubLabelsSubLabelsParentReference => { Name => 'ParentReference5', Flat => 1 },
- TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsLabelName => { Name => 'LabelName6', Flat => 1 },
- TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsReference => { Name => 'Reference6', Flat => 1 },
- TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsParentReference => { Name => 'ParentReference6', Flat => 1 },
- SubVersions => { Struct => \%sSubVersion, List => 'Bag' },
- SubVersionsVersRef => { Name => 'SubVersionReference', Flat => 1 },
- SubVersionsFileName => { Name => 'SubVersionFileName', Flat => 1 },
- );
- # ACDSee namespace (acdsee) (ref PH)
- %Image::ExifTool::XMP::acdsee = (
- %xmpTableDefaults,
- GROUPS => { 0 => 'XMP', 1 => 'XMP-acdsee', 2 => 'Image' },
- NAMESPACE => 'acdsee',
- NOTES => q{
- ACD Systems ACDSee namespace tags.
- (A note to software developers: Re-inventing your own private tags instead
- of using the equivalent tags in standard XMP namespaces defeats one of the
- most valuable features of metadata: interoperability. Your applications
- mumble to themselves instead of speaking out for the rest of the world to
- hear.)
- },
- author => { Avoid => 1, Groups => { 2 => 'Author' } },
- caption => { Avoid => 1 },
- categories => { Avoid => 1 },
- collections=> { Avoid => 1 },
- datetime => { Name => 'DateTime', Avoid => 1, Groups => { 2 => 'Time' }, %dateTimeInfo },
- keywords => { Avoid => 1, List => 'Bag' },
- notes => { Avoid => 1 },
- rating => { Avoid => 1, Writable => 'real' }, # integer?
- tagged => { Avoid => 1, Writable => 'boolean' },
- rawrppused => { Writable => 'boolean' },
- rpp => {
- Name => 'RPP',
- Writable => 'lang-alt',
- Notes => 'raw processing settings in XML format',
- Binary => 1,
- },
- dpp => {
- Name => 'DPP',
- Writable => 'lang-alt',
- Notes => 'newer version of XML raw processing settings',
- Binary => 1,
- },
- );
- # Picture Licensing Universal System namespace properties (xmpPLUS)
- %Image::ExifTool::XMP::xmpPLUS = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-xmpPLUS', 2 => 'Author' },
- NAMESPACE => 'xmpPLUS',
- NOTES => 'XMP Picture Licensing Universal System (PLUS) namespace tags.',
- CreditLineReq => { Writable => 'boolean' },
- ReuseAllowed => { Writable => 'boolean' },
- );
- # Creative Commons namespace properties (cc) (ref 5)
- %Image::ExifTool::XMP::cc = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-cc', 2 => 'Author' },
- NAMESPACE => 'cc',
- NOTES => q{
- Creative Commons namespace tags. Note that the CC specification for XMP is
- non-existent, so ExifTool must make some assumptions about the format of the
- specific properties in XMP (see L<http://creativecommons.org/ns>).
- },
- # Work properties
- license => { Resource => 1 },
- attributionName => { },
- attributionURL => { Resource => 1 },
- morePermissions => { Resource => 1 },
- useGuidelines => { Resource => 1 },
- # License properties
- permits => {
- List => 'Bag',
- Resource => 1,
- PrintConv => {
- 'cc:Sharing' => 'Sharing',
- 'cc:DerivativeWorks' => 'Derivative Works',
- 'cc:Reproduction' => 'Reproduction',
- 'cc:Distribution' => 'Distribution',
- },
- },
- requires => {
- List => 'Bag',
- Resource => 1,
- PrintConv => {
- 'cc:Copyleft' => 'Copyleft',
- 'cc:LesserCopyleft' => 'Lesser Copyleft',
- 'cc:SourceCode' => 'Source Code',
- 'cc:ShareAlike' => 'Share Alike',
- 'cc:Notice' => 'Notice',
- 'cc:Attribution' => 'Attribution',
- },
- },
- prohibits => {
- List => 'Bag',
- Resource => 1,
- PrintConv => {
- 'cc:HighIncomeNationUse' => 'High Income Nation Use',
- 'cc:CommercialUse' => 'Commercial Use',
- },
- },
- jurisdiction => { Resource => 1 },
- legalcode => { Name => 'LegalCode', Resource => 1 },
- deprecatedOn => { %dateTimeInfo, Groups => { 2 => 'Time' } },
- );
- # Description Explorer namespace properties (dex) (ref 6)
- %Image::ExifTool::XMP::dex = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-dex', 2 => 'Image' },
- NAMESPACE => 'dex',
- NOTES => q{
- Description Explorer namespace tags. These tags are not very common. The
- Source and Rating tags are avoided when writing due to name conflicts with
- other XMP tags. (see L<http://www.optimasc.com/products/fileid/>)
- },
- crc32 => { Name => 'CRC32', Writable => 'integer' },
- source => { Avoid => 1 },
- shortdescription => {
- Name => 'ShortDescription',
- Writable => 'lang-alt',
- },
- licensetype => {
- Name => 'LicenseType',
- PrintConv => {
- unknown => 'Unknown',
- shareware => 'Shareware',
- freeware => 'Freeware',
- adware => 'Adware',
- demo => 'Demo',
- commercial => 'Commercial',
- 'public domain' => 'Public Domain',
- 'open source' => 'Open Source',
- },
- },
- revision => { },
- rating => { Avoid => 1 },
- os => { Name => 'OS', Writable => 'integer' },
- ffid => { Name => 'FFID' },
- );
- # iView MediaPro namespace properties (mediapro) (ref PH)
- %Image::ExifTool::XMP::MediaPro = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-mediapro', 2 => 'Image' },
- NAMESPACE => 'mediapro',
- NOTES => 'iView MediaPro namespace tags.',
- Event => {
- Avoid => 1,
- Notes => 'avoided due to conflict with XMP-iptcExt:Event',
- },
- Location => {
- Avoid => 1,
- Groups => { 2 => 'Location' },
- Notes => 'avoided due to conflict with XMP-iptcCore:Location',
- },
- Status => { },
- People => { List => 'Bag' },
- UserFields => { List => 'Bag' },
- CatalogSets => { List => 'Bag' },
- );
- # Microsoft ExpressionMedia namespace properties (expressionmedia)
- # (ref http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4235.0.html)
- %Image::ExifTool::XMP::ExpressionMedia = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-expressionmedia', 2 => 'Image' },
- NAMESPACE => 'expressionmedia',
- NOTES => q{
- Microsoft Expression Media namespace tags. These tags are avoided when
- writing due to name conflicts with tags in other schemas.
- },
- Event => { Avoid => 1 },
- Status => { Avoid => 1 },
- People => { Avoid => 1, List => 'Bag' },
- CatalogSets => { Avoid => 1, List => 'Bag' },
- );
- # DigiKam namespace tags (ref PH)
- %Image::ExifTool::XMP::digiKam = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-digiKam', 2 => 'Image' },
- NAMESPACE => 'digiKam',
- NOTES => 'DigiKam namespace tags.',
- CaptionsAuthorNames => { Writable => 'lang-alt' },
- CaptionsDateTimeStamps => { Writable => 'lang-alt', Groups => { 2 => 'Time' } },
- TagsList => { List => 'Seq' },
- ColorLabel => { },
- PickLabel => { },
- ImageHistory => { Avoid => 1, Notes => 'different format from EXIF:ImageHistory' },
- LensCorrectionSettings => { },
- );
- # SWF namespace tags (ref PH)
- %Image::ExifTool::XMP::swf = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-swf', 2 => 'Image' },
- NAMESPACE => 'swf',
- NOTES => 'Adobe SWF namespace tags.',
- type => { Avoid => 1 },
- bgalpha => { Name => 'BackgroundAlpha', Writable => 'integer' },
- forwardlock => { Name => 'ForwardLock', Writable => 'boolean' },
- maxstorage => { Name => 'MaxStorage', Writable => 'integer' }, # (CS5)
- );
- # Sony Ericsson cell phone location tags
- # refs: http://www.opencellid.org/api
- # http://zonetag.research.yahoo.com/faq_location.php
- # http://www.cs.columbia.edu/sip/drafts/LIF%20TS%20101%20v2.0.0.pdf
- %Image::ExifTool::XMP::cell = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-cell', 2 => 'Location' },
- NAMESPACE => 'cell',
- NOTES => 'Location tags written by some Sony Ericsson phones.',
- mcc => { Name => 'MobileCountryCode' },
- mnc => { Name => 'MobileNetworkCode' },
- lac => { Name => 'LocationAreaCode' },
- cellid => { Name => 'CellTowerID' },
- cgi => { Name => 'CellGlobalID' },
- r => { Name => 'CellR' }, # (what is this? Radius?)
- );
- # Apple adjustment settings (ref PH)
- %Image::ExifTool::XMP::aas = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-aas', 2 => 'Image' },
- NAMESPACE => 'aas',
- NOTES => 'Apple Adjustment Settings used by iPhone/iPad.',
- CropX => { Writable => 'integer', Avoid => 1 },
- CropY => { Writable => 'integer', Avoid => 1 },
- CropW => { Writable => 'integer', Avoid => 1 },
- CropH => { Writable => 'integer', Avoid => 1 },
- AffineA => { Writable => 'real' },
- AffineB => { Writable => 'real' },
- AffineC => { Writable => 'real' },
- AffineD => { Writable => 'real' },
- AffineX => { Writable => 'real' },
- AffineY => { Writable => 'real' },
- Vibrance => { Writable => 'real', Avoid => 1 },
- Curve0x => { Writable => 'real' },
- Curve0y => { Writable => 'real' },
- Curve1x => { Writable => 'real' },
- Curve1y => { Writable => 'real' },
- Curve2x => { Writable => 'real' },
- Curve2y => { Writable => 'real' },
- Curve3x => { Writable => 'real' },
- Curve3y => { Writable => 'real' },
- Curve4x => { Writable => 'real' },
- Curve4y => { Writable => 'real' },
- Shadows => { Writable => 'real', Avoid => 1 },
- Highlights => { Writable => 'real', Avoid => 1 },
- );
- # Adobe creatorAtom properties (ref PH)
- %Image::ExifTool::XMP::creatorAtom = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-creatorAtom', 2 => 'Image' },
- NAMESPACE => 'creatorAtom',
- NOTES => 'Adobe creatorAtom tags, written by After Effects.',
- macAtom => {
- Struct => {
- STRUCT_NAME => 'MacAtom',
- NAMESPACE => 'creatorAtom',
- applicationCode => { },
- invocationAppleEvent => { },
- posixProjectPath => { },
- },
- },
- windowsAtom => {
- Struct => {
- STRUCT_NAME => 'WindowsAtom',
- NAMESPACE => 'creatorAtom',
- extension => { },
- invocationFlags => { },
- uncProjectPath => { },
- },
- },
- aeProjectLink => { # (After Effects Project Link)
- Struct => {
- STRUCT_NAME => 'AEProjectLink',
- NAMESPACE => 'creatorAtom',
- renderTimeStamp => { Writable => 'integer' },
- compositionID => { },
- renderQueueItemID => { },
- renderOutputModuleIndex => { },
- fullPath => { },
- },
- },
- );
- # FastPictureViewer namespace properties (http://www.fastpictureviewer.com/help/#rtfcomments)
- %Image::ExifTool::XMP::fpv = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-fpv', 2 => 'Image' },
- NAMESPACE => 'fpv',
- NOTES => q{
- Fast Picture Viewer tags (see
- L<http://www.fastpictureviewer.com/help/#rtfcomments>).
- },
- RichTextComment => { },
- );
- # Apple FaceInfo namespace properties (ref PH)
- %Image::ExifTool::XMP::apple_fi = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-apple-fi', 2 => 'Image' },
- NAMESPACE => 'apple-fi',
- NOTES => q{
- Face information tags written by the Apple iPhone 5 inside the mwg-rs
- RegionExtensions.
- },
- Timestamp => {
- Name => 'TimeStamp',
- Writable => 'integer',
- # (don't know how to convert this)
- },
- FaceID => { Writable => 'integer' },
- AngleInfoRoll => { Writable => 'integer' },
- AngleInfoYaw => { Writable => 'integer' },
- ConfidenceLevel => { Writable => 'integer' },
- );
- # Google panorama namespace properties
- # (ref http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4569.0.html)
- %Image::ExifTool::XMP::GPano = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-GPano', 2 => 'Image' },
- NAMESPACE => 'GPano',
- NOTES => q{
- Panorama tags written by Google Photosphere. See
- L<https://developers.google.com/panorama/metadata/> for the specification.
- },
- UsePanoramaViewer => { Writable => 'boolean' },
- CaptureSoftware => { },
- StitchingSoftware => { },
- ProjectionType => { },
- PoseHeadingDegrees => { Writable => 'real' },
- PosePitchDegrees => { Writable => 'real' },
- PoseRollDegrees => { Writable => 'real' },
- InitialViewHeadingDegrees => { Writable => 'integer' },
- InitialViewPitchDegrees => { Writable => 'integer' },
- InitialViewRollDegrees => { Writable => 'integer' },
- InitialHorizontalFOVDegrees => { Writable => 'real' },
- FirstPhotoDate => { %dateTimeInfo, Groups => { 2 => 'Time' } },
- LastPhotoDate => { %dateTimeInfo, Groups => { 2 => 'Time' } },
- SourcePhotosCount => { Writable => 'integer' },
- ExposureLockUsed => { Writable => 'boolean' },
- CroppedAreaImageWidthPixels => { Writable => 'integer' },
- CroppedAreaImageHeightPixels => { Writable => 'integer' },
- FullPanoWidthPixels => { Writable => 'integer' },
- FullPanoHeightPixels => { Writable => 'integer' },
- CroppedAreaLeftPixels => { Writable => 'integer' },
- CroppedAreaTopPixels => { Writable => 'integer' },
- # (the following have been observed, but are not in the specification)
- LargestValidInteriorRectLeft => { Writable => 'integer' },
- LargestValidInteriorRectTop => { Writable => 'integer' },
- LargestValidInteriorRectWidth => { Writable => 'integer' },
- LargestValidInteriorRectHeight => { Writable => 'integer' },
- );
- # Getty Images namespace (ref PH)
- %Image::ExifTool::XMP::GettyImages = (
- %xmpTableDefaults,
- GROUPS => { 1 => 'XMP-getty', 2 => 'Image' },
- NAMESPACE => 'GettyImagesGIFT',
- NOTES => q{
- The actual Getty Images namespace prefix is "GettyImagesGIFT", which is the
- prefix recorded in the file, but ExifTool shortens this for the "XMP-getty"
- family 1 group name.
- },
- Personality => { },
- OriginalFilename => { Name => 'OriginalFileName' },
- ParentMEID => { },
- );
- # SVG namespace properties (ref 9)
- %Image::ExifTool::XMP::SVG = (
- GROUPS => { 0 => 'SVG', 1 => 'SVG', 2 => 'Image' },
- NAMESPACE => 'svg',
- LANG_INFO => \&GetLangInfo,
- NOTES => q{
- SVG (Scalable Vector Graphics) image tags. By default, only the top-level
- SVG and Metadata tags are extracted from these images, but all graphics tags
- may be extracted by setting the Unknown option to 2 (-U on the command
- line). The SVG tags are not part of XMP as such, but are included with the
- XMP module for convenience. (see L<http://www.w3.org/TR/SVG11/>)
- },
- version => 'SVGVersion',
- id => 'ID',
- metadataId => 'MetadataID',
- width => {
- Name => 'ImageWidth',
- ValueConv => '$val =~ s/px$//; $val',
- },
- height => {
- Name => 'ImageHeight',
- ValueConv => '$val =~ s/px$//; $val',
- },
- );
- # table to add tags in other namespaces
- %Image::ExifTool::XMP::otherSVG = (
- GROUPS => { 0 => 'SVG', 2 => 'Unknown' },
- LANG_INFO => \&GetLangInfo,
- NAMESPACE => undef, # variable namespace
- );
- # set "Avoid" flag for all PRISM tags
- my ($table, $key);
- foreach $table (
- \%Image::ExifTool::XMP::prism,
- \%Image::ExifTool::XMP::prl,
- \%Image::ExifTool::XMP::pur,
- \%Image::ExifTool::XMP::pmi,
- \%Image::ExifTool::XMP::prm)
- {
- foreach $key (TagTableKeys($table)) {
- $$table{$key}{Avoid} = 1;
- }
- }
- 1; #end
- __END__
- =head1 NAME
- Image::ExifTool::XMP2.pl - Additional XMP namespace definitions
- =head1 SYNOPSIS
- This module is loaded automatically by Image::ExifTool when required.
- =head1 DESCRIPTION
- This file contains definitions for less common XMP namespaces.
- =head1 AUTHOR
- Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca)
- This library is free software; you can redistribute it and/or modify it
- under the same terms as Perl itself.
- =head1 REFERENCES
- =over 4
- =item L<http://ns.useplus.org/>
- =item L<http://www.prismstandard.org/>
- =item L<http://www.portfoliofaq.com/pfaq/v7mappings.htm>
- =item L<http://creativecommons.org/technology/xmp>
- =item L<http://www.optimasc.com/products/fileid/xmp-extensions.pdf>
- =item L<http://www.w3.org/TR/SVG11/>
- =back
- =head1 SEE ALSO
- L<Image::ExifTool::TagNames/XMP Tags>,
- L<Image::ExifTool(3pm)|Image::ExifTool>
- =cut
|