diff options
author | plegall <plg@piwigo.org> | 2006-04-20 21:12:45 +0000 |
---|---|---|
committer | plegall <plg@piwigo.org> | 2006-04-20 21:12:45 +0000 |
commit | 599665c2cf83fa924eb5ca0e71a176aaa714ce33 (patch) | |
tree | 3347a648d701a16cb63eed8288b5913e6536a747 | |
parent | 81abfe32ecd8575aa216a892e7b96525c0decbed (diff) |
bug 339 fixed: crash on metadata synchronization when duplicate keywords.
improvement: tools/metadata.php is nearer of what metadata synchronization
uses (concerning keywords)
git-svn-id: http://piwigo.org/svn/branches/branch-1_6@1222 68402e56-0260-453c-a942-63ccdbb3a9ee
-rw-r--r-- | admin/include/functions_metadata.php | 10 | ||||
-rw-r--r-- | tools/metadata.php | 41 |
2 files changed, 44 insertions, 7 deletions
diff --git a/admin/include/functions_metadata.php b/admin/include/functions_metadata.php index 1df03ba43..f468ab7e3 100644 --- a/admin/include/functions_metadata.php +++ b/admin/include/functions_metadata.php @@ -53,6 +53,16 @@ function get_sync_iptc_data($file) // official keywords separator is the comma $iptc['keywords'] = preg_replace('/[.;]/', ',', $iptc['keywords']); $iptc['keywords'] = preg_replace('/^,+|,+$/', '', $iptc['keywords']); + + $iptc['keywords'] = implode( + ',', + array_unique( + explode( + ',', + $iptc['keywords'] + ) + ) + ); } return $iptc; diff --git a/tools/metadata.php b/tools/metadata.php index 011240135..1ef307f3f 100644 --- a/tools/metadata.php +++ b/tools/metadata.php @@ -28,6 +28,25 @@ $filename = 'sample.jpg'; echo 'Informations are read from '.$filename.'<br /><br /><br />'; +/** + * return a cleaned IPTC value + * + * @param string value + * @return string + */ +function clean_iptc_value($value) +{ + // strip leading zeros (weird Kodak Scanner software) + while ( isset($value[0]) and $value[0] == chr(0)) + { + $value = substr($value, 1); + } + // remove binary nulls + $value = str_replace(chr(0x00), ' ', $value); + + return $value; +} + $iptc_result = array(); $imginfo = array(); getimagesize($filename, $imginfo); @@ -38,17 +57,25 @@ if (isset($imginfo['APP13'])) { foreach (array_keys($iptc) as $iptc_key) { - if (isset($iptc[$iptc_key][0]) and $value = $iptc[$iptc_key][0]) + if (isset($iptc[$iptc_key][0])) { - // strip leading zeros (weird Kodak Scanner software) - while ($value[0] == chr(0)) + if ($iptc_key == '2#025') + { + $value = implode( + ',', + array_map( + 'clean_iptc_value', + $iptc[$iptc_key] + ) + ); + } + else { - $value = substr($value, 1); + $value = clean_iptc_value($iptc[$iptc_key][0]); } - // remove binary nulls - $value = str_replace(chr(0x00), ' ', $value); + + $iptc_result[$iptc_key] = $value; } - $iptc_result[$iptc_key] = $value; } } |