0

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);

イメージを64ビットから取り出してブロブに正しく配置するには、イメージでjson_decodeを呼び出す必要がありますか?

ただし、これを行うには関数 json_decode を使用する必要がありますが、json_decode は、JSONObject を指定することを前提としています。$json オブジェクトにはさらに多くのオブジェクトがあるため、その中に画像だけを含む単一の JSON オブジェクトを再作成する必要があります。 、それをjson_decodeに渡しますが、SYNTAXタイプのjson_errorを返します

私は何を間違っていますか、base64文字列をブロブに変換する正しいアプローチは何ですか?

はい、blob から base64 文字列に戻すことについて、同じ質問をするつもりです。

4

1 に答える 1

1

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 として保存できるはずです。

于 2013-02-17T21:37:50.997 に答える