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
更多关于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),
),