将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');
}
答案 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;
}
需要存储访问权限,请不要忘记。