首页 > 解决方案 > 将多图像选择器与图像裁剪器一起使用

问题描述

我正在使用 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));
}

标签: flutterimage-processingdart

解决方案


感谢@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)));
}

推荐阅读