Flutter图片裁剪插件custom_image_cutter的使用

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

Flutter图片裁剪插件custom_image_cutter的使用

CustomImageCutter 是一个简单且多功能的包,旨在以直观的方式简化自定义图像裁剪的过程。

功能特性

  • 缩放和调整图像进行裁剪

缩放图像

使用外部控制器 使用手势

调整图像位置

裁剪图像

开始使用

你可以在example文件夹中找到一个简单的例子。

首先创建一个控制器:

final controller = CustomImageCutterController();

然后创建一个全局键:

final cropImage = GlobalKey();

在你的Widget树中使用它们:

CustomImageCutter(
  controller: controller,
  cropperKey: cropImage,
  imagePath: 'image_path',
  image: Image.network('image_path'),
),

要缩放图像:

controller.updateScale(value) // value是一个double类型的值

你可以使用滑块来控制缩放比例:

Slider(
  min: 1,
  max: controller.maxScale, // 控制器保存最大缩放比例
  value: controller.scale, // 控制器暴露当前缩放比例
  onChanged: (value) => setState(() => controller.updateScale(value)),
)

获取裁剪后的图像:

final cropped = await controller.crop(cropperKey: cropImage);

示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用CustomImageCutter插件:

import 'package:custom_image_cutter/custom_image_cutter.dart';
import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final cropImage = GlobalKey();
  final controller = CustomImageCutterController();

  @override
  void initState() {
    controller.scaleNotifier.addListener(() => setState(() {}));
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(widget.title)),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Stack(
              children: [
                SizedBox(
                  width: 300,
                  height: 400,
                  child: CustomImageCutter(
                    controller: controller,
                    cropperKey: cropImage,
                    imagePath: 'image_path',
                    image: Image.network(
                      'https://play-lh.googleusercontent.com/IeNJWoKYx1waOhfWF6TiuSiWBLfqLb18lmZYXSgsH1fvb8v1IYiZr5aYWe0Gxu-pVZX3', // square image
                      // 'https://nmwa.org/wp-content/uploads/2020/01/1993.76-GAP.jpg', // portrait image
                      // 'https://st.depositphotos.com/1034986/4574/i/950/depositphotos_45747235-stock-photo-beautiful-woman-selfie.jpg', // landscape image
                    ),
                  ),
                ),
              ],
            ),
            Slider(
              min: controller.minScale,
              max: controller.maxScale,
              value: controller.scale,
              onChanged: (value) => setState(() => controller.updateScale(value)),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          final cropped = await controller.crop(cropperKey: cropImage);
          Navigator.of(context).push<void>(
            MaterialPageRoute(
              builder: (context) => Scaffold(
                appBar: AppBar(),
                body: Center(child: Image.memory(cropped!)),
              ),
              fullscreenDialog: true,
            ),
          );
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}

这段代码展示了如何在一个Flutter应用程序中集成CustomImageCutter插件,包括设置控制器、使用滑块调整图像大小以及裁剪图像并显示裁剪结果。


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

1 回复

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


当然,下面是一个关于如何在Flutter应用中使用custom_image_cutter插件进行图片裁剪的示例代码。这个插件允许用户从图片中选择一个区域进行裁剪,非常适合需要图片编辑功能的应用。

首先,确保你已经在pubspec.yaml文件中添加了custom_image_cutter依赖:

dependencies:
  flutter:
    sdk: flutter
  custom_image_cutter: ^x.y.z  # 替换为最新版本号

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

接下来,你可以在你的Flutter应用中按照以下步骤使用custom_image_cutter

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:image_cropper/image_cropper.dart';
import 'package:custom_image_cutter/custom_image_cutter.dart';
import 'dart:io';

注意:custom_image_cutter可能依赖于image_cropper,所以你可能也需要导入image_cropper

  1. 定义一个状态类来管理状态和生命周期
class ImageCropperPage extends StatefulWidget {
  @override
  _ImageCropperPageState createState() => _ImageCropperPageState();
}

class _ImageCropperPageState extends State<ImageCropperPage> {
  File? _imageFile;
  CroppedFile? _croppedFile;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Cropper Example'),
      ),
      body: Center(
        child: _imageFile == null
            ? Text('No image selected.')
            : Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Image.file(_imageFile!),
                  SizedBox(height: 20),
                  ElevatedButton(
                    onPressed: () async {
                      final Result? result = await Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (context) => ImageCutter(
                            image: _imageFile!,
                            width: 300,
                            height: 300,
                          ),
                        ),
                      );

                      if (result?.data != null) {
                        setState(() {
                          _croppedFile = result!.data as CroppedFile;
                        });

                        // 显示裁剪后的图片或进行其他处理
                        print('Cropped file path: ${_croppedFile!.path}');
                      }
                    },
                    child: Text('Crop Image'),
                  ),
                ],
              ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _pickImage,
        tooltip: 'Pick Image',
        child: Icon(Icons.add_a_photo),
      ),
    );
  }

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

    setState(() {
      if (pickedFile != null) {
        _imageFile = File(pickedFile!.path);
      }
    });
  }
}
  1. main.dart中使用这个页面
import 'package:flutter/material.dart';
import 'image_cropper_page.dart';  // 假设你将上面的代码保存为image_cropper_page.dart

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Image Cropper Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ImageCropperPage(),
    );
  }
}

这个示例展示了如何从图库中选择一张图片,并使用custom_image_cutter插件进行裁剪。裁剪后的图片可以通过_croppedFile变量访问,你可以根据需要对它进行进一步处理,比如显示或保存到服务器。

请注意,由于插件和依赖库可能会更新,确保查阅最新的custom_image_cutter文档以获取最新的使用方法和API变更。

回到顶部