繁体   English   中英

将base64字符串解码为flutter中的图像(无效字符异常)

[英]Decoding base64 string to image in flutter (Invalid character exception)

基本上我正在尝试使用 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 中它每次都会抛出该异常

Image.network 仅采用无符号 8 位 int

您可以像这样将 base 64 valie 转换为 uint8 列表。 在解码之前也对其进行归一化

Uint8List bytes = BASE64.decode(BASE64.normalize(imageEncoded));

将此字节传递给 image.network

非常感谢@Jamesdlin 在评论中给出的解决方案

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

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

如果您的 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM