【发布时间】:2018-06-03 07:57:44
【问题描述】:
我对在 Android 中解码图像数据感到困惑。
以下代码无法正常工作。它收到“bad base-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中的一样。
我很快就知道,如果我删除 NSData.Base64DecodingOptions.ignoreUnknownCharacters 选项,它不会显示图像。
我该怎么做?
请给我一个建议。
【问题讨论】:
-
为什么要从 Base64 字符串中删除
\n? -
在swift的“NSData.Base64DecodingOptions.ignoreUnknownCharacters”文档中,似乎去掉了行结束符。
-
在你的 Swift 代码中你不应该使用
NSData,使用它的原生 Swift 对应物,Data。此外,不要强制解开UIImage(data: decodeSuccess as Data)!,因为您可以对字符串进行base64 解码这一事实并不一定意味着它可以表示为UIImage,因此可失败初始化程序仍然可以返回nil。这尤其没有意义,因为无论如何您都返回了可选的UIImage。var img: UIImage = UIImage()也没有任何意义,因为它让你的 func 一直返回非 nilUIImage。 -
感谢您的建议。你一定是对的。但这不是我的工作。 Swift 代码是由另一个人编写的。我的工作是编写与 swift 和 javascript 一样好用的 android 代码。
标签: javascript java android swift decode