解码Android中的图像数据

时间:2018-06-03 07:57:45

标签: javascript java android swift decode

我很困惑在Android中解码图像数据。

以下代码正在运行。它得到了'坏基地-64"错误信息。

String c = data.getString("profile_picture").replace("\n", "");
byte [] picture_data = Base64.decode(c, Base64.DEFAULT);  // ******** ERROR (bad base-64) *******

InputStream is = new ByteArrayInputStream(picture_data);

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bmp = BitmapFactory.decodeStream(is, null, options);

ImageView _profile_image = (ImageView)view.findViewById(R.id.image_view);
_profile_image.setImageBitmap(bmp);

我尝试了所有Base64。*作为解码参数。

我在Swift和Javascript中使用相同的图像数据(json字符串)。

夫特

let _profileImageView = UIImageView()
let _profile_image: UIImage? = 
registration_data["profile_picture"].string!.urlDecode()
_profileImageView.image = _clinic_image
_profileImageView.frame = CGRect(x: 10,
                             y: 10,
                             width: _cellDetailView.frame.width * 0.2,
                             height: _cellDetailView.frame.width * 0.2
)
_cellDetailView.addSubview(_profileImageView)

public func urlDecode() -> UIImage? {
    var img: UIImage = UIImage()
    let base64String = self.replacingOccurrences(of: "}", with: "+")

    let decodeBase64:NSData? =
        NSData(base64Encoded:base64String, options: NSData.Base64DecodingOptions.ignoreUnknownCharacters)

    if let decodeSuccess = decodeBase64 {
        img = UIImage(data: decodeSuccess as Data)!
    }
    return img
}

的Javascript

document.getElementById('profile_photo_preview').src = "data:image/jpg;base64," + decodeURI(encodeURI(jsondata.profile_picture))

我想要做的是使java代码与swift和javascript中的代码相同。

我知道在swift中,如果我删除了NSData.Base64DecodingOptions.ignoreUnknownCharacters选项,它就没有显示图像。

我该怎么做?

请给我一个建议。

1 个答案:

答案 0 :(得分:0)

尝试使用

编码
java.io.ByteArrayOutputStream boas = new java.io.ByteArrayOutputStream();
Bitmap bm = ((android.graphics.drawable.BitmapDrawable) imageview1.getDrawable()).getBitmap();
bm.compress(Bitmap.CompressFormat.JPEG, 100, boas);

byte[] imageBytes = boas.toByteArray();

String img_str = Base64.encodeToString(imageBytes, Base64.DEFAULT);

解码
byte[] decoded1String = Base64.decode(img_str, Base64.DEFAULT); Bitmap decoded1Byte = BitmapFactory.decodeByteArray(decoded1String, 0, decoded1String.length);
imageview1.setImageBitmap(decoded1Byte);