如何使用 Flutter 将图像保存到照片库?
How to save an image to the photo gallery using Flutter?
我的 flutter 应用使用 camera
package to take a photo, which I save to the application's data directory (obtained from path_provider
和 getApplicationDocumentsDirectory()
函数)。
如何将此图像文件保存到 phone 照片库中?我注意到 image_picker
包允许 阅读 来自画廊,但我该如何写信给它?
不幸的是,flutter 目前没有公开该功能。不过,它确实看起来像是插件的候选者。
如果你有足够的动力,你可以使用 platform channels 从 flutter 到原生 Android(和 iOS)代码,你可以从中获得完整的画廊访问权限.如果你把它做成一个插件并发布它,奖励积分!
我做了这个插件。喜欢的可以试试
https://pub.dartlang.org/packages/image_downloader#-readme-tab-
更新
我会解释如何使用。
将此添加到您的包的 pubspec.yaml 文件中:
dependencies:
image_downloader: ^0.9.0
之后,为每个设备指定权限。
只需写入以下内容即可保存图像。
ImageDownloader.downloadImage(url);
有一个插件支持这个。
https://pub.dev/packages/image_gallery_saver
我已经测试过了,它工作正常。
https://pub.dev/packages/gallery_saver
此插件将图像和视频保存到 gallery/photos。
您只需要向它提供您从相机(甚至网络 url 获得的临时文件的路径,它也可以工作):
GallerySaver.saveVideo(recordedVideo.path);
GallerySaver.saveImage(recordedImage.path);
我一直在寻找这个答案,但幸运的是,我可以使用以下代码将文件保存到图库:
ByteData byteData = await rootBundle.load('assets/images/example.png');
File file = await File('/storage/emulated/0/Android/media/<your app package>/<App title/folder>/example.png').create(recursive: true);
await MediaStore.saveImage(byteData.buffer.asUint8List(byteData.offsetInBytes, byteData.lengthInBytes));
这会将您的图像保存到设备和设备图库中。
这仅适用于 Android
谢谢。
有一个包,您可以通过提供图像或视频的路径来更新图库。与其他软件包相比,它的优势在于您甚至可以将文件保存在 SD 卡中。当您尝试将已保存到设备的媒体添加到图库时,该文件不会保存两次。
这是包的 link。 https://pub.dev/packages/media_scanner
MediaScanner.loadMedia("Path to the file or directory"); // This will update the gallery
这只是Android
我不得不进行大量搜索,但我找到了一个非常有用的解决方案,可以将图像保存在单元格 phone 的照片库中,并获得绝对路径以按您想要的方式使用它。
对于这个例子,我使用了从照片库中保存图像获得的结果,但是它也可以读取其他文件,显然做出你认为必要的更改,我希望它能帮助你
uri_to_file
image_gallery_saver
import 'dart:io';
import 'package:image_gallery_saver/image_gallery_saver.dart';
import 'package:uri_to_file/uri_to_file.dart';
Future<File> saveImage(File image, String identifier) async {
try {
var result = await
ImageGallerySaver.saveImage(image.readAsBytesSync(),
quality: 60, name: identifier +
"-${DateTime.now().toIso8601String()}");
print(result);
File file = await toFile(Uri.parse(result['filePath']));
print(file);
return file;
} catch (e) {
print(e);
return new File('assets/img/default-img.jpg');
}
}
// example
saveImage(File("path/image/img223.jpg"),"img-test");
// or
有一个解决方法,我通过指定“/storage/emulated/0/DCIM/YOUR_FOLDER/YOUR_FILE_NAME”的路径使它起作用,然后它将保存在支持包目录之外,然后图像出现在图库中。
您可以使用任何图像保护程序插件,只需提供该硬编码路径即可。
我的 flutter 应用使用 camera
package to take a photo, which I save to the application's data directory (obtained from path_provider
和 getApplicationDocumentsDirectory()
函数)。
如何将此图像文件保存到 phone 照片库中?我注意到 image_picker
包允许 阅读 来自画廊,但我该如何写信给它?
不幸的是,flutter 目前没有公开该功能。不过,它确实看起来像是插件的候选者。
如果你有足够的动力,你可以使用 platform channels 从 flutter 到原生 Android(和 iOS)代码,你可以从中获得完整的画廊访问权限.如果你把它做成一个插件并发布它,奖励积分!
我做了这个插件。喜欢的可以试试
https://pub.dartlang.org/packages/image_downloader#-readme-tab-
更新
我会解释如何使用。
将此添加到您的包的 pubspec.yaml 文件中:
dependencies:
image_downloader: ^0.9.0
之后,为每个设备指定权限。
只需写入以下内容即可保存图像。
ImageDownloader.downloadImage(url);
有一个插件支持这个。
https://pub.dev/packages/image_gallery_saver
我已经测试过了,它工作正常。
https://pub.dev/packages/gallery_saver
此插件将图像和视频保存到 gallery/photos。
您只需要向它提供您从相机(甚至网络 url 获得的临时文件的路径,它也可以工作):
GallerySaver.saveVideo(recordedVideo.path);
GallerySaver.saveImage(recordedImage.path);
我一直在寻找这个答案,但幸运的是,我可以使用以下代码将文件保存到图库:
ByteData byteData = await rootBundle.load('assets/images/example.png');
File file = await File('/storage/emulated/0/Android/media/<your app package>/<App title/folder>/example.png').create(recursive: true);
await MediaStore.saveImage(byteData.buffer.asUint8List(byteData.offsetInBytes, byteData.lengthInBytes));
这会将您的图像保存到设备和设备图库中。
这仅适用于 Android
谢谢。
有一个包,您可以通过提供图像或视频的路径来更新图库。与其他软件包相比,它的优势在于您甚至可以将文件保存在 SD 卡中。当您尝试将已保存到设备的媒体添加到图库时,该文件不会保存两次。 这是包的 link。 https://pub.dev/packages/media_scanner
MediaScanner.loadMedia("Path to the file or directory"); // This will update the gallery
这只是Android
我不得不进行大量搜索,但我找到了一个非常有用的解决方案,可以将图像保存在单元格 phone 的照片库中,并获得绝对路径以按您想要的方式使用它。 对于这个例子,我使用了从照片库中保存图像获得的结果,但是它也可以读取其他文件,显然做出你认为必要的更改,我希望它能帮助你 uri_to_file image_gallery_saver
import 'dart:io';
import 'package:image_gallery_saver/image_gallery_saver.dart';
import 'package:uri_to_file/uri_to_file.dart';
Future<File> saveImage(File image, String identifier) async {
try {
var result = await
ImageGallerySaver.saveImage(image.readAsBytesSync(),
quality: 60, name: identifier +
"-${DateTime.now().toIso8601String()}");
print(result);
File file = await toFile(Uri.parse(result['filePath']));
print(file);
return file;
} catch (e) {
print(e);
return new File('assets/img/default-img.jpg');
}
}
// example
saveImage(File("path/image/img223.jpg"),"img-test");
// or
有一个解决方法,我通过指定“/storage/emulated/0/DCIM/YOUR_FOLDER/YOUR_FILE_NAME”的路径使它起作用,然后它将保存在支持包目录之外,然后图像出现在图库中。 您可以使用任何图像保护程序插件,只需提供该硬编码路径即可。