博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中Bitmap(图片)和Base64互相转换
阅读量:3564 次
发布时间:2019-05-20

本文共 3074 字,大约阅读时间需要 10 分钟。

前言

图片指的即是 Bitmap形式

图片和Base64互相转换

一:图片转Base64

场景

项目中涉及到本地图片需要上传到服务器,为了节省服务器存储,将图片以Base64的形式存储,此时就需要将选择的图片转换成Base64的字符串结果上传到服务器

实现步骤

步骤一:先将图片转换成字节(流)数组

/**     * 将图片转成byte数组     *     * @param bitmap 图片     * @return 图片的字节数组     */    public static byte[] bitmap2Byte(Bitmap bitmap) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); //把bitmap100%高质量压缩 到 output对象里 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream); return outputStream.toByteArray(); }

步骤二:将图片字节(流)数组转换成Base64(数据流)

/**     * 将图片转成byte数组     *     * @param imageByte 图片     * @return Base64 String     */    public static String byte2Base64(byte[] imageByte) {
if(null == imageByte) return null; return Base64.encodeToString(imageByte, Base64.DEFAULT); }

二:Base64转图片(Bitmap)

场景

项目中涉及到本地图片需要上传到服务器,为了节省服务器存储,将图片以Base64的形式存储,当需要显示的时候若服务端返回的是Base64格式的图片,此时需要将Base64的字符串转换成图片进行展示给用户查看

实现步骤

Base64数据流格式

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAADuklEQVRoQ+2aW+hNWRzHP/+US5FEeZIkcnlR1FAKCUmJkQyN3EZTcsmtyJ1IEQYjNLkkl0gSTzNkFCFeRhLKpMkb8uBBU4q++a1ajrP/Z+991ln7+Nur9svZa/1+38/6rb3W77f3aeE7ay3fGS8lcFuPeBnhMsJtbAbKJd3GAvoVThnhMsLhZ6A7sNjMHgJehXeRbDHmkm4HLDHYvibpBfA7sA/4EAM8FvBcAx2aAPXIwA83GrrRwFMMdGxKkLuAlvmplP0zd2sU8Ghbvj9mVvR5wHXgAHA55/jEYaGBhwBLgXmBhAp4F3A7kL1g5WEfYJldobT5ds4A24An9RqvN8LdgOXAhnqFpBx/FFhfz1GWF1jjVtisd0opNlS3/4E9wDrgY1ajeYAXGmjPrM4C938D7DD41KazAM8w0H6prcfp+B+wETiZxl0a4IkGmpQ0pPETo88/9nxfbc1ZLWClfYtiqA3o40Rrx2ItYKV8gwOKiWFK+bmOyaqtFrBSwu3ADzGUBvDxEFgN/JkX2I2bZTti7wCiGmliDPB3Pc+wP1blnc7erUDHRqrOaPsc8JONCQrsdOj5ELgr4jPqC9b9CrAJ6ArcaCSwUzzKwCcHQ0hnSKBKMd3xo8osCrCTp+WkwmF4Or25e6lW/g3QEvZbdGDnXGWhLvf6JjdZxcDnwH67qtmMCqxnaIunoodXJnapk/idRVRRfe3ZqvQZHVjn3hzgoidqkEX715zQRyyij73xC4CDwM6KSY4OvNlE3bOd+4EnUhubnu+pKcEvWVRvev3H228D7Df581dVYcBO4x9WbKiKcW26RXxkAvgti+gF7/5AYC8woWJM0wE7fWsM4r0nWIWIIt7ffntm0dObStc6A7uBpMehaYEF8NKSg2MekF4LaTdX0+771ru31s52bX5JramBnehrBqekoVqbCawE0tTc3wSwgzxrS1gbnNoIA53WSkQrb31TwE78U/uWlKfWLhRY34yOZ4hOiK4/A6c9Q1GPJfn9BZhvyzMEUJKNO4A2Px17fosO7Jxr49EnlnGBqf+yVaTnv1orDNiJmQQoDUybXSXNj8o/lYFJO7sbVziwEzLMztvZGSOu9FJfDl2NW2t40wA7ob2AVZY5dWhF/XnLsO7XIqxyX5un3rf5OXZVM7XeWubwnTikvYHr9ZD+5+Gadlx9MvEro5B+v7AVE9h3rF1dkdeX/n8bRlfFcFHAMRmbIsIlcKwZKJd0rJkuyk8Z4aJmPpbfMsKxZrooP2WEi5r5WH4/Ab28sT3nmvuDAAAAAElFTkSuQmCC

Base64转图片(Bitmap)代码

/**     * Base64转Bitmap     *     * @param base64 base64数据流     * @return Bitmap 图片     */    private static Bitmap base642Bitmap(String base64) {
byte[] decode = Base64.decode(base64String.split(",")[1],Base64.DEFAULT); Bitmap mBitmap = BitmapFactory.decodeByteArray(decode,0,decode.length); } // 测试使用(上面Base64数据流格式部分粘贴过来的)实际以服务器或自己生成的为准 String base64= "data:image/png;base64,iVBORw0KGgoAA"; // 设置到view上 imageView.setImageBitmap(base642Bitmap(base64));

此处注意: data:image/png;base64, 返回的头编码,若服务器返回带此data:image/*;base64, 类型的头编码时需要在decode的时候将头编码截取掉再进行转换 ,否则将无法还原成功.

ps: data:image/png 此处的png格式是上传时的图片格式 即 data:image/* “*” 代表的是上传是的图片格式(后缀)

去掉头部

// 以","为分隔符获取第二条- 逗号前是头文件,逗号后是图片转换的Base64数据流base64String.split(",")[1]

转载地址:http://mhvrj.baihongyu.com/

你可能感兴趣的文章
泛型详解
查看>>
泛型实现斗地主
查看>>
List集合
查看>>
ArrayList集合,LinkedList集合,Vector集合
查看>>
HashSet集合
查看>>
并发与并行,线程与进程
查看>>
方法引用,通过对象名引用成员变量
查看>>
常用工具类 Math:数学计算 Random:生成伪随机数 SecureRandom:生成安全的随机数 2020-2-13
查看>>
Java的异常Exception 2020-2-13
查看>>
Java标准库定义的常用异常,自定义异常 2020-2-15
查看>>
Java问题百度/Google记录 2020-2-16
查看>>
【PADS9.5】9,对比ECO核心板,Router移动元件后布线消失,Router找不到自动布线策略文件丢失或损坏
查看>>
【STM32+w5500汇总】23,HTTP_Client 连接到ONENET上传了一段数据之后会断开,数据上传格式的设置
查看>>
【STM32+W5500+MQTT】24,所有功能都可以通过API函数的调用来实现;HTTP接入ONENET,API开发手册和打包函数,串口软件HTTP连接服务器上传数据,2018年12月28日
查看>>
【STM32+W5500+HTTPClient】25,路由器DHCP租赁IP时间为2h,NetBios可以很好的解决IP变化的问题,DNS,2018年12月25日
查看>>
【STM32Cube+FreeRTOS 】28,KEIL5的F12不起作用;***JLink Error: Can not read register x while CPU is running
查看>>
【STM32CubeMX+FreeRTOS 】29,prtinf卡死;4任务只运行了3个;W5500联网失败(堆栈不能太大或者太小)
查看>>
【STM32+FreeRTOS +W5500移植要点】30,RTOS中断;从TIM2,主TIM3;RTOS主要用在LCD中;RT-Thread;标志重定义问题 2019年01月22日
查看>>
【STM32+FPGA+FSMC】31,FSMC熟练掌握;KEIL5生成bin文件;SDRAM的使用;IAP检验码 2019年04月10日
查看>>
【IC1】【转 非常好】运算放大器使用的六个经验
查看>>