flutter 处理前置摄像头拍出来的图片翻转问题,截取正方形图片问题

最近在做flutter项目的时候用到前置摄像头,拍摄的时候拍出来的图片是翻转的,找到很多办法都没有解决方案。找来找去就找到了image_editor插件

现在贴上代码:

Future<String> takePicture() async {
    if (controller == null) return "";
    if (!controller!.value.isInitialized) {
      return "null";
    }

    final Directory extDir = await getApplicationDocumentsDirectory();
    final String dirPath = '${extDir.path}/Pictures/flutter_test';

    await Directory(dirPath).create(recursive: true);
    final String filePath = '$dirPath/${timestamp()}.jpg';

    if (controller!.value.isTakingPicture) {
      return "";
    }
    try {
      XFile file = await controller!.takePicture();
      String path = file.path;

      Uint8List? bytes = await file.readAsBytes();
      var image = img.decodeImage(bytes);
      // image?.disposeMethod = DistanceMode.further as img.DisposeMode;
      // image
      if (cameras[cameraDirection].lensDirection == CameraLensDirection.front) {
        /// 前置摄像头处理,后置摄像头一般不会出现问题
        // ImageEditorOption option = ImageEditorOption();
        ImageEditorOption option = ImageEditorOption();
        /// 翻转配置
        option.addOption(FlipOption(horizontal: true));
        bytes = await ImageEditor.editImage(
            image: bytes!, imageEditorOption: option);

        await File(path).delete();
        File(path).writeAsBytesSync(bytes!);
      }
      if (image != null) {
        // await clipImage(file.path, image.width, image.height);
      }

      var offset = (image!.height - image.width) / 2;
      ImageProperties properties =
          await FlutterNativeImage.getImageProperties(path);
      properties.orientation = ImageOrientation.flipHorizontal;

      // File(file.path).writeAsBytesSync(bytes);
      /// 截取图片
      File cropedFile = await FlutterNativeImage.cropImage(
          file.path, 0, offset.round(), image.width, image.width);

      // img.bakeOrientation(image);

      return cropedFile.path;
    } on CameraException catch (e) {
      return e.toString();
    }
    return "";
  }

 记录一下解决方案

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flutter Blue 是一个 Flutter 库,用于在 Flutter 应用连接和操作蓝牙设备。它并不直接处理安卓定位权限问题,但是如果你的 Flutter 应用需要访问蓝牙设备的位置信息,那么在使用 Flutter Blue 之前,你应该先在应用处理安卓定位权限问题。 要获取安卓设备的定位权限,你需要在应用的 AndroidManifest.xml 文件声明 ACCESS_COARSE_LOCATION 或 ACCESS_FINE_LOCATION 权限,然后在代码请求用户授予权限。你可以使用 Flutter 插件,如 flutter_permission_handler 来简化权限请求流程。 例如,下面是使用 flutter_permission_handler 插件请求安卓定位权限的示例代码: ``` import 'package:flutter/material.dart'; import 'package:flutter_permission_handler/flutter_permission_handler.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: HomePage(), ); } } class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { @override Widget build(BuildContext context) { return Scaffold( body: Center( child: RaisedButton( onPressed: _requestLocationPermission, child: Text('请求定位权限'), ), ), ); } void _requestLocationPermission() async { PermissionStatus permission = await PermissionHandler() .checkPermissionStatus(PermissionGroup.location); if (permission != PermissionStatus.granted) { Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler() .requestPermissions([PermissionGroup.location]); if (permissions[PermissionGroup.location] == Per
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值