Flutter图片裁剪插件new_image_crop的使用

Flutter图片裁剪插件new_image_crop的使用

本插件是一个图像编辑器,提供了x轴、y轴、z轴旋转偏移量调整,整体90度旋转,上下翻转、左右翻转等功能。它还支持多指缩放功能。由于该插件完全用Dart编写,因此不依赖任何移动平台包。因此,它可以在所有受Flutter支持的平台上运行,包括移动端、Web端和桌面端等。

初始化配置参数

在创建编辑框之前,可以进行一些初始配置参数设置。

final editorConfig = DataEditorConfig(
	// 编辑区域背景颜色
    bgColor: Colors.black,

	// 配置编辑区域的内边距
    cropRectPadding: const EdgeInsets.all(20.0),

    // 配置视图查找器四个角的长度
    cornerLength: 30,

    // 配置视图查找器四个角的宽度
    cornerWidth: 4,

    // 配置视图查找器四个角的颜色
    cornerColor: Colors.blue,

    // 配置视图查找器四个角的点击响应区域大小
    cornerHitTestSize: const Size(40, 40),

    // 配置视图查找器四条边的颜色
    lineColor: Colors.white,

    // 配置视图查找器四条边的宽度
    lineWidth: 2,

    // 配置视图查找器边框四条边的点击响应宽度
    lineHitTestWidth: 40,

    // 配置视图查找器九宫格虚线每个单元的长度
    dottedLength: 2,

    // 配置视图查找器九宫格虚线的颜色
    dottedColor: Colors.white,

    // 配置视图查找器外部部分的颜色
    editorMaskColorHandler: (context, isTouching) {
      return Colors.black;
    });

使用控制器操作编辑图形

通过控制器来操作编辑图形。

final controller = ImageEditorController();

	// 减少x轴旋转角度
	controller.reduceRotateXAngle();

	// 增加x轴旋转角度
	controller.addRotateXAngle();

	// 减少y轴旋转角度
	controller.reduceRotateYAngle();

	// 增加y轴旋转角度
	controller.addRotateYAngle();

	// 增加z轴旋转角度
	controller.addRotateAngle();

	// 减少z轴旋转角度
	controller.reduceRotateAngle();

	// 增加90度旋转角度
	controller.addRotateAngle90();

	// 减少90度旋转角度
	controller.reduceRotateAngle90();

	// 缩小
	controller.reduceScaleRatio();

	// 放大
	controller.addScaleRatio();

	// 上下翻转
	controller.upsideDown();

	// 左右翻转
	controller.turnAround();

	// 确认裁剪
	controller.tailor();

	// 恢复原始状态
	controller.restore();

创建编辑框

使用以下代码创建一个编辑框:

Expanded(
	child: ImageEditorPlane(
		// 接收图像数据 ByteData
		imageData: imageData,
		controller: controller,
		editorConfig: editorConfig,
		// 监听裁剪结果 Image, ByteData, Size
		onTailorResult: (image, byteData, size) {
			print('裁剪结果');
			_testToShowScreenShotDialog(
				context: context, byteData: byteData);
		},
	),
),

完整示例代码

以下是完整的示例代码:

import 'package:flutter/material.dart';
import 'package:new_image_crop/example_demo.dart';
import 'package:new_image_crop/tools/assert_utils.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '照片编辑器演示',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: '照片编辑器演示'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            GestureDetector(
                onTap: () async {
                  // 点击编辑
                  ExampleDemo.show(
                      context: context,
                      imageData: await AssertUtils.readImageByByteData(
                          'assets/images/cat.png'));
                },
                child: Container(
                  width: double.maxFinite,
                  alignment: Alignment.center,
                  child: Container(
                    width: 160,
                    height: 60,
                    alignment: Alignment.center,
                    decoration: BoxDecoration(
                      color: Colors.grey.withOpacity(0.8),
                      borderRadius: const BorderRadius.all(Radius.circular(10)),
                    ),
                    child: const Text('点击编辑'),
                  ),
                ))
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


new_image_crop 是一个用于 Flutter 的图片裁剪插件,它允许用户从图库中选择图片并进行裁剪。以下是如何使用 new_image_crop 插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 new_image_crop 依赖:

dependencies:
  flutter:
    sdk: flutter
  new_image_crop: ^1.0.0  # 请确保使用最新版本

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

2. 导入包

在需要使用 new_image_crop 的 Dart 文件中导入包:

import 'package:new_image_crop/new_image_crop.dart';

3. 使用 new_image_crop 进行图片裁剪

以下是一个简单的示例,演示如何使用 new_image_crop 插件从图库中选择图片并进行裁剪:

import 'package:flutter/material.dart';
import 'package:new_image_crop/new_image_crop.dart';
import 'package:image_picker/image_picker.dart';

class ImageCropExample extends StatefulWidget {
  @override
  _ImageCropExampleState createState() => _ImageCropExampleState();
}

class _ImageCropExampleState extends State<ImageCropExample> {
  final cropKey = GlobalKey<CropState>();
  Image? _croppedImage;

  Future<void> _cropImage() async {
    final picker = ImagePicker();
    final pickedFile = await picker.pickImage(source: ImageSource.gallery);

    if (pickedFile != null) {
      final croppedFile = await ImageCrop.crop(
        file: File(pickedFile.path),
        cropKey: cropKey,
      );

      if (croppedFile != null) {
        setState(() {
          _croppedImage = Image.file(croppedFile);
        });
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Crop Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            if (_croppedImage != null)
              Container(
                width: 200,
                height: 200,
                child: _croppedImage,
              ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _cropImage,
              child: Text('Crop Image'),
            ),
          ],
        ),
      ),
    );
  }
}

void main() {
  runApp(MaterialApp(
    home: ImageCropExample(),
  ));
}

4. 解释代码

  • ImagePicker: 用于从图库中选择图片。
  • ImageCrop.crop: 用于裁剪图片。它需要一个 File 对象和一个 cropKey
  • cropKey: 用于管理裁剪控件的状态。
  • _croppedImage: 用于存储裁剪后的图片并显示在 UI 中。

5. 运行示例

运行上述代码后,您将看到一个按钮,点击该按钮可以从图库中选择图片并进行裁剪。裁剪后的图片将显示在屏幕上。

6. 进一步定制

new_image_crop 插件还提供了许多其他选项,例如设置裁剪比例、裁剪框的颜色等。您可以查阅插件的文档以了解更多详细信息。

7. 注意事项

  • 确保在 AndroidManifest.xmlInfo.plist 中添加了必要的权限,以便访问设备的图库和相机。
  • 插件的版本可能会更新,请确保使用最新版本并查阅最新的文档。

8. 示例代码中的依赖

确保在 pubspec.yaml 中已添加 image_picker 依赖:

dependencies:
  flutter:
    sdk: flutter
  new_image_crop: ^1.0.0
  image_picker: ^0.8.4+4  # 请确保使用最新版本
回到顶部