我正在try 在Flutter 中压缩图像,并将其zoom 为特定格式(16/9) 对于压缩,我使用库FlutterImageCompress. 然而,这给了我一个零的返回值. 文件中写道: "有时,压缩会返回NULL.您应该判断是否可以读/写该文件,并且目标文件的父文件夹必须存在.

例如,使用PATH_PROVIDER插件访问一些应用程序文件夹,并使用权限插件请求在Android/iOS上访问SD卡的权限."https://pub.dev/packages/flutter_image_compress#troubleshooting

因此,我try 在压缩之前创建文件夹.然后,我的代码如下所示:

final appDocDir = await getApplicationDocumentsDirectory();
        pickedFile = File(filepath); //retrieved with filepicker

        Directory tempDir = Directory('${appDocDir.path}/temp/');
        if (!tempDir.existsSync()) {
          tempDir.createSync(recursive: true);
        }

        pickedFile = await FlutterImageCompress.compressAndGetFile(
          pickedFile.absolute.path,
          "${appDocDir.absolute}/temp.jpg",
          quality: 5,
        );
        File file = File("${appDocDir.absolute}/temp.jpg");
        print("File Size: ${file.lengthSync()}");

我的目标是文件文件在最后包含压缩文件,这样我就可以上传它.

我已经try 创建手动写入结果的文件夹,但这并没有改变任何事情.我也不关心图像在压缩后会在哪里结束,因为文件上传后会再次删除.

推荐答案

如本解决方案中所示,您也可以实现它.https://stackoverflow.com/a/64690920

您只需将新文件保存在与要压缩的原始文件相同的路径上.这样,您就可以确保您在此位置具有写入权限.

您的代码的整个过程如下所示:

final appDocDir = await getApplicationDocumentsDirectory();
        pickedFile = File(ref.watch(imageProvider).image!.path!);
        
        final filePath = pickedFile.absolute.path;
        final lastIndex = filePath.lastIndexOf(new RegExp(r'.jp'));
        final splitted = filePath.substring(0, (lastIndex));
        final outPath = "${splitted}_out${filePath.substring(lastIndex)}";

        await FlutterImageCompress.compressAndGetFile(
          pickedFile.absolute.path,
          outPath,
          quality: 5,
        );
        File file = File(outPath);
        print("File Size: ${file.lengthSync()}");

Flutter相关问答推荐

在Riverpod ConsumerWidget中使用文本编辑控制器

使用自定义控制器将项插入到ListView中时行为不正确

如何组合匹配器

如何在容器小部件中的图像旁边添加文本?

BoxConstraints强制使用无限宽度(列中的Listview)

脚本具有不受支持的MIME类型(';Text/html';).(messaging/failed-service-worker-registration)

Android Studio扩展控件上未加载Google map

为什么FloatingActionButton未显示

参数类型void Function()无法分配给参数类型void Function(LongPressEndDetails)?

如何制作flutter showDialog、AlertDialog屏障 colored颜色 渐变

如何在 flutter 中使用带有有效负载数据的重定向来执行 firebase 推送通知.?

访问 AsyncSnapshot 中的嵌套属性

无法将参数类型Future Function(String?)分配给参数类型void Function(NotificationResponse)?

如何在手势检测器中获得涟漪效应

如何使用 Row 和 Column 制作 L 形布局?

为什么容器会填满整个空间?

使用 Firebase/Flutter 进行应用判断 - 100% 无效请求

在自动完成中 Select 值后保持键盘焦点

如何从 Flutter 中的列表中提取 JSON?

我想将我的模型类对象发送到下一个屏幕之前我这样做首先我在第二个屏幕中声明对象