一、插件介绍

flutter_gpu_image是一款基于GPU加速的图像处理Flutter插件,支持多种图像滤镜效果和相机功能。该插件已针对鸿蒙平台进行适配,允许开发者在鸿蒙设备上实现高性能的图像编辑和相机应用。

主要功能特点

  • 提供丰富的图像滤镜效果(亮度、对比度、饱和度、色调等)
  • 支持实时相机预览与滤镜应用
  • 支持图像和视频的处理与显示
  • GPU加速确保高性能图像处理
  • 简洁易用的API设计
  • 完整的鸿蒙平台适配

二、安装与使用

2.1 包的引入

由于这是自定义修改版本,需要通过Git形式引入。在项目的pubspec.yaml文件中添加以下依赖配置:

dependencies:
  gpu_image:
    git:
      url: https://gitcode.com/openharmony-sig/flutter_gpu_image.git

添加依赖后,执行以下命令获取包:

flutter pub get

2.2 权限配置

使用相机功能时,需要在鸿蒙项目的配置文件中添加相应权限:

{
  "module": {
    "abilities": [
      {
        "permissions": [
          "ohos.permission.CAMERA",
          "ohos.permission.MEDIA_LOCATION",
          "ohos.permission.READ_MEDIA",
          "ohos.permission.WRITE_MEDIA"
        ]
      }
    ]
  }
}

2.3 核心API使用示例

2.3.1 图像显示与滤镜应用
import 'package:gpu_image/gpu_image.dart';

class ImageFilterPage extends StatefulWidget {
  final String imagePath;

  const ImageFilterPage({Key? key, required this.imagePath}) : super(key: key);

  
  _ImageFilterPageState createState() => _ImageFilterPageState();
}

class _ImageFilterPageState extends State<ImageFilterPage> {
  final GPUImageController _controller = GPUImageController();

  
  void initState() {
    super.initState();
    // 设置保存监听
    _controller.saveListen((path) {
      print("图片保存路径: $path");
      // 处理保存结果
    });
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("图像滤镜")),
      body: Column(
        children: [
          // 显示带滤镜的图像
          GPUImageWidget(
            width: MediaQuery.of(context).size.width,
            height: 300,
            path: widget.imagePath,
            controller: _controller,
          ),
          // 滤镜控制按钮
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              ElevatedButton(
                onPressed: () {
                  // 应用亮度滤镜
                  _controller.setFilter(GPUBrightnessFilter(brightness: 1.5));
                },
                child: Text("增加亮度"),
              ),
              ElevatedButton(
                onPressed: () {
                  // 应用对比度滤镜
                  _controller.setFilter(GPUContrastFilter(contrast: 1.5));
                },
                child: Text("增加对比度"),
              ),
              ElevatedButton(
                onPressed: () {
                  // 保存处理后的图像
                  _controller.saveImage();
                },
                child: Text("保存图片"),
              ),
            ],
          ),
        ],
      ),
    );
  }
}
2.3.2 相机预览与拍照
import 'package:gpu_image/gpu_image.dart';

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

  
  _CameraFilterPageState createState() => _CameraFilterPageState();
}

class _CameraFilterPageState extends State<CameraFilterPage> {
  final GPUCameraController _controller = GPUCameraController();

  
  void initState() {
    super.initState();
    // 设置拍照监听
    _controller.photoListen((path) {
      print("拍照保存路径: $path");
      // 跳转到图片预览页面
      Navigator.push(
        context,
        MaterialPageRoute(
          builder: (context) => ImagePreviewPage(imagePath: path),
        ),
      );
    });

    // 设置视频录制监听
    _controller.videoListen((recordStatus, path) {
      if (recordStatus == GPUType.startRecord) {
        print("开始录制视频");
      } else {
        print("视频录制结束,保存路径: $path");
        // 跳转到视频预览页面
        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => VideoPreviewPage(videoPath: path),
          ),
        );
      }
    });
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        alignment: Alignment.bottomCenter,
        children: [
          // 相机预览
          GPUCameraWidget(
            width: MediaQuery.of(context).size.width,
            height: MediaQuery.of(context).size.height,
            controller: _controller,
          ),
          // 相机控制按钮
          Positioned(
            bottom: 50,
            left: 30,
            right: 30,
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                // 切换相机按钮
                IconButton(
                  onPressed: () {
                    _controller.switchCamera();
                  },
                  icon: Icon(Icons.switch_camera, color: Colors.white, size: 30),
                ),
                // 拍照按钮
                GestureDetector(
                  onTap: () {
                    _controller.recordPhoto();
                  },
                  child: Container(
                    width: 70,
                    height: 70,
                    decoration: BoxDecoration(
                      color: Colors.white,
                      shape: BoxShape.circle,
                    ),
                  ),
                ),
                // 应用滤镜按钮
                IconButton(
                  onPressed: () {
                    _controller.setFilter(GPUSepiaFilter());
                  },
                  icon: Icon(Icons.filter, color: Colors.white, size: 30),
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}

三、主要API说明

3.1 滤镜类

所有滤镜都继承自GPUFilter基类,主要包括:

  • GPUBrightnessFilter:亮度调整
  • GPUContrastFilter:对比度调整
  • GPUSaturationFilter:饱和度调整
  • GPUHueFilter:色调调整
  • GPUSepiaFilter:褐色调效果
  • GPUSharpenFilter:锐化效果
  • GPUPixelationFilter:像素化效果
  • GPUGammaFilter:伽马调整

3.2 控制器类

GPUImageController
  • setFilter(GPUFilter filter):设置图像滤镜
  • saveImage():保存处理后的图像
  • saveListen(dynamic saveImage):监听图像保存结果
GPUCameraController
  • switchCamera():切换前后摄像头
  • recordPhoto():拍照
  • recordVideo():录制视频
  • setFilter(GPUFilter filter):设置相机预览滤镜
  • photoListen(RecordPhoto recordPhoto):监听拍照结果
  • videoListen(RecordVideo recordVideo):监听视频录制结果
  • closeCamera():关闭相机

3.3 显示组件

  • GPUImageWidget:显示静态图像并应用滤镜
  • GPUCameraWidget:相机预览组件
  • GPUVideoWidget:视频播放组件

四、兼容性与限制

4.1 兼容性

已在以下环境中测试通过:

  • Flutter: 3.7.12-ohos-1.0.6
  • SDK: 5.0.0(12)
  • IDE: DevEco Studio: 5.0.13.200
  • ROM: 5.1.0.120 SP3

4.2 注意事项

  1. 使用相机功能前,请确保已获得相应权限
  2. 图像处理过程会消耗较多GPU资源,建议在高性能设备上使用复杂滤镜
  3. 视频处理功能可能受到设备性能限制
  4. 保存图像和视频时,需要外部存储权限

五、总结

flutter_gpu_image插件为鸿蒙平台提供了强大的GPU加速图像处理能力,使开发者能够轻松构建具有专业图像编辑功能的应用。其主要优势包括:

  • 丰富的滤镜效果和相机功能
  • 针对鸿蒙平台的完整适配
  • 高性能的GPU加速处理
  • 简洁易用的API设计
  • 支持图像、相机和视频的全面处理

通过本指南的介绍,开发者可以快速上手使用该插件,在鸿蒙平台上实现各种图像处理和相机应用。无论是简单的图像编辑还是复杂的相机应用,flutter_gpu_image都能提供高效、稳定的支持。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐