diff --git a/Changes b/Changes index b6b707c4..21ec896e 100644 --- a/Changes +++ b/Changes @@ -7,6 +7,19 @@ RSS feed: http://owl.phy.queensu.ca/~phil/exiftool/rss.xml Note: The most recent production release is Version 10.20. (Other versions are considered development releases, and are not uploaded to CPAN.) +Sept. xx, 2016 - Version 10.28 - "EXIF 2.31" + + - Added support for new EXIF 2.31 tags + - Added some new Canon LensType values (thanks Norbert Wasser for one) + - Added a new Olympus LensType (thanks LibRaw and Niels Kristian Bech Jensen) + - Added a new Sony LensType and SonyModelID (thanks Jos Roost) + - Added a new Pentax LensType + - Added fotoware.config and bibble.config files to the distribution + - Made Composite SubSecDateTimeOriginal, SubSecCreateDate and SubSecModifyDate + tags writable, and expanded to include new EXIF 2.31 time zone tags + - Fixed problem writing user-defined structured tag elements with a dot (.) in + their tag ID + Sept. 23, 2016 - Version 10.27 - Added a new CanonModelID (thanks LibRaw) @@ -21,11 +34,10 @@ Sept. 23, 2016 - Version 10.27 specified - Fixed Timecode printout in -v3 output for M2TS videos (thanks Ken Neighbors) - Fixed some problems with the new "-progress:TITLE" feature - - Fixed problem where _exiftool_tmp file could be left around after a failed + - Fixed problem where "_exiftool_tmp" file could be left around after a failed write attempt - Fixed potential "isn't numeric" runtime error when reading a PDF file with the -ee option - - Added read support for GSpherical metadata in MP4 videos Sept. 15, 2016 - Version 10.26 diff --git a/MANIFEST b/MANIFEST index fdc5e222..f7393de4 100644 --- a/MANIFEST +++ b/MANIFEST @@ -14,8 +14,10 @@ arg_files/xmp2exif.args arg_files/xmp2gps.args arg_files/xmp2iptc.args arg_files/xmp2pdf.args +config_files/bibble.config config_files/convert_regions.config config_files/example.config +config_files/fotoware.config config_files/gps2utm.config config_files/photoshop_paths.config config_files/picasa_faces.config diff --git a/README b/README index fb1d32c5..80023db2 100644 --- a/README +++ b/README @@ -101,8 +101,8 @@ your home directory, then you would type the following commands in a terminal window to extract and run ExifTool: cd ~/Desktop - gzip -dc Image-ExifTool-10.27.tar.gz | tar -xf - - cd Image-ExifTool-10.27 + gzip -dc Image-ExifTool-10.28.tar.gz | tar -xf - + cd Image-ExifTool-10.28 ./exiftool t/images/ExifTool.jpg Note: These commands extract meta information from one of the test images. @@ -180,8 +180,10 @@ distribution package: xmp2iptc.args - Arguments for converting XMP to IPTC xmp2pdf.args - Arguments for converting XMP to PDF config_files/ - Sample ExifTool configuration files: + bibble.config - Definitions for writing Bibble XMP tags convert_regions.config - Convert between MWG and MP face regions example.config - General example showing config features + fotoware.config - Definitions for writing Fotoware XMP tags gps2utm.config - Generate UTM coordinate tags from GPS info photoshop_paths.config - For extracting or copying Photoshop paths picasa_faces.config - Convert from Picasa to MWG/MP face regions diff --git a/arg_files/xmp2exif.args b/arg_files/xmp2exif.args index 31bb76b9..e7c69f57 100644 --- a/arg_files/xmp2exif.args +++ b/arg_files/xmp2exif.args @@ -5,12 +5,13 @@ # # Usage: exiftool -tagsFromFile SRCFILE -@ xmp2exif.args DSTFILE # -# Requires: ExifTool version 8.60 or later +# Requires: ExifTool version 10.28 or later # # Revisions: 2009/01/20 - P. Harvey Created # 2011/06/22 - PH Copy flash information via Composite:Flash # 2013/06/12 - PH Additions for the Exif 2.3 for XMP spec # 2015/01/12 - PH Avoid copying from non-standard namespaces +# 2016/09/26 - PH Write Composite SubSec tags # # References: http://www.metadataworkinggroup.org/specs/ # @@ -27,12 +28,11 @@ -EXIF:all < XMP-tiff:all -EXIF:ImageDescription < XMP-dc:Description -EXIF:DateTimeOriginal < XMP-photoshop:DateCreated -# magically extracts sub-seconds from date/time value if available --EXIF:SubSecTimeOriginal < XMP-photoshop:DateCreated --EXIF:CreateDate < XMP-xmp:CreateDate --EXIF:SubSecTimeDigitized < XMP-xmp:CreateDate --EXIF:ModifyDate < XMP-xmp:ModifyDate --EXIF:SubSecTime < XMP-xmp:ModifyDate +# the following 3 SubSec tags also write/delete the corresponding EXIF +# SubSecTime and OffsetTime tags as appropriate +-EXIF:SubSecDateTimeOriginal < XMP-photoshop:DateCreated +-EXIF:SubSecCreateDate < XMP-xmp:CreateDate +-EXIF:SubSecModifyDate < XMP-xmp:ModifyDate -EXIF:Software < -XMP-xmp:CreatorTool -EXIF:Copyright < XMP-dc:Rights -EXIF:Artist < XMP-dc:Creator diff --git a/config_files/bibble.config b/config_files/bibble.config new file mode 100644 index 00000000..d40813c8 --- /dev/null +++ b/config_files/bibble.config @@ -0,0 +1,520 @@ +#------------------------------------------------------------------------------ +# File: bibble.config +# +# Description: This config file defines Bibble XMP tags for writing. +# +# Usage: exiftool -config bibble.config -BIBBLETAG=VALUE FILE ... +# +# Requires: ExifTool version 10.28 or later +# +# Revisions: 2012/09/25 - P. Harvey Created +#------------------------------------------------------------------------------ + +%Image::ExifTool::UserDefined = ( + 'Image::ExifTool::XMP::Main' => { + dmf => { + SubDirectory => { TagTable => 'Image::ExifTool::UserDefined::dmf' }, + }, + }, +); + +%Image::ExifTool::UserDefined::dmf = ( + GROUPS => { 0 => 'XMP', 1 => 'XMP-dmf', 2 => 'Image' }, + NAMESPACE => { 'dmf' => 'http://www.bibblelabs.com/DigitalMasterFile/1.0/' }, + WRITABLE => 'string', + versionCount => { + Name => 'DMFCount', + Writable => 'integer', + }, + versions => { + Name => 'DMF', + List => 'Seq', + Struct => { + NAMESPACE => { 'dmfversion' => 'http://www.bibblelabs.com/DigitalMasterFileVersion/1.0/' }, + software => { }, + softwareVersion => { }, + versionName => { }, + settings => { + Struct => { + NAMESPACE => { 'bset' => 'http://www.bibblelabs.com/BibbleSettings/5.0/' }, + settingsVersion => { }, + respectsTransform => { }, + curLayer => { }, + layers => { + List => 'Seq', + Struct => { + NAMESPACE => { 'blay' => 'http://www.bibblelabs.com/BibbleLayers/5.0/' }, + layerId => { }, + layerPos => { }, + name => { }, + enabled => { }, + options => { + Struct => { + NAMESPACE => { 'bopt' => 'http://www.bibblelabs.com/BibbleOpt/5.0/' }, + 'optionchanged' => { }, + 'hasSettings' => { }, + 'metaDirty' => { }, + 'version' => { }, + 'colormode' => { }, + 'colormode' => { }, + 'workingspace' => { }, + 'whiteauto' => { }, + 'whitetype' => { }, + 'lwhitetype' => { }, + 'lmr' => { }, + 'lmb' => { }, + 'whitered' => { }, + 'whitegreen' => { }, + 'whiteblue' => { }, + 'whiteowbr' => { }, + 'whiteowbb' => { }, + 'autolevel' => { }, + 'shadowval' => { }, + 'highlightval' => { }, + 'exposureval' => { }, + 'highlightrecval' => { }, + 'highlightrange' => { }, + 'blackPoint' => { }, + 'fillamount' => { }, + 'fillrange' => { }, + 'autorotate' => { }, + 'rotateangle' => { }, + 'sharpensense' => { }, + 'newsharpen' => { }, + 'sharpenon' => { }, + 'pcenabled' => { }, + 'pctintmeta' => { }, + 'PCNOn' => { }, + 'PCNPreset' => { }, + 'PCNStrength' => { }, + 'PCNDetail' => { }, + 'red' => { }, + 'green' => { }, + 'blue' => { }, + 'sat' => { }, + 'cont' => { }, + 'hue' => { }, + 'vibe' => { }, + 'useHSL' => { }, + 'useHSV' => { }, + 'invertRegions' => { }, + 'layerOpacity' => { }, + 'selective_color' => { }, + 'curveson' => { }, + 'curves_m_cn' => { }, + 'curves_m_cy' => { }, + 'curves_m_cx' => { }, + 'curves_m_imid' => { }, + 'curves_m_olo' => { }, + 'curves_m_ilo' => { }, + 'curves_m_ihi' => { }, + 'curves_m_ohi' => { }, + 'kelvin' => { }, + 'tint' => { }, + 'okelvin' => { }, + 'otint' => { }, + 'lkelvin' => { }, + 'ltint' => { }, + 'ckelvin' => { }, + 'ctint' => { }, + 'cropon' => { }, + 'croplocked' => { }, + 'cropstyle' => { }, + 'cropleft' => { }, + 'croptop' => { }, + 'cropheight' => { }, + 'cropwidth' => { }, + 'cropdpi' => { }, + 'cropstickydpi' => { }, + 'cropstickyx' => { }, + 'cropstickyy' => { }, + 'cropmenuitem' => { }, + 'croppercent' => { }, + 'Date' => { }, + 'DigitizedDateTime' => { }, + 'title' => { }, + 'Priority' => { }, + 'Category' => { }, + 'SupplementalCategory' => { }, + 'creator' => { }, + 'AuthorsPosition' => { }, + 'rights' => { }, + 'Credit' => { }, + 'description' => { }, + 'CaptionWriter' => { }, + 'City' => { }, + 'State' => { }, + 'Country' => { }, + 'CountryCode' => { }, + 'Headline' => { }, + 'Instructions' => { }, + 'TransmissionReference' => { }, + 'Source' => { }, + 'subject' => { }, + 'IntellectualGenre' => { }, + 'CiAdrCity' => { }, + 'CiAdrCtry' => { }, + 'CiAdrExtadr' => { }, + 'CiAdrPcode' => { }, + 'CiAdrRegion' => { }, + 'CiEmailWork' => { }, + 'CiTelWork' => { }, + 'CiUrlWork' => { }, + 'UsageTerms' => { }, + 'Location' => { }, + 'SubjectCode' => { }, + 'Scene' => { }, + 'tag' => { }, + 'keywordlist' => { }, + 'rating' => { }, + 'label' => { }, + 'warpon' => { }, + 'warpa' => { }, + 'warpb' => { }, + 'warpc' => { }, + 'warpresize' => { }, + 'warpfocal' => { }, + 'warpcaon' => { }, + 'warpcarc' => { }, + 'warpcaby' => { }, + 'vignetteon' => { }, + 'vignetterad' => { }, + 'vignetteamt' => { }, + 'profilemake' => { }, + 'profilemodel' => { }, + 'profilelens' => { }, + 'lens' => { }, + 'GPSVersionID' => { }, + 'GPSLatitude' => { }, + 'GPSLongitude' => { }, + 'GPSAltitudeRef' => { }, + 'GPSAltitude' => { }, + 'GPSTimeStamp' => { }, + 'GPSSatellites' => { }, + 'GPSStatus' => { }, + 'GPSMeasureMode' => { }, + 'GPSDateStamp' => { }, + 'GPSMapDatum' => { }, + 'GPSAreaInformation' => { }, + 'GPSProcessingMethod' => { }, + 'bMirrorOn' => { }, + 'bInvertOn' => { }, + 'rn_enabled' => { }, + 'rn_smooth_enabled' => { }, + 'rn_threshold' => { }, + 'rn_limit' => { }, + 'lc_enabled' => { }, + 'lc_radius' => { }, + 'lc_strength' => { }, + 'lc_debug' => { }, + 'enableInputProfile' => { }, + 'inputProfile' => { }, + 'redeyeSize' => { }, + 'redeyeTrack' => { }, + 'redeyeTrackStra' => { }, + 'redeyeTrackCrop' => { }, + 'redeyeEnable' => { }, + 'watermark_mode' => { }, + 'watermark_imageFilename' => { }, + 'watermark_text' => { }, + 'watermark_fontName' => { }, + 'watermark_fontColor' => { }, + 'watermark_fontItalic' => { }, + 'watermark_fontUnderline' => { }, + 'watermark_fontBold' => { }, + 'watermark_fontStrikeout' => { }, + 'watermark_alignment' => { }, + 'watermark_basesize' => { }, + 'watermark_rotation' => { }, + 'watermark_size' => { }, + 'watermark_hpos' => { }, + 'watermark_vpos' => { }, + 'watermark_opacity' => { }, + 'watermark_hskew' => { }, + 'watermark_vskew' => { }, + 'watermark_hproject' => { }, + 'watermark_vproject' => { }, + 'watermark_hstretch' => { }, + 'watermark_vstretch' => { }, + 'watermark_enabled' => { }, + 'ferd.bez_enabled' => { }, + 'ferd.bez_Early' => { }, + 'ferd.bez_HCL' => { }, + 'ferd.bez_opacity' => { }, + 'ferd.bez_saturation' => { }, + 'ferd.bez_lighten' => { }, + 'ferd.bez_lightengamma' => { }, + 'ferd.bez_midi' => { }, + 'ferd.bez_sigcontrast' => { }, + 'ferd.bez_sigmiddle' => { }, + 'ferd.bez_shadows' => { }, + 'ferd.bez_lowmids' => { }, + 'ferd.bez_greys' => { }, + 'ferd.bez_highmids' => { }, + 'ferd.bez_highlights' => { }, + 'ferd.bez_shadows4' => { }, + 'ferd.bez_lowmids4' => { }, + 'ferd.bez_highmids4' => { }, + 'ferd.bez_highlights4' => { }, + 'ferd.ferd_bez_enabled' => { }, + 'ferd.ferd_bez_RGB' => { }, + 'ferd.ferd_bez_BW' => { }, + 'ferd.ferd_bez_lighten' => { }, + 'ferd.ferd_bez_lightengamma' => { }, + 'ferd.ferd_bez_midi' => { }, + 'ferd.ferd_bez_blak' => { }, + 'ferd.ferd_bez_sigcontrast' => { }, + 'ferd.ferd_bez_sigmiddle' => { }, + 'ferd.ferd_bez_contrast' => { }, + 'ferd.ferd_bez_centre' => { }, + 'ferd.ferd_bez_shadows' => { }, + 'ferd.ferd_bez_lowmids' => { }, + 'ferd.ferd_bez_greys' => { }, + 'ferd.ferd_bez_highmids' => { }, + 'ferd.ferd_bez_highlights' => { }, + 'ferd.ferd_bez_shadows4' => { }, + 'ferd.ferd_bez_lowmids4' => { }, + 'ferd.ferd_bez_highmids4' => { }, + 'ferd.ferd_bez_highlights4' => { }, + 'Grid_kb.thirds' => { }, + 'Grid_kb.goldenrat' => { }, + 'Grid_kb.goldenspir' => { }, + 'Grid_kb.squaregrid' => { }, + 'Grid_kb.spiralcenter' => { }, + 'Grid_kb.gridsize' => { }, + 'Grid_kb.gridxcenter' => { }, + 'Grid_kb.gridycenter' => { }, + 'Mix3.mix3_enabled' => { }, + 'Mix3.mix3_early' => { }, + 'Mix3.mix3_exposure' => { }, + 'Mix3.mix3_red' => { }, + 'Mix3.mix3_green' => { }, + 'Mix3.mix3_blue' => { }, + 'SiliconBonk.SiliconBonkOn' => { }, + 'SiliconBonk.SiliconBonkHighlights' => { }, + 'SiliconBonk.SiliconBonkH' => { }, + 'SiliconBonk.SiliconBonkL' => { }, + 'SiliconBonk.SiliconBonkContrast' => { }, + 'SiliconBonk.SiliconBonkMid' => { }, + 'SiliconBonk.SiliconBonkSat' => { }, + 'SiliconBonk.SiliconBonkC0L' => { }, + 'SiliconBonk.SiliconBonkC1L' => { }, + 'SiliconBonk.SiliconBonkC2L' => { }, + 'SiliconBonk.SiliconBonkC3L' => { }, + 'SiliconBonk.SiliconBonkC4L' => { }, + 'SiliconBonk.SiliconBonkC5L' => { }, + 'Vigne_kb.kbv_enabled' => { }, + 'Vigne_kb.kbv_size' => { }, + 'Vigne_kb.kbv_strength' => { }, + 'Vigne_kb.kbv_ccol' => { }, + 'Vigne_kb.kbv_falloff' => { }, + 'Vigne_kb.kbv_shape' => { }, + 'Vigne_kb.kbv_horzcenter' => { }, + 'Vigne_kb.kbv_vertcenter' => { }, + 'Vigne_kb.kbv_factor' => { }, + 'Vigne_kb.kbv_trans' => { }, + 'Vigne_kb.kbv_adjustcrop' => { }, + 'Vigne_kb.kbv_colenabled' => { }, + 'Vigne_kb.kbv_col' => { }, + 'Vigne_kb.kbv_preview' => { }, + 'Vigne_kb.kbv_desat' => { }, + 'Vigne_kb.kbv_desaturate' => { }, + 'WaveletDenoise2.bSphWaveletDenoiseon' => { }, + 'WaveletDenoise2.bSphWaveletDenoiseThresL' => { }, + 'WaveletDenoise2.bSphWaveletDenoiseLowL' => { }, + 'WaveletDenoise2.bSphWaveletDenoiseThresC' => { }, + 'WaveletDenoise2.bSphWaveletDenoiseLowC' => { }, + 'WaveletDenoise2.bSphWaveletDenoiseDePepper' => { }, + 'WaveletDenoise2.bSphWaveletDenoiseShowEdge' => { }, + 'WaveletSharpen2.bSphWaveletUsmon' => { }, + 'WaveletSharpen2.bSphWaveletUsmRadius' => { }, + 'WaveletSharpen2.bSphWaveletUsmAmount' => { }, + 'WaveletSharpen2.bSphWaveletUsmThreshold' => { }, + 'WaveletSharpen2.bSphWaveletUsmClarity' => { }, + 'WaveletSharpen2.bSphWaveletLLenable' => { }, + 'WaveletSharpen2.bSphWaveletLLStrength' => { }, + 'WaveletSharpen2.bSphWaveletLLiter' => { }, + 'WaveletSharpen2.bSphWaveletMCStrength' => { }, + 'WaveletSharpen2.bSphWaveleton' => { }, + 'WaveletSharpen2.bSphWaveletAmount' => { }, + 'WaveletSharpen2.bSphWaveletRadius' => { }, + 'WaveletSharpen2.bSphWaveletSharpenDePepper' => { }, + 'WaveletSharpen2.bSphWaveletEdge' => { }, + 'WaveletSharpen2.bSphWaveletSharpenClarity' => { }, + 'WaveletSharpen2.bSphWaveleton2' => { }, + 'WaveletSharpen2.bSphWaveletAmount2' => { }, + 'WaveletSharpen2.bSphWaveletRadius2' => { }, + 'WaveletSharpen2.bSphWaveletSharpenDePepper2' => { }, + 'WaveletSharpen2.bSphWaveletEdge2' => { }, + 'WaveletSharpen2.bSphWaveletSharpenClarity2' => { }, + 'zChannelMixerGroup.zcmEnable' => { }, + 'zChannelMixerGroup.zcmbw' => { }, + 'zChannelMixerGroup.zcmbwa' => { }, + 'zChannelMixerGroup.zcmlockbw' => { }, + 'zChannelMixerGroup.zcmlockcolor' => { }, + 'zChannelMixerGroup.zcmrr' => { }, + 'zChannelMixerGroup.zcmrg' => { }, + 'zChannelMixerGroup.zcmrb' => { }, + 'zChannelMixerGroup.zcmgr' => { }, + 'zChannelMixerGroup.zcmgg' => { }, + 'zChannelMixerGroup.zcmgb' => { }, + 'zChannelMixerGroup.zcmbr' => { }, + 'zChannelMixerGroup.zcmbg' => { }, + 'zChannelMixerGroup.zcmbb' => { }, + 'zFramePlug.zframeSize1' => { }, + 'zFramePlug.zframeColor1' => { }, + 'zFramePlug.zframeSize2' => { }, + 'zFramePlug.zframeColor2' => { }, + 'zFramePlug.zframeSize3' => { }, + 'zFramePlug.zframeColor3' => { }, + 'zFramePlug.zframeSize4' => { }, + 'zFramePlug.zframeColor4' => { }, + 'zFramePlug.zframeSize5' => { }, + 'zFramePlug.zframeColor5' => { }, + 'zFramePlug.zframeDummy' => { }, + 'zFramePlug.zframeEnable' => { }, + 'zFramePlug.zframeEnable1' => { }, + 'zFramePlug.zframeEnable2' => { }, + 'zFramePlug.zframeEnable3' => { }, + 'zFramePlug.zframeEnable4' => { }, + 'zFramePlug.zframeEnable5' => { }, + 'zFramePlug.zframeCalibration' => { }, + 'zFramePlug.zframeRatio1' => { }, + 'zFramePlug.zframeRatio2' => { }, + 'zFramePlug.zframeRatio3' => { }, + 'zFramePlug.zframeRatio4' => { }, + 'zFramePlug.zframeRatio5' => { }, + 'zFramePlug.xPos1' => { }, + 'zFramePlug.yPos1' => { }, + 'zFramePlug.xPos2' => { }, + 'zFramePlug.yPos2' => { }, + 'zFramePlug.xPos3' => { }, + 'zFramePlug.yPos3' => { }, + 'zFramePlug.xPos4' => { }, + 'zFramePlug.yPos4' => { }, + 'zFramePlug.xPos5' => { }, + 'zFramePlug.yPos5' => { }, + 'zFramePlug.relativeTo' => { }, + 'zFramePlug.place' => { }, + 'Zone_kb.kbz_enabled' => { }, + 'Zone_kb.kbz_highlight' => { }, + 'zPerspectorPlug.zpersEnable' => { }, + 'zPerspectorPlug.zpersRotate' => { }, + 'zPerspectorPlug.zpersGridEnable' => { }, + 'zPerspectorPlug.zpersGrid' => { }, + 'zPerspectorPlug.zpersTopLeft' => { }, + 'zPerspectorPlug.zpersTopRight' => { }, + 'zPerspectorPlug.zpersLeftTop' => { }, + 'zPerspectorPlug.zpersRightTop' => { }, + 'zPerspectorPlug.zpersBottomLeft' => { }, + 'zPerspectorPlug.zpersBottomRight' => { }, + 'zPerspectorPlug.zpersLeftBottom' => { }, + 'zPerspectorPlug.zpersRightBottom' => { }, + 'zPerspectorPlug.zpersmirror' => { }, + 'zPerspectorPlug.zpersMirrorOffset' => { }, + 'zPerspectorPlug.zpersCanvasResize' => { }, + 'zShadowPlug.direction' => { }, + 'zShadowPlug.zshadowEnable' => { }, + 'zShadowPlug.dummy' => { }, + 'zShadowPlug.size' => { }, + 'zShadowPlug.scale' => { }, + 'zShadowPlug.edge' => { }, + 'zShadowPlug.sizeBg' => { }, + 'zShadowPlug.color' => { }, + 'zShadowPlug.colorBg' => { }, + 'zShadowPlug.relativeTo' => { }, + 'zShadowPlug.xPos' => { }, + 'zShadowPlug.yPos' => { }, + 'zSoftenPlug.softenEnable' => { }, + 'zSoftenPlug.softenradius' => { }, + 'zSoftenPlug.softenorton' => { }, + 'zSoftenPlug.softencombo' => { }, + 'zSoftenPlug.softenVignette' => { }, + 'zSoftenPlug.softenProof' => { }, + 'zSoftenPlug.softenvigSize' => { }, + 'zSoftenPlug.softenvigShape' => { }, + 'zSoftenPlug.softenvigFeather' => { }, + 'zSoftenPlug.softenvigXpos' => { }, + 'zSoftenPlug.softenvigYpos' => { }, + 'zSoftenPlug.softenvigRotate' => { }, + 'zTextPlug.zTextOn' => { }, + 'zTextPlug.italic' => { }, + 'zTextPlug.bold' => { }, + 'zTextPlug.underline' => { }, + 'zTextPlug.strikeout' => { }, + 'zTextPlug.overline' => { }, + 'zTextPlug.size' => { }, + 'zTextPlug.xpos' => { }, + 'zTextPlug.ypos' => { }, + 'zTextPlug.rotate' => { }, + 'zTextPlug.font' => { }, + 'zTextPlug.text' => { }, + 'zTextPlug.opacity' => { }, + 'zTextPlug.stretch' => { }, + 'zTextPlug.color' => { }, + 'zTextPlug.shearv' => { }, + 'zTextPlug.shearh' => { }, + 'zTextPlug.scalev' => { }, + 'zTextPlug.scaleh' => { }, + 'zTextPlug.projectv' => { }, + 'zTextPlug.projecth' => { }, + 'zTextPlug.basesize' => { }, + 'zTextPlug.textalign' => { }, + 'zTextPlug.textposh' => { }, + 'zTextPlug.textposv' => { }, + 'zTextPlug.shadowEnable' => { }, + 'zTextPlug.shadowDirection' => { }, + 'zTextPlug.shadowShift' => { }, + 'zTextPlug.shadowIntensity' => { }, + 'zTextPlug.shadowColor' => { }, + 'blplug.bbwenabled' => { }, + 'blplug.bbwspotA' => { }, + 'blplug.bbwspotB' => { }, + 'blplug.bbwhueA' => { }, + 'blplug.bbwfuzzyA' => { }, + 'blplug.bbwcolorA' => { }, + 'blplug.bbwhueB' => { }, + 'blplug.bbwcolorB' => { }, + 'blplug.bbwfuzzyB' => { }, + 'blplug.bbwmode' => { }, + 'Equalizer_kb.kbs_enabled' => { }, + 'Equalizer_kb.kbs_bw' => { }, + 'Equalizer_kb.kbs_redlum' => { }, + 'Equalizer_kb.kbs_yellowlum' => { }, + 'Equalizer_kb.kbs_orangelum' => { }, + 'Equalizer_kb.kbs_greenlum' => { }, + 'Equalizer_kb.kbs_cyanlum' => { }, + 'Equalizer_kb.kbs_bluelum' => { }, + 'Equalizer_kb.kbs_magentalum' => { }, + 'Equalizer_kb.kbs_redhue' => { }, + 'Equalizer_kb.kbs_yellowhue' => { }, + 'Equalizer_kb.kbs_orangehue' => { }, + 'Equalizer_kb.kbs_greenhue' => { }, + 'Equalizer_kb.kbs_cyanhue' => { }, + 'Equalizer_kb.kbs_bluehue' => { }, + 'Equalizer_kb.kbs_magentahue' => { }, + 'Equalizer_kb.kbs_redsat' => { }, + 'Equalizer_kb.kbs_yellowsat' => { }, + 'Equalizer_kb.kbs_orangesat' => { }, + 'Equalizer_kb.kbs_greensat' => { }, + 'Equalizer_kb.kbs_cyansat' => { }, + 'Equalizer_kb.kbs_bluesat' => { }, + 'Equalizer_kb.kbs_magentasat' => { }, + 'Equalizer_kb.kbs_redvib' => { }, + 'Equalizer_kb.kbs_yellowvib' => { }, + 'Equalizer_kb.kbs_orangevib' => { }, + 'Equalizer_kb.kbs_greenvib' => { }, + 'Equalizer_kb.kbs_cyanvib' => { }, + 'Equalizer_kb.kbs_bluevib' => { }, + 'Equalizer_kb.kbs_magentavib' => { }, + }, + }, + }, + }, + }, + }, + }, + }, +); + +1; #end diff --git a/config_files/fotoware.config b/config_files/fotoware.config new file mode 100644 index 00000000..137f8322 --- /dev/null +++ b/config_files/fotoware.config @@ -0,0 +1,114 @@ +#------------------------------------------------------------------------------ +# File: fotoware.config +# +# Description: This config file defines Fotoware XMP tags for writing. +# +# Notes: Length limits are imposed according to Fotoware limitations when +# writing string values, but these may be disabled with the -n +# option or by adding a "#" to the tag name. However, beware that +# longer strings may cause unpredictable results in Fotoware +# software. +# +# Use of this file will not bring full Fotoware 'experience'. +# Fotostation writes these tags not only into XMP but also in IIM +# and even Exif spaces. Communication with older Fotoware systems +# may be broken when using only XMP. +# +# Also note that there are potential problems with character +# encoding on systems with mixed environments, depending on +# Fotoware software settings. +# +# Usage: exiftool -config fotoware.config -FOTOWARETAG=VALUE FILE ... +# +# Requires: ExifTool version 7.00 or later +# +# Revisions: 2012/09/19 - P. Harvey Created +# 2016/09/24 - Mikolaj Machowski updated with new Fotostation tags +#------------------------------------------------------------------------------ + +%Image::ExifTool::UserDefined = ( + 'Image::ExifTool::XMP::Main' => { + fwl => { + SubDirectory => { TagTable => 'Image::ExifTool::UserDefined::fwl' }, + }, + fwr => { + SubDirectory => { TagTable => 'Image::ExifTool::UserDefined::fwr' }, + }, + fwc => { + SubDirectory => { TagTable => 'Image::ExifTool::UserDefined::fwc' }, + }, + fwu => { + SubDirectory => { TagTable => 'Image::ExifTool::UserDefined::fwu' }, + }, + }, +); + +%Image::ExifTool::UserDefined::fwl = ( + GROUPS => { 0 => 'XMP', 1 => 'XMP-fwl', 2 => 'Image' }, + NAMESPACE => { 'fwl' => 'http://ns.fotoware.com/iptcxmp-legacy/1.0/' }, + WRITABLE => 'string', + # limit maximum lengths of string values + CreatedTime => { PrintConvInv => 'substr($val,0,16)' }, + EditStatus => { PrintConvInv => 'substr($val,0,64)' }, + FixtureIdentifier=> { PrintConvInv => 'substr($val,0,1024)' }, + LocalCaption => { PrintConvInv => 'substr($val,0,2000)' }, + ObjectCycle => { PrintConvInv => 'substr($val,0,32)' }, + ProgramVersion => { PrintConvInv => 'substr($val,0,10)' }, + ReferenceNumber => { PrintConvInv => 'substr($val,0,256)' }, + ReferenceService => { PrintConvInv => 'substr($val,0,256)' }, + ReferenceDate => { + Groups => { 2 => 'Time' }, + Writable => 'date', + Shift => 'Time', + PrintConv => '$self->ConvertDateTime($val)', + PrintConvInv => '$self->InverseDateTime($val,undef,1)', + }, + ReleaseDate => { + Groups => { 2 => 'Time' }, + Writable => 'date', + Shift => 'Time', + PrintConv => '$self->ConvertDateTime($val)', + PrintConvInv => '$self->InverseDateTime($val,undef,1)', + }, + ReleaseTime => { PrintConvInv => 'substr($val,0,16)' }, +); + +%Image::ExifTool::UserDefined::fwr = ( + GROUPS => { 0 => 'XMP', 1 => 'XMP-fwr', 2 => 'Image' }, + NAMESPACE => { 'fwr' => 'http://ns.fotoware.com/iptcxmp-reserved/1.0/' }, + WRITABLE => 'string', + Classify => { PrintConvInv => 'substr($val,0,256)' }, + DocumentText => { PrintConvInv => 'substr($val,0,2000)' }, + Exif => { PrintConvInv => 'substr($val,0,1024)' }, + History => { PrintConvInv => 'substr($val,0,256)' }, + ImageNotes => { PrintConvInv => 'substr($val,0,256)' }, + JobId => { PrintConvInv => 'substr($val,0,256)' }, + OwnerId => { PrintConvInv => 'substr($val,0,256)' }, + ShortUniqeId => { PrintConvInv => 'substr($val,0,256)' }, + ContentValue => { PrintConvInv => 'substr($val,0,256)' }, + UniqueId => { PrintConvInv => 'substr($val,0,256)' }, + MasterDocumentId => { PrintConvInv => 'substr($val,0,256)' }, +); + + +%Image::ExifTool::UserDefined::fwc = ( + GROUPS => { 0 => 'XMP', 1 => 'XMP-fwc', 2 => 'Image' }, + NAMESPACE => { 'fwc' => 'http://ns.fotoware.com/iptcxmp-custom/1.0/' }, + WRITABLE => 'string', + # generate CustomField1 through CustomField20 tags + map { 'CustomField' . $_ => { + PrintConvInv => 'substr($val,0,256)', + } } (1 .. 20), +); + +%Image::ExifTool::UserDefined::fwu = ( + GROUPS => { 0 => 'XMP', 1 => 'XMP-fwu', 2 => 'Image' }, + NAMESPACE => { 'fwu' => 'http://ns.fotoware.com/iptcxmp-user/1.0/' }, + WRITABLE => 'string', + # generate UserDefined1 through UserDefined255 tags + map { 'UserDefined' . $_ => { + PrintConvInv => 'substr($val,0,256)', + } } (1 .. 255), +); + +1; #end diff --git a/exiftool b/exiftool index a2926e89..ad5f1476 100755 --- a/exiftool +++ b/exiftool @@ -12,7 +12,7 @@ use strict; require 5.004; -my $version = '10.27'; +my $version = '10.28'; # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool' my $exeDir; @@ -4799,7 +4799,7 @@ with this command: produces output like this: - -- Generated by ExifTool 10.27 -- + -- Generated by ExifTool 10.28 -- File: a.jpg - 2003:10:31 15:44:19 (f/5.6, 1/60s, ISO 100) File: b.jpg - 2006:05:23 11:57:38 diff --git a/html/TagNames/Canon.html b/html/TagNames/Canon.html index b19b60b3..458bc9bf 100644 --- a/html/TagNames/Canon.html +++ b/html/TagNames/Canon.html @@ -1595,7 +1595,7 @@ attempting to identify the specific lens model.