如何将图像转换为文件?

时间:2020-01-22 04:23:29

标签: image flutter dart

Image保存到不是从图库或照相机中获取图像的设备的正确方法是什么?

在PageA中,有一个摄像头按钮,允许用户捕获图像。捕获图像后,它将转到PageB(EditImagePage)。用户完成图像编辑后,它将返回到PageA,并将图像保存到设备。

PageA

  @override
  userImage(File images) async {  // when user has captured image, it will run this code
    if (images != null) {
      Image image = await Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => EditImagePage(images.path), // go to edit image page
          ));
         // convert image to File
         // call copyImage function
    } else {

    }
  }

PageB

 IconButton(
          icon: Icon(Icons.check),
          onPressed: () async {
            Uint8List bytes = await _controller.exportAsPNGBytes();
            var image = Image.memory(bytes);
            return Navigator.pop(context, image);  // bring Image back to PageA
          }),

我有此代码用于将映像保存到设备。如何将其更改为File?

Future<File> copyImage(File image) async {
        var savedDir = await getApplicationDocumentsDirectory();
        String appDocPath = savedDir.path;
        var fileName = FileUtils.basename(image.path);
        return await image.copy('$appDocPath/' + '$fileName');
      }

1 个答案:

答案 0 :(得分:1)

您可以将图像存储到设备内部存储中,将图像,资产图像转换为文件并存储到设备存储中。

首先获取图像路径,然后为图像创建file和writeAsBytes。

您可以编写如下代码:

import 'dart:async';
import 'dart:io';

import 'package:flutter/services.dart' show rootServices;
import 'package:path_provider/path_provider.dart';

Future<File> convertImageToFile(String imagePath) async {
  final byteData = await rootServices.load('assets/$imagePath');

  final file = File('${(await getTemporaryDirectory()).path}/$imagePath');
  await file.writeAsBytes(byteData.buffer.asUint8List(byteData.offsetInBytes, byteData.lengthInBytes));

  return file;
}

需要存储访问权限,请不要忘记。