Flutter中如何将CameraController的XFile转为Image类型?

How to convert CameraController's XFile to Image type in Flutter?

Flutter 的 CameraController 有一个 takePicture() 从相机拍照的方法,它给出 Future<XFile> 类型,所以我需要将它从 Image 类型转换为 Image 类型=14=] 包以使用另一种方法手动裁剪它。

如何转换?

这是我找到的解决方案:

import 'dart:io';
import 'package:image/image.dart' as img;

...

CameraController _controller;

...

final xFile = await _controller.takePicture();
final path = xFile.path;
final bytes = await File(path).readAsBytes();
final img.Image image = img.decodeImage(bytes);

您可以使用 .path 属性 从 XFlie 获取路径,然后使用

显示图像
Container(
  child: Image.file(File(XFile.path)),
);

与采用的答案不同的两种解决方案:

  1. 使用cross_file_image依赖。

    import 'package:cross_file_image/cross_file_image.dart';
    
    Image(image: XFileImage(xfile));
    
  2. 调用readAsBytes方法。

    import 'dart:typed_data';
    
    import 'package:flutter/cupertino.dart';
    import 'package:cross_file/cross_file.dart';
    
    Future<Image> xFileToImage(XFile xFile) async {
      final Uint8List bytes = await xFile.readAsBytes();
      return Image.memory(bytes).image;
    }
    
    Image(image: await xFileToImage(xFile));