从EXIF数据中提取描述并排除重复文本

时间:2017-05-23 21:31:18

标签: php arrays exif array-unique

我正在使用肖像工作的图片库,我从Exif数据中提取文本。当我编辑图像时,我正在写下我后来在图库中显示为人物的人名。

我想制作一个列表,但无法弄清楚如何将其变成一个数组,我可以用array_unique()排除重复项。

我的代码是:

$imgdir = 'images/'; //pick your folder ie.: 'images/'
$current_folder = basename(dirname(__FILE__));
$allowed_types = array('png','jpg','jpeg','gif');

$dimg = opendir($imgdir);
while($imgfile = readdir($dimg)){
    if(in_array(strtolower(substr($imgfile,-3)),$allowed_types)){
        $a_img[] = $imgfile;
        sort($a_img);
        reset ($a_img);
    }
}
$totimg = count($a_img);

?><!DOCTYPE html>
<html>
<head>
    <title>Names listing</title>
</head>
<body>
<?php
for ($x=0; $x < $totimg; $x++){
    if ($x == ($totimg-1))
        $_content = (exif_read_data('images/'.$a_img[$x])[ImageDescription]).'';
    else
        $_content = (exif_read_data('images/'.$a_img[$x])[ImageDescription]).', ';
    $_unique = $_content;
    echo $_unique;
}    
?>
</body>
</html>

如果我有同一个人的多个图像,我会得到如下列表:

John, John, Jane, Jane, Jane, ... etc.

我想要的是:

John, Jane, ... etc.

提前致谢。

1 个答案:

答案 0 :(得分:0)

您应该将所有ImageDescription值存储在临时数组中(例如$descriptions),然后在循环完成对临时数组的调用array_unique()以删除重复项后,您就可以可选地按字母顺序排列值,最后使用implode()将剩余值转换为字符串,并使用[逗号和空格]分隔值。

for($x=0; $x<$totimg; ++$x){
    $descriptions[]=exif_read_data('images/'.$a_img[$x])[ImageDescription];
}
$descriptions=array_unique($descriptions);       // remove duplicates before sorting
sort($descriptions);                             // sort alphabetically
echo implode(', ',$descriptions);                // display csv