flutter - 将多图像选择器与图像裁剪器一起使用
问题描述
我正在使用 Multi_Image_Picker 插件来获取多个图像。Multi_Image_PickerList<Asset>
在选择多个图像时返回一个文件。我如何能够将 Multi_Image_Picker 与只接受图像路径的 Image_Cropper 一起使用?由于它是资产类型,因此我无法获取图像的路径。这是我为实现它所做的尝试:
我可以得到图像的路径:
final filePath = await FlutterAbsolutePath.getAbsolutePath(assets.identifier);
这可行,但是flutter_absolute_path插件要求最低android sdk为19。是否有另一个可以在不将资产文件转换为图像文件的情况下裁剪图像?
我尝试将资产转换为图像文件:
List<File> images = List<File>();
Directory tempDir = await getTemporaryDirectory();
final path =tempDir.path;
for (int i = 0; i < assets.length; i++) {
images.add(await ProcessImage.assetToFile(
path: "$path/images/img$i",
data: await assets[i].getByteData(quality: 90)));
}
资产文件():
static Future<File> assetToFile({ByteData data, String path})async {
return File(path).writeAsBytes(
data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
}
解决方案
感谢@pskink 的回答。事实证明,您必须将获得的资产字节数据作为文件保存到临时文件夹中,并在您的裁剪器中使用它。
final temp = await Directory.systemTemp.createTemp();
List<File> images = List<File>();
for (int i = 0; i < assets.length; i++) {
final data = await assets[i].getByteData();
images.add(await File('${temp.path}/img$i').writeAsBytes(
data.buffer.asUint8List(
data.offsetInBytes, data.lengthInBytes)));
}
推荐阅读
- html - 如何使用 css 和 html 制作页脚网格?
- powershell - “cd ..”在powershell中是什么意思?
- c# - mvc中的外键问题?
- sql - ORA-01422: 精确提取返回的行数超过请求的行数)显示为触发器
- django - 在同一模型上应用 union() 无法识别使用 GenericRelation 的排序
- powershell - 获取真实的exe位置路径
- crash - iOS 13 TTS 崩溃 - 无法找到资源 `lang'[kLanguage] - (AVSpeechSynthesisVoice, AVSpeechUtterance)
- c - 将用户输入作为历史记录返回列表
- javascript - Mongodb $and 运算符无法按预期工作
- php - 类 Illuminate\Routing\Redirector 的对象无法转换为 int laravel