如何知道字节数组是否是有效图像

How to know if a byte array is a valid image

有没有办法知道字节数组是否是有效图像?

我正在拍照,在OnActivityResult中:

Bitmap imageBitmap = (Bitmap) extras.get("data");
imageBitmap.compress(Bitmap.CompressFormat.JPEG, 75, out);
//arrayFotos is an ArrayList
arrayFotos.add(new BeanFotos("", imageBitmap, lastKnwonLocation.getLatitude(), lastKnwonLocation.getLongitude()));

我将其存储在数据库中:

//listaFotos and arrayFotos are the same array, but with different names, because I am storing it in another class in my app
for(int i=0;i<listaFotos.size();i++){
values.clear();
values.put("codficha", codficha);
int bytes=listaFotos.get(i).getFoto().getByteCount();
ByteBuffer buffer = ByteBuffer.allocate(bytes);
listaFotos.get(i).getFoto().copyPixelsToBuffer(buffer);
values.put("foto", buffer.array());
db.insert("fotos", null, values);
}

稍后,我需要显示该图像:

byte[] arrayFoto = csr2.getBlob(0);
Bitmap fotoBitmap=BitmapFactory.decodeByteArray(arrayFoto, 0, arrayFoto.length);

问题是,无论我做什么,decodeByteArray 方法始终 returns 为空。我试过使用外部库,它总是空的,所以我想也许我以错误的方式存储它。 arrayFoto 变量不为空,我正在接收字节(准确地说是 84584),但 decodeByteArray 方法 returns 为空。

那么,有没有办法让我确定字节数组是正确的图像?

谢谢。

您似乎正在将未压缩的位图写入数据库。如果您希望能够使用 BitmapFactory.

对其进行解码,则需要先将其压缩为 jpeg 或 png

此外,将图像存储在数据库中不是一个好主意,因为游标 window 大小限制为 1MB。您不应该将二进制数据存储在 SQLite 数据库中,除非它非常小。