最近项目中有一个需求,获取服务端的图片Base64码转回图片后保存至相册,这么简单的事还用得着我动手吗,当然是使用ctrl c v大法了,下面看看代码:
public void savePicture(String courseStr){
SavePictureBean savePictureBean = new Gson().fromJson(courseStr, SavePictureBean.class);
String imgPath = savePictureBean.getImgSource();
Bitmap bitmap = ImageBase64Utils.base64ToBitmap(imgPath);
boolean b = SaveBitmapUtil.saveImageToGallery(mActivity, bitmap, null);
if (b) {
mActivity.toast("保存成功");
} else {
mActivity.toast("保存失败");
}
}
imgSource就是获取到的Base64串,这也太简单了,马上开始测试一下,
结果就崩了。。。。。。。。。。
崩的代码定位到这里:
/**
* base64转bitmap
*
* @param @param base64String
* @param @return 设定文件
* @return Bitmap 返回类型
* @throws
* @Title: base64ToBitmap
*/
public static Bitmap base64ToBitmap(String base64String) {
byte[] decode = Base64.decode(base64String, Base64.NO_WRAP);
Bitmap bitmap = BitmapFactory.decodeByteArray(decode, 0, decode.length);
return bitmap;
}
提示Base64码不正确,但我在网页上转是好好的,所以不可能不正确。后来发现传过来的Base64码带了格式,像这样: data:image/jpeg;base64,hshshsbsbshshyzgzgzv......
,前面是编码格式,后面是编码 ,而网页上是需要格式的 ,但在手机里就不需要格式, 所以就崩了。。。
竟然还有这种事,只好自己把前面的格式去掉了:
public void savePicture(String courseStr){
SavePictureBean savePictureBean = new Gson().fromJson(courseStr, SavePictureBean.class);
String imgPath = savePictureBean.getImgSource();
Bitmap bitmap = ImageBase64Utils.base64ToBitmap(imgPath.substring(imgPath.indexOf(",")+1));
boolean b = SaveBitmapUtil.saveImageToGallery(mActivity, bitmap, null);
if (b) {
mActivity.toast("保存成功");
} else {
mActivity.toast("保存失败");
}
}
这样就可以了。。
记录
网友评论