如何将图像转换为字节并再次将其转换为抖动图像?

时间:2020-04-29 14:27:18

标签: image flutter base64

我正在尝试使用 image_picker 插件。我可以使用此插件将图像获取为文件。我需要将此图像转换为字节并发送到api。因此,我尝试使用dart:convert将图像转换为字节字符串。现在,当我解码时,我得到一个 Uint8List 类型。如何将其转换为文件并显示在 Image.file()中。我不能从这里继续。有人可以帮我吗?

考虑到我正在从api响应中获取此decodedBytes,如何将它们转换为在“图像”小部件中显示

这是我到目前为止尝试过的代码。

var image = await ImagePicker.pickImage(source: ImageSource.camera);

    setState(() {
      imageURI = image;
      final bytes = image.readAsBytesSync();

      String img64 = base64Encode(bytes);
      print(bytes);
      print(img64);

      final decodedBytes = base64Decode(img64);
      print(decodedBytes);
      //consider i am getting this decodedBytes i am getting from a api response, how can i convert them to display in a Image widget 
    });

我使用 writeAsBytesSync()

遇到此错误
Unhandled Exception: FileSystemException: Cannot open file, path = 'decodedimg.png'

1 个答案:

答案 0 :(得分:2)

您收到此错误,因为您无法写入应用程序沙箱中的任何任意位置。您可以使用path_provider查找临时目录。

但是在您的情况下,只需使用image对象,pickImage已经返回了File对象,因此只需使用Image.file(image)

如果要将base64解码为临时目录,可以使用:

import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as path;

Future<File> writeImageTemp(String base64Image, String imageName) async {
  final dir = await getTemporaryDirectory();
  await dir.create(recursive: true);
  final tempFile = File(path.join(dir.path, imageName));
  await tempFile.writeAsBytes(base64.decode(base64Image));
  return tempFile;
}

使用pubspec.yaml:

dependencies:
  path: ^1.6.0
  path_provider: ^1.6.7