JSON 64位解码位图从android到mysql BLOB


JSON 64bit decoding bitmap from android to place in mysql BLOB

使用android、json和php向mysql发送图像

我能够使用将位图转换为正确格式的字符串

将图像转换为json对象

这是安卓中的代码

JSONObject values = new JSONObject();
            values.put(KEY_CONTRACTUUID, con.UUID);
            ...
            if (con._sig != null) {
                String encodedImage = getStringFromBitmap(con._sig);
                values.put(KEY_CONTRACTSIGIMAGE, encodedImage);

    private static String getStringFromBitmap(Bitmap bitmapPicture) {
        /*
         * This functions converts Bitmap picture to a string which can be
         * JSONified.
         */
        final int COMPRESSION_QUALITY = 100;
        String encodedImage;
        ByteArrayOutputStream byteArrayBitmapStream = new ByteArrayOutputStream();
        bitmapPicture.compress(Bitmap.CompressFormat.PNG, COMPRESSION_QUALITY,
                byteArrayBitmapStream);
        byte[] b = byteArrayBitmapStream.toByteArray();
        encodedImage = Base64.encodeToString(b, Base64.DEFAULT);
        return encodedImage;
    }

现在它在base64中,并且有一个字符串,我需要正确地检索它,将其放在mysql中的BLOB中

我没有使用名称-值对或任何废话-只需将其作为json发送,并获得如下json字符串:

$json = json_decode($HTTP_RAW_POST_DATA,true);
echo var_dump(HTTP_RAW_POST_DATA);
...
$varsigimage = $json['sigimage'];
$formatedJSONimage = "{'sigimage': '$varsigimage'}";
var_dump($formatedJSONimage);
$sigImagedecoded = json_decode($formatedJSONimage);
var_dump($sigImagedecoded);

我需要在图像上调用jsondecode,将其从64位中取出,放在blob中,对吗?

然而,要做到这一点,我需要使用函数json_decode,但json_decode假设我会给它一个JSONObject,而且由于我的$json对象中有更多的对象,我需要重新创建一个json对象,其中只有图像,并将其传递给json_decode但它重新运行SYNTAX 类型的json_error

我做错了什么,将base64字符串转换为blob的正确方法是什么?

是的,我会有同样的问题,把它从blob中取出,返回到base64字符串

json_decode解析json字符串并返回一个关联数组,模拟json字符串中的键/值对。

您似乎错过了另一个步骤:您需要将base64编码的图像字符串解码回位图。例如,在您的代码中:

$json = json_decode($HTTP_RAW_POST_DATA,true);
echo var_dump(HTTP_RAW_POST_DATA);
...
$varsigimage = $json['sigimage'];
$image_bitmap = base64_decode($varsigimage); // decode the string back to binary

现在,您应该能够将$image_bitmap保存为数据库中的BLOB。