aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorplegall <plg@piwigo.org>2006-04-20 21:12:45 +0000
committerplegall <plg@piwigo.org>2006-04-20 21:12:45 +0000
commit599665c2cf83fa924eb5ca0e71a176aaa714ce33 (patch)
tree3347a648d701a16cb63eed8288b5913e6536a747
parent81abfe32ecd8575aa216a892e7b96525c0decbed (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
Diffstat (limited to '')
-rw-r--r--admin/include/functions_metadata.php10
-rw-r--r--tools/metadata.php41
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;
}
}