【问题标题】:Decoding base64 string to image in flutter (Invalid character exception)将base64字符串解码为flutter中的图像(无效字符异常)
【发布时间】:2022-12-16 07:44:52
【问题描述】:

基本上我正在尝试使用 flutter 将 base64 jpeg 图像转换为普通图像

Image.memory(base64Decode(stringBase64))

图像最初是 jp/2 格式,flutter 不支持所以我将 jp/2 base64 字符串转换为 java 中的位图,然后转换为 base64 字符串 jpeg 以便能够使用以下代码在 flutter 中对其进行解码:

public static String encodeToBase64(Bitmap image)
{
    Bitmap immagex=image;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    immagex.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    byte[] b = baos.toByteArray();
    String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);

    return imageEncoded;
}

当我尝试在 flutter 中解码这个 base64 字符串时,我怎么会收到这个错误

无效字符(第 77 个字符) /9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAIQAABtbnRyUkdC

它指向给定行中的最后一个 C。

我似乎不明白问题出在哪里,因为我可以在线将我的 base64 字符串转换为图像,但在 flutter 中它每次都会抛出该异常

【问题讨论】:

标签: flutter image dart base64


【解决方案1】:

非常感谢@Jamesdlin 在 cmets 中提供的解决方案

问题是由于 base64 字符串中的空格,通过使用解决

 base64.decode(photoBase64.replaceAll(RegExp(r's'), '')),

【讨论】:

    【解决方案2】:

    如果您的 URI 包含 RFC-2397 定义的逗号后的数据。 Dart 的 Uri 类是基于 RFC-3986 的,所以你不能使用它。

    用逗号分割字符串并取最后一部分:

    String uri = 'data:image/gif;base64,...';
    Uint8List _bytes = base64.decode(uri.split(',').last);
    

    参考:https://stackoverflow.com/a/59015116/12382178

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多