Flutter相机遮罩插件mask_for_camera_h的使用

Flutter相机遮罩插件mask_for_camera_h的使用

插件简介

此插件用于从相机视图中裁剪出图像的一部分。该插件支持Android和iOS平台,并且已经更新以兼容image 4.0.17包。

开始使用

示例效果

示例应用

基本用法

使用虚线边框

MaskForCameraView(
  visiblePopButton: false, // 是否显示返回按钮
  onTake: (MaskForCameraViewResult res) {
    // res.croppedImage 是裁剪后的图像,您可以使用它。
  }
);

使用实线边框

MaskForCameraView(
  visiblePopButton: false,
  appBarColor: Colors.red, // 应用栏颜色
  bottomBarColor: Colors.red, // 底部栏颜色
  takeButtonActionColor: Colors.red, // 拍照按钮颜色
  borderType: MaskForCameraViewBorderType.solid, // 边框类型为实线
  boxBorderWidth: 3.8, // 边框宽度
  boxBorderRadius: 3.2, // 边框圆角
  onTake: (MaskForCameraViewResult res) {
    // res.croppedImage 是裁剪后的图像,您可以使用它。
  }
);

使用返回按钮

MaskForCameraView(
  visiblePopButton: true, // 显示返回按钮
  appBarColor: Colors.white, // 应用栏颜色
  bottomBarColor: Colors.white, // 底部栏颜色
  takeButtonActionColor: Colors.white, // 拍照按钮颜色
  takeButtonColor: Colors.black, // 拍照按钮背景颜色
  boxBorderColor: Colors.red, // 裁剪框边框颜色
  iconsColor: Colors.black, // 图标颜色
  titleStyle: const TextStyle(
    color: Colors.black,
    fontSize: 18.0,
    fontWeight: FontWeight.w800,
  ), // 标题样式
  boxBorderWidth: 2.8, // 边框宽度
  onTake: (MaskForCameraViewResult res) {
    // res.croppedImage 是裁剪后的图像,您可以使用它。
  }
);

自定义样式

MaskForCameraView(
  visiblePopButton: false,
  appBarColor: Colors.yellow, // 应用栏颜色
  bottomBarColor: Colors.yellow, // 底部栏颜色
  takeButtonActionColor: Colors.green, // 拍照按钮颜色
  takeButtonColor: Colors.white, // 拍照按钮背景颜色
  boxBorderColor: Colors.green, // 裁剪框边框颜色
  iconsColor: Colors.white, // 图标颜色
  titleStyle: const TextStyle(
    color: Colors.white,
    fontSize: 18.0,
    fontWeight: FontWeight.w800,
  ), // 标题样式
  boxBorderWidth: 3.8, // 边框宽度
  onTake: (MaskForCameraViewResult res) {
    // res.croppedImage 是裁剪后的图像,您可以使用它。
  }
);

在Android上的使用

android/app/build.gradle文件中,将以下内容:

minSdkVersion 16

修改为:

minSdkVersion 21

android/app/src/main/AndroidManifest.xml文件中,添加以下权限:

<uses-permission android:name="android.permission.CAMERA" />

在iOS上的使用

将iOS版本从9升级到10

ios/Runner/Info.plist文件中,添加以下键值对:

<key>NSCameraUsageDescription</key>
<string>Can I use the camera please?</string>
<key>NSMicrophoneUsageDescription</key>
<string>Can I use the mic please?</string>

自定义裁剪功能

如果需要手动裁剪图像,可以使用以下函数:

cropImage(
    File("...").path,
    cropHeight,
    cropWidth,
    screenHeight,
    screenWidth,
  );

此函数仅从图像中心裁剪。

初始化相机

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await MaskForCameraView.initialize();
  runApp(const MyApp());
}

获取裁剪后的图像

MaskForCameraView(
  visiblePopButton: false,
  onTake: (MaskForCameraViewResult res) {
    // res.croppedImage 是裁剪后的图像,您可以使用它。
  }
);

可接受的参数

MaskForCameraView(
    title: "Crop image from camera", // 标题
    boxWidth: 300.0, // 裁剪框宽度
    boxHeight: 168.0, // 裁剪框高度
    boxBorderWidth: 1.8, // 裁剪框边框宽度
    boxBorderRadius: 3.2, // 裁剪框边框圆角
    onTake: (MaskForCameraViewResult res) {}, // 回调函数
    insideLine: MaskForCameraViewInsideLine(
      position: MaskForCameraViewInsideLinePosition.eenter, // 内部线条位置
      direction: MaskForCameraViewInsideLineDirection.horizontal, // 内部线条方向
    ),
    cameraDescription: MaskForCameraViewCameraDescription.rear, // 相机描述
    borderType: MaskForCameraViewBorderType.dotted, // 边框类型
    visiblePopButton: true, // 是否显示返回按钮
    appBarColor: Colors.black, // 应用栏颜色
    titleStyle: const TextStyle(
      color: Colors.white,
      fontSize: 18.0,
      fontWeight: FontWeight.w600,
    ), // 标题样式
    boxBorderColor: Colors.white, // 裁剪框边框颜色
    bottomBarColor: Colors.black, // 底部栏颜色
    takeButtonColor: Colors.white, // 拍照按钮颜色
    takeButtonActionColor: Colors.black, // 拍照按钮动作颜色
    iconsColor: Colors.white, // 图标颜色
)

完整示例

以下是完整的示例代码:

import 'dart:typed_data';
import 'package:mask_for_camera_view/mask_for_camera_view.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await MaskForCameraView.initialize();
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
        debugShowCheckedModeBanner: false, home: HomePage());
  }
}

class HomePage extends StatelessWidget {
  const HomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaskForCameraView(
      visiblePopButton: false,
      onTake: (MaskForCameraViewResult res) {
        // res.croppedImage 是裁剪后的图像,您可以使用它。
      }
    );
  }
}

更多关于Flutter相机遮罩插件mask_for_camera_h的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter相机遮罩插件mask_for_camera_h的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


mask_for_camera_h 是一个 Flutter 插件,用于在相机预览时添加遮罩效果。这个插件可以帮助你在相机界面上叠加自定义的遮罩,比如圆形的头像框、矩形的身份证框等。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 mask_for_camera_h 依赖:

dependencies:
  flutter:
    sdk: flutter
  mask_for_camera_h: ^1.0.0  # 请检查插件的最新版本

然后运行 flutter pub get 来安装插件。

使用插件

以下是一个简单的示例,展示如何使用 mask_for_camera_h 插件在相机预览上添加遮罩。

1. 导入插件

import 'package:mask_for_camera_h/mask_for_camera_h.dart';

2. 创建相机预览并添加遮罩

import 'package:flutter/material.dart';
import 'package:camera/camera.dart';
import 'package:mask_for_camera_h/mask_for_camera_h.dart';

class CameraMaskScreen extends StatefulWidget {
  @override
  _CameraMaskScreenState createState() => _CameraMaskScreenState();
}

class _CameraMaskScreenState extends State<CameraMaskScreen> {
  CameraController? _cameraController;
  List<CameraDescription>? cameras;

  @override
  void initState() {
    super.initState();
    _initializeCamera();
  }

  Future<void> _initializeCamera() async {
    cameras = await availableCameras();
    _cameraController = CameraController(
      cameras!.first,
      ResolutionPreset.medium,
    );
    await _cameraController!.initialize();
    if (!mounted) return;
    setState(() {});
  }

  @override
  void dispose() {
    _cameraController?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    if (_cameraController == null || !_cameraController!.value.isInitialized) {
      return Center(child: CircularProgressIndicator());
    }

    return Scaffold(
      body: Stack(
        children: [
          CameraPreview(_cameraController!),
          MaskForCameraH(
            child: Container(),
            maskType: MaskType.circle,
            maskSize: 200.0,
            maskColor: Colors.black.withOpacity(0.5),
          ),
        ],
      ),
    );
  }
}

参数说明

  • maskType: 遮罩的类型,可以是 MaskType.circle(圆形)或 MaskType.rectangle(矩形)。
  • maskSize: 遮罩的大小,对于圆形遮罩,这是直径;对于矩形遮罩,这是宽度和高度。
  • maskColor: 遮罩的颜色,通常是半透明的黑色 Colors.black.withOpacity(0.5)

高级用法

你可以通过自定义 child 来在遮罩内添加其他控件,比如提示文字、按钮等。

MaskForCameraH(
  child: Center(
    child: Text(
      '请将身份证放入框内',
      style: TextStyle(color: Colors.white, fontSize: 18),
    ),
  ),
  maskType: MaskType.rectangle,
  maskSize: 300.0,
  maskColor: Colors.black.withOpacity(0.5),
),
回到顶部