【Flutter】使用image_gallery_saver保存图片


图片保存:image_gallery_saver: https://pub.flutter-io.cn/packages/image_gallery_saver

代码示例:

    // 申请权限
    await PermissionHandler().requestPermissions([PermissionGroup.storage]);
    // 申请结果
    PermissionStatus permission = await PermissionHandler()
        .checkPermissionStatus(PermissionGroup.storage);
    if (permission == PermissionStatus.granted) {
      var response = await Dio()
          .get(qrcode, options: Options(responseType: ResponseType.bytes));
      final result = await ImageGallerySaver.saveImage(
          Uint8List.fromList(response.data),
          quality: 100,
          name: "gongzhonghao-qrcode");

      if (Platform.isIOS) {
        if (result) {
          EasyLoading.showToast('保存成功');
        } else {
          EasyLoading.showToast('保存失败');
        }
      } else {
        if (result != null) {
          EasyLoading.showToast('保存成功');
        } else {
          EasyLoading.showToast('保存失败');
        }
      }
    } else {
      EasyLoading.showToast('权限申请被拒绝');
    }

遇见错误:安卓保存图片失败

W/System.err( 1511): java.io.FileNotFoundException: /storage/emulated/0/APP-Name/gongzhonghao-qrcode.jpg: open failed: ENOENT (No such file or directory)
W/System.err( 1511): 	at libcore.io.IoBridge.open(IoBridge.java:496)
W/System.err( 1511): 	at java.io.FileOutputStream.<init>(FileOutputStream.java:235)
W/System.err( 1511): 	at java.io.FileOutputStream.<init>(FileOutputStream.java:186)
W/System.err( 1511): 	at com.example.imagegallerysaver.ImageGallerySaverPlugin.saveImageToGallery(ImageGallerySaverPlugin.kt:64)
W/System.err( 1511): 	at com.example.imagegallerysaver.ImageGallerySaverPlugin.onMethodCall(ImageGallerySaverPlugin.kt:36)
W/System.err( 1511): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:226)
W/System.err( 1511): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
W/System.err( 1511): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:631)
W/System.err( 1511): 	at android.os.MessageQueue.nativePollOnce(Native Method)
W/System.err( 1511): 	at android.os.MessageQueue.next(MessageQueue.java:363)
W/System.err( 1511): 	at android.os.Looper.loop(Looper.java:176)
W/System.err( 1511): 	at android.app.ActivityThread.main(ActivityThread.java:8347)
W/System.err( 1511): 	at java.lang.reflect.Method.invoke(Native Method)
W/System.err( 1511): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
W/System.err( 1511): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
W/System.err( 1511): Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
W/System.err( 1511): 	at libcore.io.Linux.open(Native Method)
W/System.err( 1511): 	at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
W/System.err( 1511): 	at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252)
W/System.err( 1511): 	at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
W/System.err( 1511): 	at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:8196)
W/System.err( 1511): 	at libcore.io.IoBridge.open(IoBridge.java:482)
W/System.err( 1511): 	... 14 more

解决方案:

  • 定位到Android 9(API级别28)或更低。
  • 如果您定位到Android 10(API级别29)或更高版本,请在应用的清单文件中将requestLegacyExternalStorage的值设置为true
    添加权限
    <application
        android:requestLegacyExternalStorage = "true">
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
flutter_image_editor是一个用于在Flutter应用程序中编辑图像的库。它提供了一组功能强大的图像编辑工具,可以使用它们来裁剪、旋转、调整尺寸和应用滤镜等操作。 首先,在使用flutter_image_editor之前,我们需要将其添加为项目的依赖项。我们可以在pubspec.yaml文件中添加以下行: ``` dependencies: flutter_image_editor: ^版本号 ``` 然后运行`flutter packages get`来获取库。 一旦我们添加了flutter_image_editor库,我们就可以开始使用它了。首先,我们需要导入库: ```dart import 'package:flutter_image_editor/flutter_image_editor.dart'; ``` 然后,我们可以使用ImageEditor类的实例来编辑图像。以下是使用flutter_image_editor的一些常见功能: 1. 裁剪图像: ```dart final result = await ImageEditor.cropImage( file.path, startX: 0, startY: 0, width: 200, height: 200, ); ``` 2. 旋转图像: ```dart final result = await ImageEditor.rotateImage( 90, // 旋转角度 file.path, ); ``` 3. 调整图像尺寸: ```dart final result = await ImageEditor.resizeImage( 500, // 新的宽度 500, // 新的高度 file.path, ); ``` 4. 应用滤镜: ```dart final result = await ImageEditor.applyFilter( ImageFilter.sepia, // 滤镜类型 file.path, ); ``` 这些只是flutter_image_editor支持的一些功能示例。根据您的需求,您还可以使用其他功能来编辑和处理图像。 最后,根据每种编辑操作的返回类型,您可以在Flutter应用程序中根据需要使用编辑后的图像结果。例如,您可以将它们显示在Image widget中,保存到设备上的文件中,或将其上传到服务器等等。 总结而言,flutter_image_editor是一个非常方便和强大的图像编辑库,它可以帮助我们在Flutter应用程序中轻松地实现各种图像编辑操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值