From 599665c2cf83fa924eb5ca0e71a176aaa714ce33 Mon Sep 17 00:00:00 2001 From: plegall Date: Thu, 20 Apr 2006 21:12:45 +0000 Subject: 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 --- tools/metadata.php | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) (limited to 'tools/metadata.php') 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.'


'; +/** + * 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; } } -- cgit v1.2.3