Flutter图片裁剪插件flutter_image_crop_widget的使用

Flutter 图片裁剪插件 flutter_image_crop_widget 的使用

flutter_image_crop_widget 是一个用 Flutter 实现的图片裁剪组件。它可以支持对图片进行缩放和裁剪。

你可以通过以下链接试用该插件: 在线试用

裁切模式

裁切模式截图

查看模式(仅支持缩放和移动)

查看模式截图

完整示例代码

以下是 flutter_image_crop_widget 插件的一个完整示例代码:

import 'dart:io';
import 'dart:typed_data';

import 'dart:ui' as ui;
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_image_crop_widget/flutter_image_crop_widget.dart';
import 'package:image/image.dart' as i;

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  ui.Image? originImage;
  bool editMode = false;

  [@override](/user/override)
  void initState() {
    super.initState();
    rootBundle.load('assets/pasted_image.png').then((data) async {
      final imageData = data.buffer.asUint8List();
      final image = await decodeImageFromList(imageData);
      setState(() {
        originImage = image;
      });
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
        actions: [
          IconButton(
              onPressed: () {
                setState(() {
                  editMode = !editMode;
                });
              },
              icon: editMode ? Icon(Icons.edit) : Icon(Icons.visibility))
        ],
      ),
      body: SizedBox.expand(
        child: originImage == null
            ? Placeholder()
            : editMode
                ? ImageCropWidget.justView(
                    originImage!,
                  )
                : ImageCropWidget.editMode(
                    originImage!,
                    cropRatio: 2,
                    cropAreaMinSize: 100,
                    onUpdate: (originImage, rectInImage) async {
                      // 这里获取到原图片和裁剪区域
                      // ui.PictureRecorder recorder = ui.PictureRecorder();
                      // final canvas = Canvas(recorder);
                      // canvas.drawImageRect(
                      //     originImage,
                      //     rectInImage,
                      //     Rect.fromLTWH(
                      //         0, 0, rectInImage.width, rectInImage.height),
                      //     Paint());
                      // final p = recorder.endRecording();
                      // final image = await p.toImage(rectInImage.width.toInt(),
                      //     rectInImage.height.toInt());
                      // final f = File('./hello.jpg');
                      // final png = i.PngEncoder().encodeImage(i.Image.fromBytes(image.width, image.height,(await image.toByteData())!.buffer.asUint8List()));
                      // print('path: ${f.absolute}');
                      // f.writeAsBytes(png);
                    },
                  ),
      ),
    );
  }
}

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

1 回复

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


flutter_image_crop_widget 是一个用于在 Flutter 应用中裁剪图片的插件。它提供了一个简单易用的界面,允许用户选择图片并进行裁剪。以下是使用 flutter_image_crop_widget 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_image_crop_widget: ^1.0.0  # 请使用最新版本

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

2. 导入包

在你的 Dart 文件中导入 flutter_image_crop_widget

import 'package:flutter_image_crop_widget/flutter_image_crop_widget.dart';

3. 使用 ImageCropWidget

ImageCropWidget 是一个用于裁剪图片的小部件。你可以通过以下方式使用它:

class ImageCropPage extends StatefulWidget {
  @override
  _ImageCropPageState createState() => _ImageCropPageState();
}

class _ImageCropPageState extends State<ImageCropPage> {
  final ImageCropController _controller = ImageCropController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Crop'),
      ),
      body: Column(
        children: [
          Expanded(
            child: ImageCropWidget(
              controller: _controller,
              image: AssetImage('assets/sample_image.jpg'), // 替换为你的图片路径
            ),
          ),
          ElevatedButton(
            onPressed: () async {
              final croppedImage = await _controller.crop();
              // 处理裁剪后的图片
              if (croppedImage != null) {
                // 例如:显示裁剪后的图片
                showDialog(
                  context: context,
                  builder: (context) {
                    return AlertDialog(
                      content: Image.memory(croppedImage),
                    );
                  },
                );
              }
            },
            child: Text('Crop Image'),
          ),
        ],
      ),
    );
  }
}

4. 处理裁剪后的图片

在上面的代码中,_controller.crop() 方法返回一个 Uint8List,表示裁剪后的图片的字节数据。你可以将这些字节数据保存到文件、上传到服务器或直接在应用中显示。

5. 其他配置

ImageCropWidget 还支持一些其他的配置选项,例如设置裁剪框的宽高比、初始裁剪区域等。你可以通过 ImageCropController 进行更多的控制。

_controller.setAspectRatio(1.0); // 设置裁剪框的宽高比为1:1
_controller.setCropRect(Rect.fromLTWH(0, 0, 100, 100)); // 设置初始裁剪区域
回到顶部