camera_awesome

Flutter 插件,用于在您的项目中添加相机支持。

CamerAwesome 包含许多有用的功能,例如

  • ? 实时相机翻转(无需重建即可在后置前置摄像头之间切换)。
  • ⚡️ 无需初始化,只需添加 CameraAwesome 小部件!
  • ⌛️ 即时对焦
  • ? 设备闪光灯支持。
  • ? 变焦
  • ? 全屏SizedBox 预览支持。
  • ? 完整示例。
  • ?拍照(当然?)。
  • ? 视频录制(目前仅限 iOS)。

?  实时示例

拍照 ? & 录制视频 ? 分辨率更改 ?
camerawesome_example1
camerawesome_example2

?  安装和使用

设置权限

  • iOS 将这些添加到 ios/Runner/Info.plist 文件中
<key>NSCameraUsageDescription</key>
<string>Your own description</string>

<key>NSMicrophoneUsageDescription</key>
<string>To enable microphone access when recording video</string>
  • Android

    • <application> 之前设置权限

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    • android/app/build.gradle 中的最低 SDK 版本更改为 21(或更高)

    minSdkVersion 21
    

导入包

import 'package:camerawesome/camerawesome_plugin.dart';

定义通知器(如果需要)和控制器

ValueNotifier 是 Flutter 框架中一个有用的更改通知器。当值更改时,它会向所有侦听器触发一个事件。
在此处查看 ValueNotifier 文档

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with TickerProviderStateMixin {
  // [...]
  // Notifiers
  ValueNotifier<CameraFlashes> _switchFlash = ValueNotifier(CameraFlashes.NONE);
  ValueNotifier<Sensors> _sensor = ValueNotifier(Sensors.BACK);
  ValueNotifier<CaptureModes> _captureMode = ValueNotifier(CaptureModes.PHOTO);
  ValueNotifier<Size> _photoSize = ValueNotifier(null);

  // Controllers
  PictureController _pictureController = new PictureController();
  VideoController _videoController = new VideoController();
  // [...]
}

如果您想更改配置,只需设置值即可。CameraAwesome 将处理其余部分。

示例

_switchFlash.value = CameraFlashes.AUTO;
_captureMode.value = CaptureModes.VIDEO;

创建您的相机

// [...]
@override
  Widget build(BuildContext context) {
    return CameraAwesome(
      testMode: false,
      onPermissionsResult: (bool result) { },
      selectDefaultSize: (List<Size> availableSizes) => Size(1920, 1080),
      onCameraStarted: () { },
      onOrientationChanged: (CameraOrientations newOrientation) { },
      zoom: 0.64,
      sensor: _sensor,
      photoSize: _photoSize,
      switchFlashMode: _switchFlash,
      captureMode: _captureMode,
      fitted: true,
    );
  };
// [...]
显示参数列表

参数 类型 描述 必需
testMode boolean true 以包裹纹理
onPermissionsResult OnPermissionsResult 实现此功能可在 CameraAwesome 请求权限后获得回调
selectDefaultSize OnAvailableSizes 实现此功能以从设备可用大小列表中选择默认大小
onCameraStarted OnCameraStarted 通知客户端相机已启动
onOrientationChanged OnOrientationChanged 通知客户端方向已更改
switchFlashMode **ValueNotifier**<CameraFlashes> 更改闪光灯模式
zoom ValueNotifier<double> 从原生侧缩放。必须在 01 之间
sensor ValueNotifier<Sensors> 要初始化的传感器后置前置
photoSize ValueNotifier<Size> 从 [selectDefaultSize] 方法中选择您的照片尺寸
captureMode ValueNotifier<CaptureModes> 照片视频之间选择拍摄模式
fitted 布尔值 相机预览是否应该尽可能大或裁剪以填满。默认值为 false
imagesStreamBuilder 功能 相机启动预览后返回图像流

照片 ?

拍照 ?

await _pictureController.takePicture('THE_IMAGE_PATH/myimage.jpg');

视频 ?

录制视频 ?

await _videoController.recordVideo('THE_IMAGE_PATH/myvideo.mp4');

停止录制视频 ?

await _videoController.stopRecordingVideo();

?  实时图像流

imagesStreamBuilder 属性允许您在相机准备就绪后获取图像流。
不要尝试在 Flutter UI 中显示所有这些图像,因为您将没有足够的时间来刷新 UI。
(每秒图像太多)。

CameraAwesome(
    ...
    imagesStreamBuilder: (imageStream) {
        /// listen for images preview stream
        /// you can use it to process AI recognition or anything else...
        print('-- init CamerAwesome images stream');
    },
)

?  测试设备

CamerAwesome 的开发旨在支持市场上的大多数设备,但某些功能可能无法完全正常工作。您可以单击下方查看您的设备是否支持所有功能。

欢迎贡献以改进此兼容性列表

显示网格

设备 闪光灯 对焦 Zoom 翻转
iPhone 5s
iPhone X
iPhone 7
iPhone 12 Pro
iPhone SE (第 2 代)
One Plus 6T
小米红米
荣耀 7
索尼 Xperia XZ F8331
Pixel 4
Galaxy S7
LG k50s

?  我们的目标

欢迎通过提交 PR 来提供帮助!

  • [ ] ? 录制视频(部分,仅限 iOS)
  • [ ] ? 对准特定点
  • [x] ? 广播实时图像流
  • [x] ? 曝光级别
  • [x] ✅ 添加端到端测试
  • [x] ? 全屏/SizedBox 支持
  • [x] ? 完整示例
  • [x] ? 拍照
  • [x] ? 缩放级别
  • [x] ? 实时切换相机
  • [x] ? 设备闪光灯支持
  • [x] ⌛️ 自动对焦

GitHub

https://github.com/Apparence-io/camera_awesome