现在在Android开发中很少用到Base64的BASE64Encoder及BASE64Decoder,今天在h5中需要将图片的base64数据转化为图片保存到相册,项目中居然找不到BASE64Encoder及BASE64Decoder类,一顿百度方法怎么可以引用,最后发现还是将BASE64Encoder及BASE64Decoder类源码引入最方便;
直接下载源码
补充下:Base64的加密解密BASE64Encoder及BASE64Decoder是sun公司的内部方法,并没有在java api中公开过。在Android项项目中可以引用Base64类,却不能使用加密解密方法,下载上面源码放入项目直接可以引用;
1、将图片bitmap转成base64数据
* 图片bitmap转成base64数据
* @param bitmap
* @return
public String convertIconToString(Bitmap bitmap) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();// outputstream
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] appicon = baos.toByteArray();// 转为byte数组
String bitString = Base64.encodeToString(appicon, Base64.DEFAULT);
return bitString;
2、将图片base64数据转化为bitmap
* 将图片base64数据转化为bitmap
* @param imgBase64
public Bitmap base64ToPicture(String imgBase64) {
byte[] decode = Base64.decode(imgBase64, Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(decode, 0, decode.length);
return bitmap;
3、将图片保存到相册并通知刷新
* 将图片保存到相册并通知刷新
public void savePictureToAlbum(Context mContext, Bitmap bitmap) {
if (bitmap == null) {
return;
// 把文件插入到系统图库
MediaStore.Images.Media.insertImage(mContext.getContentResolver(),
bitmap, null, null);
// 通知图库更新
mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
Uri.parse("file://" + "/sdcard/namecard/")));
4、对图片Base64数据解码并生成图片
* 对图片Base64解码并生成图片
* @param imgStr base64数据
* @param imgFilePath 图片存放地址
* @return
public boolean generateImage(String imgStr, String imgFilePath) {
if (imgStr == null) // 图像数据为空
return false;
BASE64Decoder decoder = new BASE64Decoder();
try {
// Base64解码
byte[] bytes = decoder.decodeBuffer(imgStr);
for (int i = 0; i < bytes.length; ++i) {
if (bytes[i] < 0) {// 调整异常数据
bytes[i] += 256;
// 生成jpeg图片
OutputStream out = new FileOutputStream(imgFilePath);
out.write(bytes);
out.flush();
out.close();
return true;
} catch (Exception e) {
return false;
最后注意点:
含有“data:image/*;base64”的头的编码,在decode或者转化为bitmap的时候就要去掉,否则是无法还原成功的。
如我获取到的图片base64数据就是以data:image/png;base64开头的:
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABkIAAAknCAYAAADGQBGRAAAgAElEQVR4Xly9uZJtW9KltaNvT5zuNplZlQ+GWem8Ac+AglJKoaAhYIYKCgoYImYggIKAYfxd/nnvPX2c6Du+b4zpEacqbu6MOBF7r7XmnD69GT7c59b/+7/9108bvra3+9psHjebrafNDv/Y2d7ZPD4+5bW/d7A5PDzh7zubh4etzdZmd7O7s897N5v7h6vN7d3l5vzLp833b1/4/nFzef55c3d9sbm/udy8Oj7cvDo53mz53vv7zdxwZ3d3c3h8vNnbP+Syu9x5e3N9eb25ub7Z7O7ucf097v24eXx44LNbm52drc3R0QHXOsqzXl9dbm64/t39Lfe/31zdbjZXd4xjZ4f37mzevXu/+eWXX/O3i6srrrHNOPbztw0/+0DbWx3j98urzSXvub76wjW/bc5evdqcnp5uDg4ONvv7+5tbnunq4tKp4d97TNMT77vh/Veb82/n+X54eJjXE8/0dHO1OWBsBycnm92D4802Y7znXncPPB/PcMjvD3jvhtl4fHrc3N3ebG5vrzdPjw8Z7wGPeMjr6emJl+/q1xbX2N7e5d9bXOth88By7TB3W/yOR8r7vO4+z727ud/sPN1uLr5/23z79o11umNeHftWxvz0xIIw50+P25s75u3hcWfz0/tfN+95PT1tbx7uec/mhhtcZy0d/8XXc9b3G+v7ffPAh5SE16/f5PXIux8Yy8393eaa1zbru7t/kHXnht4J6eFyytcW/+a99zfXmwfGfn19ubnlZ9+/y3zvHx5s9hjDPfNxw/o9Pt3zqHxubxd5OeLvJ7xO89rl37t7h8wfcsDrjrn3tXlkULzuWI+ry+95hgOuv8f8O3Sf75g1PuG1hUxs8W9l7+bqZrPFOrnWD7f3jP2Wy/CLe2SRZ37Y4ZpPd5vv379HBk5YS18jK5GL62vWaZt77eU9vl"
处理方法:
if (!TextUtils.isEmpty(imgUrl) && imgUrl.contains(",")) {
//拿到真正的base64数据
String base64Img = imgUrl.split(",")[1];
Over,感觉有用给个赞支持下吧!
现在在Android开发中很少用到Base64的BASE64Encoder及BASE64Decoder,今天在h5中需要将图片的base64数据转化为图片保存到相册,项目中居然找不到BASE64Encoder及BASE64Decoder类,一顿百度方法怎么可以引用,最后发现还是将BASE64Encoder及BASE64Decoder类源码引入最方便;直接下载源码补充下:Base64的加密解...
在项目中需要用到文件传输入,为了传输方便最好的办法是将文件转成base64字串,再将base64字串转成字节流保存在文件了。
不过这种做法的虽然简单,但还是要根据实际需要进行选择;弊端是不能转太大的文件,文件太大会造成效率上的问题。具体多大,笔者没有做深入研究和实际测试。如有兴趣,可以自己深入研究测试。
需要导入 import android.util.Base64;
{CSDN:C
最近做了一个含有二维码的海报到手机相册和分享到微信好友里面,图片是后端生成好的,传过来的格式是base64格式的,因为图片比较大,使用文档的保存和分享并没有什么用,有可能我用的不对吧,反正没有我想要的效果。
如何实现呢?我们先实现保存到手机相册在去实现分享哈。
安卓和ios都可以使用。机型我没有太多的去测试,反正我们公司的ios和安卓都可以。
一.base64图片保存到手机相册(封装)
export function base64DowImg(base64){
// 创建一个Bitmap是原生图片对象
分析思路:因为这里是要获取手势轨迹并画出来,所以肯定是有个Touch事件,然后使用要回显,那肯定是要获取所画的内容,所以想到了canvas这个东西,那这样就选择了自定义控件来做了。
import android.content.Context;
impo...
解决实现安卓[微信]H5长按无法保存和分享base64图片问题
问题产生原因,后台发来图片的base64编码有中有空格存在,而ios的WebView可以自动做处理,android则不能。
**解决方法如下:**将返回的base64编码去空格展示。(responseText代表后端返回的base64)
$("#img_a").attr(“src”,“data:image/png;base64,”+responseText.replace(/(\r\n)|(\n)|(\r)/g, ‘’));
好了这样就解决了!
Bad notification posted from: Couldn't expand RemoteViews for: StatusBarNotification
Hairll:
error: resource android:attr/lStar not found完美解决
shuxx0502: