现在在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();// outputstreambitmap.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转化,并保存相册相关推荐

  1. android水印控件,Android图片添加文字水印并保存水印文字图片到指定文件

    Android图片添加文字水印并保存水印文字图片到指定文件package zhangphil.test;import android.graphics.Bitmap;import android.gr ...

  2. Android图片转base64问题记录

    1.编码标准有以下几种: CRLF Win风格的换行符,意思就是使用CR和LF这一对作为一行的结尾而不是Unix风格的LF. CRLF是Carriage-Return Line-Feed的缩写,意思是 ...

  3. Android 图片选择对话框,通过本地相册或照相机获得图片,可单选或多选,单选可设置是否裁剪

    AndroidPickPhotoDialog 项目地址: wanliyang1990/AndroidPickPhotoDialog 简介:Android 图片选择对话框,通过本地相册或照相机获得图片, ...

  4. php网址图片怎么转based4,Ionic4 Base64 转化成图片插件-Base64 转化成图片Base64 To Gallery - Ionic Native...

    This plugin allows you to save base64 data as a png image into the device Ionic Base64 转化成图片Base64 T ...

  5. android 图片转base64内存变大了_开发者最喜爱的图片编码格式:opencv编码,解码,显示base64图片...

    由于图片格式尺寸较大,在互联网上若想传递一张图片,往往会 把图片进行格式转换,然后进行数据传输,图片格式往往会转换为base64编码图片 base64编码图片 BASE64编码表 base64编码 是 ...

  6. Android图片的Base64编码与解码

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较 ...

  7. android好用拍照框架,Github挺好用的android图片选择框架(拍照+从相册)

    项目要用到多图片上传选择和展示的功能,在github找到了个效果看起来不错的demo,悲剧的是下载完zip后浏览器卡死了,没记住地址,如有侵权请联系... 话不多少,先看效果: 这个库叫做 Photo ...

  8. Github挺好用的android图片选择框架(拍照+从相册)

    项目要用到多图片上传选择和展示的功能,在github找到了个效果看起来不错的demo,悲剧的是下载完zip后浏览器卡死了,没记住地址,如有侵权请联系... 话不多少,先看效果: 这个库叫做 Photo ...

  9. Android头像上传--图片转base64,后台接收到的总是null问题

    图片转base64,后台接到为null问题 项目中,在使用头像上传的时候,将图片转为base64,后台总是收到的base64字符串是null.原以为是图片未压缩,导致图片过大,超过了Tomcat配置的 ...

最新文章

  1. 第四周项目四-程序分析(1)
  2. 剑指offer07.重建二叉树
  3. ECSHOP模板设置只有登录用户才能查看商品详情内容
  4. MySQL_Ubuntu安装
  5. 利用js脚本自动批量删除微博内容
  6. SQL Server 双机热备份-实现主从复制
  7. java模板beetl引擎,Beetl java模板引擎
  8. c语言英文数字变数字,[求助]阿拉伯数字变英文数字遇到的问题
  9. C++-如何排查内存写坏
  10. 如何用计算机制作统计图,如何在EXCEL里做条形统计图?
  11. name = STXingkai/OT, rootname = STXingkai/OT LaTex Package fontspec Error报错解决
  12. QT:为图片加当前系统时间水印
  13. 我曾被stormzhang拉黑过
  14. poi操作word docx文档内容替换详解
  15. vsix 文件手动安装办法
  16. VMware Workstation Pro虚拟机命令行安装图形界面
  17. Unity-动画-动画回调函数接口StateMachineBehaviour
  18. 服务器无法替换dll文件,教你如何彻底删除服务器上的残留dll文件
  19. 在虚拟机中,Elastix2.5 安装配置指南
  20. 萤石推出宝宝看护摄像机,科技育儿赋能世代

热门文章

  1. 一起变装吧服务器维护,2016年12月29日服务器停机维护公告
  2. 【机器学习】人与机器学习
  3. QBot:基于SmartQQ协议的QQ机器人
  4. 条码标签制作软件打印入场券抽奖券上的条码流水号
  5. html中b标签去加粗,html中b加粗标签的详细介绍
  6. 青春的寄语,我的大三生活。
  7. from用法 prepare_转MYSQL PREPARE用法详细解释
  8. 民族证券CIO马光悌:质量管理站得高才行得远
  9. 水果音乐制作软件杂项设置页使用教程
  10. 用王者荣耀来理解java设计模式之责任链模式