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详解