You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio获取用户图片编码存数据库及Bitmap引用问题咨询

实现方案

1. 核心问题原因

你看到的android.graphics.Bitmap@324a72b是Bitmap对象默认的toString()输出,仅代表对象在内存中的地址,并非实际的图片内容,你需要将Bitmap对象序列化为可传输的二进制数据再处理。

2. Bitmap转可传输数据的实现

你需要在onActivityResult拿到压缩后的Bitmap后,增加两步处理:先将Bitmap压缩为字节数组,再编码为Base64字符串(JSON无法直接传输二进制数据,Base64编码后可直接作为JSON字段传输)。

修改后的onActivityResult代码如下:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == ResultLoadImage){
        if (resultCode == Activity.RESULT_OK){
            val imageUri = data!!.getData()
            var temp = MediaStore.Images.Media.getBitmap(this.contentResolver, imageUri)
            bitmap = getResizedBitmap(temp!!, maxImageSize)
            // 这里建议直接用压缩后的bitmap展示,和上传内容一致
            b.imageView.setImageBitmap(bitmap)
            
            // 新增:Bitmap转字节数组,再转Base64字符串
            val baos = ByteArrayOutputStream()
            // 可根据需求选择压缩格式:JPEG/PNG/WEBP,第二个参数为压缩质量0-100,数值越高画质越高体积越大
            bitmap.compress(Bitmap.CompressFormat.JPEG, 80, baos)
            val imageBytes = baos.toByteArray()
            val imageBase64Str = Base64.encodeToString(imageBytes, Base64.NO_WRAP)
        }
    }
}

之后你可以把imageBase64Str和标题、描述字段一起组装到JSON对象中,发给后端即可。

3. 后端存储与前端拉取展示实现

  • 后端收到Base64字符串后,可以直接存入数据库的BLOB字段,小项目也可以直接存为TEXT类型字段
  • 前端拉取到数据后,将Base64字符串解码为字节数组再转Bitmap即可展示,代码如下:
// 从接口返回的JSON中拿到图片的Base64字符串
val imageBase64 = jsonObject.getString("image")
// 解码为字节数组
val imageBytes = Base64.decode(imageBase64, Base64.NO_WRAP)
// 转Bitmap
val bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
// 设置到ImageView展示
b.imageView.setImageBitmap(bitmap)

注意事项

  • 压缩质量可根据业务需求调整,如果需要保留图片透明度的话选择PNG格式压缩
  • 压缩前已经做了尺寸压缩,避免Base64字符串过长导致接口传输、数据库存储压力过大
  • 不用的Bitmap及时调用recycle()释放,避免内存溢出

内容的提问来源于stack exchange,提问作者Nevar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:36:00