Java - 另一个" BitmapFactory.decodeByteArray始终为null"

时间:2015-01-16 13:28:12

标签: java php android mysql decode

我有一个以这种形式存储在数据库中的图像

"/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);
...

pic 以及 decodingByte.length 是正确的,但 bm 始终为空

我尝试将 Base64.DEFAULT 更改为 NO_PADDING NO_WRAP ,但始终为null。

可能是什么原因?

1 个答案:

答案 0 :(得分:0)

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

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