Java - 另一个 "BitmapFactory.decodeByteArray always null"

Java - Another "BitmapFactory.decodeByteArray always null"

我有一张图片以这种形式存储在数据库中

"/9j/4AAQSkZJRgABAQAAAQABAAD/2w <...> igD//2Q=="

所以绝对是 base64 编码。

我通过 php 函数得到它:

...
$query = $db->prepare("SELECT `Data` FROM `UserPicture` WHERE `UserId` = ?");

$query->bind_param('i', $id);
$query->execute();
$query->bind_result($data);
$query->fetch();

echo base64_encode($data);

Android 通过调用获取:

StringBuffer result = m_dbi.getResult(Constants.SERVER_HOST_PHP + "/get_user_picture.php", params, "GET");

调试我发现结果是正确的。

我将 result.toString() 传递给 writeImageToFile(String pic) ,它执行以下操作:

...
byte[] decodedByte = Base64.decode(pic, Base64.DEFAULT);
Bitmap bm = BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);
...

picdecodedByte.length 一样正确,但是 bm 始终为空.

我已经尝试将 Base64.DEFAULT 更改为 NO_PADDINGNO_WRAP 但始终为空。

可能是什么原因?

问题是因为您使用 mysqlireal_escape_string() 将图像保存在 BLOB 中。与任何字符串转义方法一样,此方法适用于文本,并更改​​它认为是无效字符的内容。将此应用于图像而不是字符串会损坏图像。

BLOB 应使用 this Oracle blog entry 中描述的过程存储,使用 send_long_data() 并且不转义。