Android比较/搜索多张图片

时间:2016-07-08 10:27:11

标签: android image bitmap

我有一个图像列表和一个输入图像,如果图像存在于我的列表中,我想输出true。 如果图像获得相同的原始数据,则认为图像相等。

在Android中有一种简单的方法吗?

我看到了这个方法:

boolean Bitmap.sameAs(Bitmap)

但是它需要针对列表中的每个图像测试二进制数据,这有点贵。有没有更好的方法呢?

如果我将相等图像的定义更改为" 类似的" ,如果图像的视觉相似度超过90%,他们会认为是相等的。

1 个答案:

答案 0 :(得分:1)

这是第一部分的解决方案,其中相同的图像是那些获得相同原始数据的图像。

您可以散列每个图像并通过散列进行比较,这样您只需测试一次图像原始数据。

String toSHA1(Bitmap bitmap){
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
    byte[] byteArray = stream.toByteArray();
    try {
        String sha1 = toSHA1(byteArray);
        stream.close();
        return sha1;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

String toSHA1(byte[] data) throws NoSuchAlgorithmException {
    MessageDigest md = MessageDigest.getInstance("SHA-1");
    BigInteger bigInteger = new BigInteger(1, md.digest(data));
    return bigInteger.toString(Character.MAX_RADIX);
}