From 36df6fa3069d55db3c35724c4f465bde9c50b53a Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 31 Jul 2005 18:35:54 +0200 Subject: image metadata editor This patch adds an meta data editor for JPEG files. Currently title, caption, artist, copyright and keywords can be saved. The data is saved to the apropriate IPTC fields. Additional fields can be added in the appropriate template. Compatibility testing with other programs is needed! darcs-hash:20050731163554-7ad00-dd936ec19549203dcf72de8774309c0b17d0b679.gz --- inc/JpegMeta.php | 58 ++++++++++++++++++++++++++++++++++++++++++---------- inc/lang/en/lang.php | 3 +++ inc/template.php | 13 ++++++++++-- 3 files changed, 61 insertions(+), 13 deletions(-) (limited to 'inc') diff --git a/inc/JpegMeta.php b/inc/JpegMeta.php index b9f0908d4..408f34589 100644 --- a/inc/JpegMeta.php +++ b/inc/JpegMeta.php @@ -3,9 +3,10 @@ * JPEG metadata reader/writer * * @license PHP license 2.0 (http://www.php.net/license/2_02.txt) - * @link + * @link http://www.zonageek.com/software/php/jpeg/index.php * @author Sebastian Delmont * @author Andreas Gohr + * @todo Add support for Maker Notes, Extend for GIF and PNG metadata */ // This class is a modified and enhanced version of the JPEG class by @@ -163,6 +164,40 @@ class JpegMeta return trim($info); } + /** + * Convinience function to set nearly all available Data + * through one function + * + * @author Andreas Gohr + */ + function setField($field, $value) + { + if(strtolower(substr($field,0,5)) == 'iptc.'){ + return $this->setIPTCField(substr($field,5),$value); + }elseif(strtolower(substr($field,0,5)) == 'exif.'){ + return $this->setExifField(substr($field,5),$value); + }else{ + return $this->setExifField($field,$value); + } + } + + /** + * Convinience function to delete nearly all available Data + * through one function + * + * @author Andreas Gohr + */ + function deleteField($field) + { + if(strtolower(substr($field,0,5)) == 'iptc.'){ + return $this->deleteIPTCField(substr($field,5)); + }elseif(strtolower(substr($field,0,5)) == 'exif.'){ + return $this->deleteExifField(substr($field,5)); + }else{ + return $this->deleteExifField($field); + } + } + /** * Return a date field * @@ -770,18 +805,19 @@ class JpegMeta * Save changed Metadata * * @author Sebastian Delmont + * @author Andreas Gohr */ function save($fileName = "") { - if ($fileName == "") { - $tmpName = $this->_fileName . ".tmp"; - $this->_writeJPEG($tmpName); - if (file_exists($tmpName)) { - rename($tmpName, $this->_fileName); - } - } - else { - $this->_writeJPEG($fileName); - } + if ($fileName == "") { + $tmpName = tempnam(dirname($this->_fileName),'_metatemp_'); + $this->_writeJPEG($tmpName); + if (@file_exists($tmpName)) { + return rename($tmpName, $this->_fileName); + } + } else { + return $this->_writeJPEG($fileName); + } + return false; } /*************************************************************/ diff --git a/inc/lang/en/lang.php b/inc/lang/en/lang.php index 16fc1b738..fcc4ed696 100644 --- a/inc/lang/en/lang.php +++ b/inc/lang/en/lang.php @@ -144,6 +144,9 @@ $lang['spell_noerr'] = 'No Mistakes found'; $lang['spell_nosug'] = 'No Suggestions'; $lang['spell_change']= 'Change'; +$lang['metaedit'] = 'Edit Metadata'; +$lang['metasaveerr'] = 'Writing metadata failed'; +$lang['metasaveok'] = 'Metadata saved'; $lang['img_backto'] = 'Back to'; $lang['img_title'] = 'Title'; $lang['img_caption'] = 'Caption'; diff --git a/inc/template.php b/inc/template.php index 23123b452..b48a591f8 100644 --- a/inc/template.php +++ b/inc/template.php @@ -665,12 +665,21 @@ function tpl_mediafilelist(){ $t = $item['meta']->getField('IPTC.Headline'); if($t) print ''.$t.'
'; - $t = $item['meta']->getField(array('IPTC.Caption','EXIF.UserComment','EXIF.TIFFImageDescription','EXIF.TIFFUserComment')); + $t = $item['meta']->getField(array('IPTC.Caption','EXIF.UserComment', + 'EXIF.TIFFImageDescription', + 'EXIF.TIFFUserComment')); if($t) print $t.'
'; $t = $item['meta']->getField(array('IPTC.Keywords','IPTC.Category')); if($t) print ''.$t.'
'; + //add edit button + if($AUTH >= AUTH_UPLOAD && $item['meta']->getField('File.Mime') == 'image/jpeg'){ + print ''; + print ''.$lang['metaedit'].''; + print ''; + } + ptln('',6); }else{ ptln ('('.filesize_h($item['size']).')',6); @@ -771,7 +780,7 @@ function tpl_pagetitle($id=null){ * and _iptcTagNames() in inc/jpeg.php (You need to prepend IPTC * to the names of the latter one) * - * Only allowed in: detail.php + * Only allowed in: detail.php, mediaedit.php * * @author Andreas Gohr */ -- cgit v1.2.3