所以,我在Android上使用文件共享应用程序。它会创建一个副本,并将其上传到服务器。
问题的
以下代码适用于我手动创建的副本。也就是说,我长按并使用文件管理器将文件复制到同一目录中。然后我的函数返回true
。当它比较应用程序和原始图像的重复图像时,我得到false
。
MD5校验和不同,因此不在选项范围内。
CODE
public boolean equals(Bitmap bitmap1, Bitmap bitmap2) {
ByteBuffer buffer1 = ByteBuffer.allocate(bitmap1.getHeight()
* bitmap1.getRowBytes());
bitmap1.copyPixelsToBuffer(buffer1);
ByteBuffer buffer2 = ByteBuffer.allocate(bitmap2.getHeight()
* bitmap2.getRowBytes());
bitmap2.copyPixelsToBuffer(buffer2);
return Arrays.equals(buffer1.array(), buffer2.array());
}
以下是图片:
原始图片 - original http://s7.postimage.org/e7ey11td7/IMG_20130103_WA0018.jpg
应用创建的重复图片 - duplicate http://s2.postimage.org/ta9b9bqbt/IMG_20130105_WA0002.jpg
我的代码在比较这两个图像时当前返回false。 如何让代码返回true?
答案 0 :(得分:1)
你的问题是由JPEG压缩产生的人工制品引起的,如果你总是可以将图像保存在PNG中,那么你的问题很可能就解决了。如果你不能这样做,那么你需要一个更好的算法来比较图像。这与Comparing image in url to image in filesystem in python
中讨论的问题完全相同例如,运行前面讨论中提到的算法,我们得到的相似度超过99%。使用该相似度值,您可以说图像是相同的。