ImageIO.read() 和 BitmapFactory.decodeByteArray()

ImageIO.read() and BitmapFactory.decodeByteArray()

我现在正在开发一个小型服务器-客户端应用程序,服务器在计算机上,客户端在 android 设备上。在某些时候,我希望设备检查它拥有的图像是否是最新的并使用尽可能少的数据,所以我编写了一些代码来为图像创建校验和,这应该使客户更容易确定图片是否是最新的
(我打算发送代码,但那很长,所以我先试试) 在伪代码中:

long getCheckSumFor(Image i) {
    long xVal;
    long yVal;
    count x from 0 to i.width
         long val = 0;
         count y from 0 to i.height
             val += i.getPixel(x, y);
         yVal += val % Integer.MAX_VALUE;
    count y from 0 to i.height
         long val = 0;
         count x from 0 to i.width
             val += i.getPixel(x, y);
         xVal += val % Integer.MAX_VALUE;
    int tx = xVal % Integer.MAX_VALUE;
    int ty = yVal % Integer.MAX_VALUE;
    return a long with the first 4 bytes taken from ty and the last 4 bytes taken from tx
}

这基本上是它的工作原理,但它为相同的输入提供不同的输出(取决于平台、PC 或 Android)。
我在 PC 上使用 ImageIO.read()BitmapFactory.decodeByteArray()(没有 BitmapFactory.Options)来读取图片,调试显示 yVal 已经因平台而异,所以我猜每个平台的方式可能略有不同方法读取 JPEG?如果这是真的,我有什么办法可以用同样的方式阅读它们吗?

提前致谢,
谢尔顿

如果您改用 MD5 会怎么样?您可以在 Java here and for Android here

中执行此操作

不要使用Bitmap, BufferedImage or BitmapFactory

只需取图像文件的字节来计算校验和。

如果发送文件,则发送文件的字节,不要使用任何转换文件字节的class。

不在发送端。不在接收端。