public static Bitmap base64StrToBitmap(String base64Str) {
    if (base64Str == null || base64Str.isEmpty()) return null;
    java.util.Base64.Decoder decoder = Base64.getDecoder();
    byte[] decodedBytes = decoder.decode(base64Str);
    return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
}
  • 在 Android 开发中,执行上述代码,传如有效的 Base64 字符串 data:image/png;base64,iVBORw0KGg...,报如下错误
Caused by: java.lang.IllegalArgumentException: Illegal base64 character 3a
问题原因
  1. 3a 是字符 : 的 ASCII 码,出现在 Base64 字符串的 data:image/png;base64, 这部分前缀中

  2. decoder.decode 方法只能解析纯 Base64 部分的数据,即逗号(,)之后的内容

处理策略
  • 在解码前,先检查并移除 Base64 字符串的前缀
public static Bitmap base64StrToBitmap(String base64Str) {
    if (base64Str == null || base64Str.isEmpty()) return null;

    if (base64Str.contains(",")) {
        base64Str = base64Str.split(",")[1];
    }

    java.util.Base64.Decoder decoder = Base64.getDecoder();
    byte[] decodedBytes = decoder.decode(base64Str);
    return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
}
问题观察
  1. 问题复现:传入带前缀的 Base64 字符串,程序报错
String base64Str = "data:image/png;base64,iVBORw0KGg...";

java.util.Base64.Decoder decoder = Base64.getDecoder();

byte[] decodedBytes = decoder.decode(base64Str);

Log.i(TAG, "decodedBytes length: " + decodedBytes.length);

Bitmap bitmap = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);

Log.i(TAG, "bitmap: " + bitmap);
# 输出结果

Caused by: java.lang.IllegalArgumentException: Illegal base64 character 3a
  1. 问题处理:传入不带前缀的 Base64 部分的字符串,程序正常运行
String base64Str = "iVBORw0KGg...";

java.util.Base64.Decoder decoder = Base64.getDecoder();

byte[] decodedBytes = decoder.decode(base64Str);

Log.i(TAG, "decodedBytes length: " + decodedBytes.length);

Bitmap bitmap = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);

Log.i(TAG, "bitmap: " + bitmap);
# 输出结果

decodedBytes length: 36251
bitmap: android.graphics.Bitmap@9a78bbe
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐