1

所以,我在 Android 上使用文件共享应用程序。它会创建一个复制副本,并将其上传到它的服务器。

问题 以下代码适用于我手动创建的重复副本。也就是说,我长按并使用文件管理器将文件复制到同一目录中。然后我的函数返回true。当它比较由于应用程序和原始图像而导致的重复图像时,我得到false.

MD5 校验和不同,因此无法选择。

代码

    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());
    }

以下是图片:

原始图像 -原来的

应用程序创建的重复图像 -复制

我的代码目前在比较这两个图像时返回 false。如何让代码返回 true?

4

1 回答 1

1

您的问题是由于 JPEG 压缩造成的伪影,如果您始终可以将图像保存为 PNG,那么您的问题很可能已解决。如果你不能这样做,那么你需要一个更好的算法来比较图像。这与Comparing image in url to image in filesystem in python 中讨论的问题完全相同

例如,运行前面讨论中提到的算法,我们得到超过 99% 的相似度。使用该相似度值,您可以说图像是相同的。

于 2013-01-05T13:52:57.277 回答