Flutter简洁实用的图片编辑器的实现

作者:静水流深zz 时间:2021-10-31 08:30:44 

介绍

一款简洁实用的图片编辑器,纯dart开发。支持:涂鸦、旋转&翻转、马赛克、添加文字,及自定义ui风格。

功能演示

涂鸦

Flutter简洁实用的图片编辑器的实现

旋转&翻转

Flutter简洁实用的图片编辑器的实现

马赛克

Flutter简洁实用的图片编辑器的实现

添加文字及删除

Flutter简洁实用的图片编辑器的实现

Flutter简洁实用的图片编辑器的实现

安装

添加依赖

dependencies:
 image_editor_dove: ^latest

import

import 'package:image_editor/flutter_image_editor.dart';

使用方法

获取到原图片后,将其传给ImageEditor 如下:

Future<void> toImageEditor(File origin) async {
   return Navigator.push(context, MaterialPageRoute(builder: (context) {
     return ImageEditor(
       originImage: origin,
       //可空,支持自定义存储位置(编辑后的图片)
       savePath: customDirectory
     );
   })).then((result) {
     if (result is EditorImageResult) {
       setState(() {
         _image = result.newFile;
       });
     }
   }).catchError((er) {
     debugPrint(er);
   });
 }

返回结果

///The editor's result.
class EditorImageResult {
 ///宽度
 final int imgWidth;

///高度
 final int imgHeight;

///编辑后的图片
 final File newFile;

EditorImageResult(this.imgWidth, this.imgHeight, this.newFile);
}

拓展

UI定制

一些按钮、滑块等widget支持自定义,可通过继承ImageEditorDelegate来自定义ui风格:

class YourUiDelegate extends ImageEditorDelegate{
   ...
}

ImageEditor.uiDelegate = YourUiDelegate();

class ImageEditor extends StatefulWidget {

const ImageEditor({Key? key, required this.originImage, this.savePath}) : super(key: key);

...

///[uiDelegate] is determine the editor's ui style.
 ///You can extends [ImageEditorDelegate] and custome it by youself.
 static ImageEditorDelegate uiDelegate = DefaultImageEditorDelegate();

@override
 State<StatefulWidget> createState() {
   return ImageEditorState();
 }
}

保持相对绘制路径

为了获得更大的绘制区域,所以绘制面积并非为图片显示区域,这也就导致了旋转的时候,相对位置会有变化。如果你需要保持相对,可以控制绘制区域与图片显示区域保持一致即可。

参考及其他文章

地址

github仓库地址: image_editor_dove

插件地址:image_editor_dove

参考插件

signature | Flutter Package (flutter-io.cn)

来源:https://blog.csdn.net/ljq5945/article/details/122847252

标签:Flutter,图片编辑器
0
投稿

猜你喜欢

  • 详解Docker学习笔记之搭建一个JAVA Tomcat运行环境

    2022-09-03 02:26:06
  • Java concurrency线程池之线程池原理(二)_动力节点Java学院整理

    2023-11-28 23:43:18
  • Java 图片与byte数组互相转换实例

    2023-06-24 03:28:39
  • C#图表算法之无向图

    2021-08-08 22:50:20
  • java使用@Scheduled注解执行定时任务

    2021-09-16 08:37:16
  • Java RateLimiter的限流详解

    2023-01-06 17:14:12
  • Java Scanner输入两个数组的方法

    2022-06-07 08:21:20
  • unity使用射线实现贴花系统

    2023-04-23 10:22:00
  • Android自定义顶部导航栏控件实例代码

    2022-02-11 13:43:16
  • 解决Android Studio xml 格式化不自动换行的问题

    2021-09-10 06:15:42
  • Android开发自学路线图

    2023-03-04 17:42:37
  • Android应用 坐标系详细介绍

    2021-06-29 08:45:00
  • Androidstudio调用摄像头拍照并保存照片

    2022-01-23 18:33:57
  • SuperSocket入门--Telnet服务器和客户端请求处理

    2021-07-24 19:35:14
  • Android EditText 监听用户输入完成的实例

    2022-06-22 18:41:54
  • java ssm框架实现分页功能的示例代码(oracle)

    2021-10-31 01:14:40
  • C#生成单页静态页简单实例

    2022-01-22 20:00:57
  • 详解微信小程序 同步异步解决办法

    2022-08-14 00:08:58
  • 详解C#读写Excel的几种方法

    2022-10-23 14:23:28
  • Spring FreeMarker整合Struts2过程详解

    2023-03-01 00:30:52
  • asp之家 软件编程 m.aspxhome.com