Base64与图片相互转换

Quibbler 1月前 106

Base64与图片相互转换


        在Android开发中,我们经常需要用到图片转换为Base64字符串、Base64字符串下载转为图片的场景,以便在网络传输或保存到本地数据库中。Base64是一种用于传输8位字节码的编码方式,通过将二进制数据编码成文本格式,方便传输和存储。



1、图片转Base64

        以Bitmap为例,Android中的大都图片都借助Bitmap来操作。将Bitmap转成Base64字符串:首先将Bitmap转换为字节数组

    //将Bitmap转换为字节数组
    val byteArrayOutputStream: ByteArrayOutputStream = ByteArrayOutputStream()
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream)
    val byteArray: ByteArray = byteArrayOutputStream.toByteArray()

        借助Base64类中的encodeToString(byte[] input, int flags)方法,将字节数组转换为Base64字符串:

    //将字节数组转换为Base64字符串
    val base64String = Base64.encodeToString(byteArray, Base64.DEFAULT)


        可以很方便的定义一个工具方法convertBitmap2Base64(bitmap: Bitmap),实现将图片转为Base64

    fun convertBitmap2Base64(bitmap: Bitmap): String {
        //将Bitmap转换为字节数组
        val byteArrayOutputStream: ByteArrayOutputStream = ByteArrayOutputStream()
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream)
        val byteArray: ByteArray = byteArrayOutputStream.toByteArray()
        //将字节数组转换为Base64字符串
        val base64String = Base64.encodeToString(byteArray, Base64.DEFAULT)
        return base64String
    }

        这是一个在线工具:将图片上传转换为Base64:https://image-to-base64.imageonline.co/



2、Base64转图片

        图片类型的Base64通常会以data:image/开头,紧跟jpeg、png等图片类型,接着 ;base64, 最后一大串是图片数据部分,举个例子:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcH...

        忽略前面的编码头data:image/*;base64,我们只需要解析后面的数据部分,截取Base64字符串数据部分:

    val data: String = base64String.split(",")[1]

        借助Base64类中的decode(String str, int flags)方法,将Base64字符串转换为字节数组:

    val byteArray: ByteArray = Base64.decode(data, Base64.DEFAULT)

        最后利用BitmapFactory直接将字节数组转为Bitmap,关于BitmapFactory详见之前的文章《BitmapFactory详解》

    BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)


        简单三行代码实现将Base64转为图片,同样再定义一个工具方法convertBase642Bitmap(base64String: String)

    fun convertBase642Bitmap(base64String: String): Bitmap {
        val data: String = base64String.split(",")[1]
        val byteArray: ByteArray = Base64.decode(data, Base64.DEFAULT)
        return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)
    }

        推荐一个在线工具:将Base64复制粘贴转换为图片:https://base64.imageonline.co/



往期博客:

        Bitmap位图介绍

        BitmapFactory详解

        

不忘初心的阿甘
最新回复 (0)
    • 安卓笔记本
      2
        登录 注册 QQ
返回
仅供学习交流,切勿用于商业用途。如有错误欢迎指出:fluent0418@gmail.com