Flutter图片编辑插件image_editor_dove的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter图片编辑插件image_editor_dove的使用

image_editor_dove 是一个高性能的图片编辑插件,支持裁剪、涂鸦、马赛克、添加文字、翻转和旋转等功能。它还支持自定义UI样式。

功能演示

  • 涂鸦 涂鸦

  • 旋转 旋转

  • 马赛克 马赛克

  • 添加或删除文字 添加或删除文字 添加文字完成

开始使用

  1. pubspec.yaml 文件中添加依赖

    dependencies:
      image_editor_dove: ^latest_version
    
  2. 导入包

    import 'package:image_editor_dove/image_editor.dart';
    
  3. iOS 配置

    Info.plist 文件中添加以下权限描述:

    <key>NSPhotoLibraryUsageDescription</key>
    <string>用于演示图片选择器插件</string>
    <key>NSCameraUsageDescription</key>
    <string>用于演示图片选择器插件</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>用于捕获音频以供图片选择器插件使用</string>
    
  4. Android 配置

    无需额外配置,插件应开箱即用。

使用示例

以下是一个完整的示例代码,展示了如何使用 image_editor_dove 插件进行图片编辑:

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_editor_dove/image_editor.dart';
import 'package:image_picker/image_picker.dart';

void main() {
  runApp(MyApp());
}

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

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: HomePage(),
      ),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  File? _image;

  final picker = ImagePicker();

  // 打开图片编辑器
  Future<void> toImageEditor(File origin) async {
    return Navigator.push(context, MaterialPageRoute(builder: (context) {
      return ImageEditor(
        originImage: origin,
      );
    })).then((result) {
      if (result is EditorImageResult) {
        setState(() {
          _image = result.newFile;
        });
      }
    }).catchError((er) {
      debugPrint(er);
    });
  }

  // 从图库选择图片
  void getImage() async {
    PickedFile? image = await picker.getImage(source: ImageSource.gallery);
    if (image != null) {
      final File origin = File(image.path);
      toImageEditor(origin);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Material(
      color: Colors.white,
      child: Container(
        width: double.infinity,
        height: double.infinity,
        child: Column(
          children: [
            if (_image != null)
              Expanded(child: Image.file(_image!)),
            ElevatedButton(
              onPressed: getImage,
              child: Text('编辑图片'),
            ),
          ],
        ),
      ),
    );
  }
}

自定义UI样式

你可以通过扩展 ImageEditorDelegate 来自定义编辑器的UI样式:

ImageEditor.uiDelegate = YouUiDelegate();

class YouUiDelegate extends ImageEditorDelegate {
  // 自定义UI逻辑
  ...
}

更多关于Flutter图片编辑插件image_editor_dove的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter图片编辑插件image_editor_dove的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用image_editor_dove插件进行图片编辑的示例代码。image_editor_dove是一个功能强大的Flutter插件,用于对图像进行各种编辑操作,如裁剪、旋转、添加滤镜等。

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

dependencies:
  flutter:
    sdk: flutter
  image_editor_dove: ^0.1.0  # 请检查最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以使用以下代码来加载图片并进行编辑:

import 'package:flutter/material.dart';
import 'package:image_editor_dove/image_editor_dove.dart';
import 'dart:typed_data';
import 'dart:ui' as ui;

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ImageEditorScreen(),
    );
  }
}

class ImageEditorScreen extends StatefulWidget {
  @override
  _ImageEditorScreenState createState() => _ImageEditorScreenState();
}

class _ImageEditorScreenState extends State<ImageEditorScreen> {
  Uint8List? _imageBytes;
  EditorController? _controller;

  @override
  void initState() {
    super.initState();
    // 加载图像(这里假设你有一个图像文件的路径)
    _loadImage();
  }

  Future<void> _loadImage() async {
    // 假设你有一个图像文件路径,例如从assets加载
    ByteData imageBytesData = await rootBundle.load('assets/sample_image.jpg');
    Uint8List imageBytes = imageBytesData.buffer.asUint8List();

    // 创建EditorController并设置图像
    _controller = EditorController(image: Image.memory(imageBytes).image);

    // 将图像字节设置到状态中
    setState(() {
      _imageBytes = imageBytes;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Editor Demo'),
      ),
      body: _controller != null
          ? Column(
              children: [
                Expanded(
                  child: ImageEditor(
                    controller: _controller!,
                    // 启用裁剪功能
                    enableCrop: true,
                    // 启用旋转功能
                    enableRotation: true,
                    // 启用滤镜功能
                    enableFilter: true,
                    // 启用亮度调整
                    enableBrightness: true,
                    // 其他可用配置...
                  ),
                ),
                ElevatedButton(
                  onPressed: () async {
                    // 获取编辑后的图像
                    final ui.Image? editedImage = await _controller!.getResultImage();
                    if (editedImage != null) {
                      // 将编辑后的图像转换为字节数组
                      ByteData? byteData = await editedImage.toByteData(format: ui.ImageByteFormat.png);
                      Uint8List? editedImageBytes = byteData?.buffer.asUint8List();

                      // 在这里你可以保存或显示编辑后的图像
                      // 例如,显示编辑后的图像
                      setState(() {
                        _imageBytes = editedImageBytes;
                      });
                    }
                  },
                  child: Text('Get Edited Image'),
                ),
              ],
            )
          : Center(
              child: CircularProgressIndicator(),
            ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. pubspec.yaml中添加了image_editor_dove依赖。
  2. ImageEditorScreen中,通过rootBundle.load加载了一个示例图像(这里假设图像在assets文件夹中)。
  3. 创建了一个EditorController实例,并将图像设置到控制器中。
  4. 使用ImageEditor小部件来显示和编辑图像。
  5. 提供了一个按钮来获取编辑后的图像,并将其转换为字节数组。

请注意,你需要确保你的Flutter项目中有一个名为assets/sample_image.jpg的图像文件,或者你可以修改代码以从其他来源加载图像。

此外,image_editor_dove插件的功能非常强大,你可以根据需求启用或禁用不同的编辑功能,并自定义编辑器的外观和行为。更多详细信息,请参考image_editor_dove的官方文档。

回到顶部