如何将图像转换为文件?

4

在没有从相册或相机中取出图像的情况下,正确的保存 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 {

    }
  }

页面B

 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
          }),

我有这段用于将图像保存到设备的代码。如何将它改为保存文件?

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个回答

2

您可以将图像存储到设备的内部存储器中,将图像转换为文件并存储到设备存储器中,还可以将assets中的图像转换为文件并存储到设备存储器中。

首先获取您的图像路径,将其转换为文件并使用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;
}

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


这并没有回答想要将图像转换为文件的问题,而是将imagePath转换为File的问题 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接