我有一个图像列表和一个输入图像,如果图像存在于我的列表中,我想输出true。 如果图像获得相同的原始数据,则认为图像相等。
在Android中有一种简单的方法吗?
我看到了这个方法:
但是它需要针对列表中的每个图像测试二进制数据,这有点贵。有没有更好的方法呢?
如果我将相等图像的定义更改为" 类似的" ,如果图像的视觉相似度超过90%,他们会认为是相等的。
答案 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);
}