Flutter相机滤镜插件my_filter_camera的使用
Flutter相机滤镜插件my_filter_camera的使用
Flutter相机滤镜插件my_filter_camera
允许您在捕捉照片和视频时应用高级数字滤镜。该插件提供了一个无缝接口,可以实时为您的相机流添加效果,并以风格和创意捕捉瞬间。
功能
- 捕捉带有高级实时滤镜的照片和视频。
- 程序化地应用各种预定义或自定义数字效果。
- 可调整的相机配置:亮度。
- 支持前置和后置摄像头。
- 高度可定制且易于集成到您的Flutter项目中。
功能表:
功能 | 支持 |
---|---|
请求权限 | ✅ |
启用/禁用音频 | ✅ |
拍照 | ✅ |
实时滤镜 | ✅ |
曝光水平 | ✅ |
设备闪光灯支持 | ✅ |
实时切换摄像头 | ✅ |
安装和使用
将包添加到您的pubspec.yaml
dependencies:
my_filter_camera: ^latest_version
设置平台
Android
在您的AndroidManifest.xml
中添加权限:
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
将包导入到您的项目
import 'package:my_filter_camera/my_filter_camera.dart';
然后,您可以使用相机功能。
初始化相机
final CameraViewController controller = CameraViewController();
显示相机预览小部件:
CameraView(
autoDispose: false,
controller: controller,
onDetect: (data, args) {
setState(() {});
},
),
- 使用
controller.start()
函数启动相机,并使用controller.stop
停止相机。 - 使用
controller.switch()
切换前后摄像头方向。
滤镜类型
更新滤镜类型:
await controller.updateFilter(filterType: PluginFilterEnum.values[index].code);
您可以在PluginFilterEnum
中找到所有滤镜列表。
捕获图像
捕获实时图像:
final xFile = await controller.capture();
曝光水平
调整相机曝光水平:
controller.adjustBrightness(value: value.toInt());
重要注意事项
记住在不再使用相机时停止或释放相机,以避免增加内存使用:
[@override](/user/override)
void dispose() {
controller.dispose();
super.dispose();
}
// 或者
controller.stop();
示例代码
以下是一个完整的示例演示如何使用my_filter_camera
插件:
import 'dart:async';
import 'package:extended_image/extended_image.dart';
import 'package:flutter/material.dart';
import 'package:my_filter_camera/my_filter_camera.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
runApp(const MaterialApp(home: CameraTestScreen()));
}
class CameraTestScreen extends StatefulWidget {
const CameraTestScreen({super.key});
[@override](/user/override)
_CameraTestScreenState createState() => _CameraTestScreenState();
}
class _CameraTestScreenState extends State<CameraTestScreen> {
final CameraViewController controller = CameraViewController();
bool isStarted = false;
double _currentSliderValue = 0;
[@override](/user/override)
void initState() {
super.initState();
controller.applyImageSample();
_loadPreferences();
}
Future<void> _loadPreferences() async {
// final prefs = await SharedPreferences.getInstance();
// final int? brightnessValue = prefs.getInt('brightnessValue');
}
Future<void> _setPreferences({required int brightnessValue}) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setInt('brightnessValue', brightnessValue);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.transparent,
body: Stack(
children: [
Positioned.fill(
child: CameraView(
autoDispose: false,
controller: controller,
onDetect: (data, args) {
setState(() {});
},
),
),
Align(
alignment: Alignment.bottomCenter,
child: Container(
height: 200,
color: Colors.black.withOpacity(0.4),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Slider(
value: _currentSliderValue,
max: 50,
min: -50,
divisions: 101,
label: _currentSliderValue.round().toString(),
onChanged: (double value) {
setState(() {
_currentSliderValue = value;
controller.adjustBrightness(value: value.toInt());
_setPreferences(brightnessValue: value.toInt());
});
},
),
Container(
height: 50,
child: ListView.builder(
itemCount: PluginFilterEnum.values.length,
scrollDirection: Axis.horizontal,
itemBuilder: (context, index) {
return ElevatedButton(
onPressed: () async {
await controller.updateFilter(
filterType: PluginFilterEnum.values[index].code,
);
},
child: Text(PluginFilterEnum.values[index].name),
);
},
),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
IconButton(
color: Colors.white,
icon: ValueListenableBuilder(
valueListenable: controller.cameraFacingState,
builder: (context, state, child) {
switch (state as CameraFacing) {
case CameraFacing.front:
return const Icon(Icons.camera_front);
case CameraFacing.back:
return const Icon(Icons.camera_rear);
}
},
),
iconSize: 32.0,
onPressed: () => controller.switchCamera(),
),
IconButton(
icon: const Icon(
Icons.camera_alt_outlined,
size: 40,
color: Colors.white,
),
onPressed: () async {
final xFile = await controller.capture();
final utf8 = await xFile.readAsBytes();
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('图片预览'),
content: ExtendedImage.memory(
utf8,
fit: BoxFit.cover,
filterQuality: FilterQuality.high,
),
actions: <Widget>[
TextButton(
child: const Text('关闭'),
onPressed: () {
Navigator.of(context).pop(); // 关闭对话框
},
),
],
);
});
},
),
],
),
],
),
),
),
],
),
);
}
[@override](/user/override)
void dispose() {
controller.dispose();
super.dispose();
}
}
更多关于Flutter相机滤镜插件my_filter_camera的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复