2

我有一个 Web 服务,它给了我一个 json,它有一个名为“imagedata”的节点。它包含大量数据作为字符串。当我在浏览器中打印它时,它给了我有效的输入。Base64 编码的字符串以 '=' 字符结尾。

我还在一个 html 页面中使用这个标签对其进行了测试,它工作得非常好。

<img src="data:image/png;base64,MY_BASE64_ENCODED_STRING"/>

这是我的代码;

StringBuilder b64 = new StringBuilder(dataObj.getString("imagedata"));
byte[] decodedByte = Base64.decode(b64.toString(), 0);
bitmap = BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);

请注意,此代码适用于较小的图像数据,但会在较大的图像数据上给出 bad-base64 异常

请帮帮我,谢谢

4

1 回答 1

0

为什么你的服务器给你base64编码?Base64 只是通信而不是编码图像。如果它用于编码,它将使您的图像文件大小更大。IllegalArgumentException 意味着您的图像编码格式不正确或无法解码。在我的项目中,我现在使用 Base64 发送图像。但它会被多部分改变。但是当服务器转发给收件人时。它只是转发图像的网址。所以我可以用这个简单地处理图像的网址:

public static Image loadImage(String url)
{
    HttpConnection connection = null;
    DataInputStream dis = null;
    byte[] data = null;

    try
    {
        connection = (HttpConnection) Connector.open(url);
        int length = (int) connection.getLength();
        data = new byte[length];
        dis = new DataInputStream(connection.openInputStream());
        dis.readFully(data);
    }
    catch (Exception e)
    {
        System.out.println("Error LoadImage: " + e.getMessage());
        e.printStackTrace();
    }
    finally
    {
        if (connection != null)
            try
            {
                connection.close();
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        if (dis != null)
            try
            {
                dis.close();
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }


    return Image.createImage(data, 0, data.length);
}

请注意 J2ME 的此代码。

于 2013-07-28T17:01:44.743 回答