Flutter图片选择裁剪压缩插件selectcropcompressimage的使用

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

Flutter图片选择裁剪压缩插件SelectCropCompressImage的使用

简介

SelectCropCompressImage 是一个非常实用的Flutter插件,它简化了在应用内选择、裁剪和压缩图片的过程,而无需用户离开应用或使用其他第三方工具。该插件允许用户从手机相册中选择图片或通过手机摄像头拍摄新图片,并在应用内对图片进行裁剪和压缩。

功能

  • 图片选择:从相册中选择图片或通过摄像头拍摄新图片。
  • 图片裁剪:根据用户需求调整图片的尺寸或选择预定义的宽高比。
  • 图片压缩:压缩图片以减小文件大小,同时保持较高的图像质量。

截图

Demo Image

入门指南

1. 导入插件

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

dependencies:
  selectcropcompressimage: ^最新版本

然后运行 flutter pub get 来安装插件。

2. 配置(仅限Android)

对于Android项目,需要在 AndroidManifest.xml 文件中添加以下代码:

<activity
    android:name="com.yalantis.ucrop.UCropActivity"
    android:screenOrientation="portrait"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>

iOS项目不需要额外配置。

3. 使用插件

创建 SelectCropCompressImage 类的实例,并调用 selectCropCompressImageFromGalleryselectCropCompressImageFromCamera 方法来选择、裁剪和压缩图片。

必填参数

  • compressionAmount:压缩程度,范围为0到100。值越大,压缩越小,图片质量越高。
  • context:构建上下文,用于匹配图片裁剪界面的主题颜色。

可选参数

  • aspectRatioX:裁剪时的X轴宽高比,默认为1。
  • aspectRatioY:裁剪时的Y轴宽高比,默认为1。

示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用 SelectCropCompressImage 插件来选择、裁剪和压缩图片。

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: SelectCropCompressImageScreen(),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.blue,
        title: const Text("SelectCropCompressImage"),
        centerTitle: true,
      ),
      body: Container(
        width: MediaQuery.of(context).size.width,
        height: MediaQuery.of(context).size.height,
        padding: const EdgeInsets.symmetric(horizontal: 16),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () async {
                // 创建SelectCropCompressImage实例
                SelectCropCompressImage selectCropCompressImage = SelectCropCompressImage();
                
                // 从相册中选择、裁剪并压缩图片
                Uint8List? selectedCroppedAndCompressImage = await selectCropCompressImage.selectCropCompressImageFromGallery(
                  compressionAmount: 30, // 压缩程度为30
                  context: context,     // 构建上下文
                  title: "SelectCropCompressApp", // 标题
                );
                
                // 如果图片不为空,则可以对其进行处理
                if (selectedCroppedAndCompressImage != null) {
                  // 处理图片,例如显示或上传
                  print("图片已成功选择、裁剪并压缩");
                } else {
                  // 用户取消操作
                  print("用户取消了图片选择");
                }
              },
              child: const Text("从相册选择图片"),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                // 创建SelectCropCompressImage实例
                SelectCropCompressImage selectCropCompressImage = SelectCropCompressImage();
                
                // 通过摄像头拍摄、裁剪并压缩图片
                Uint8List? selectedCroppedAndCompressImage = await selectCropCompressImage.selectCropCompressImageFromCamera(
                  compressionAmount: 30, // 压缩程度为30
                  context: context,     // 构建上下文
                  title: "SelectCropCompressApp", // 标题
                );
                
                // 如果图片不为空,则可以对其进行处理
                if (selectedCroppedAndCompressImage != null) {
                  // 处理图片,例如显示或上传
                  print("图片已成功拍摄、裁剪并压缩");
                } else {
                  // 用户取消操作
                  print("用户取消了图片拍摄");
                }
              },
              child: const Text("拍摄照片"),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用select_crop_compress_image插件来实现图片选择、裁剪和压缩功能的代码示例。

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

dependencies:
  flutter:
    sdk: flutter
  select_crop_compress_image: ^x.x.x  # 请替换为最新版本号

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

接下来,在你的Dart代码中,你可以按照以下步骤使用select_crop_compress_image插件:

  1. 导入插件
import 'package:flutter/material.dart';
import 'package:select_crop_compress_image/select_crop_compress_image.dart';
  1. 定义状态变量
class _MyAppState extends State<MyApp> {
  File? _imageFile;
}
  1. 实现图片选择、裁剪和压缩功能
class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  File? _imageFile;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('图片选择、裁剪和压缩'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              _imageFile == null
                  ? Text('没有选择图片')
                  : Image.file(_imageFile!),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () async {
                  final result = await ImagePicker().pickImage(source: ImageSource.gallery);
                  if (result != null) {
                    File? croppedFile = await ImageCropper().cropImage(
                      sourcePath: result.path,
                      aspectRatioPresets: [
                        CropAspectRatioPreset.square,
                        CropAspectRatioPreset.ratio3x2,
                        CropAspectRatioPreset.original,
                        CropAspectRatioPreset.ratio4x3,
                        CropAspectRatioPreset.ratio16x9
                      ],
                      androidUiSettings: AndroidUiSettings(
                          toolbarTitle: '裁剪图片',
                          toolbarColor: Colors.deepOrange,
                          toolbarWidgetColor: Colors.white,
                          initAspectRatio: CropAspectRatioPreset.original,
                          lockAspectRatio: false),
                      iosUiSettings: IOSUiSettings(
                        minimumAspectRatio: 1.0,
                      ),
                    );
                    if (croppedFile != null) {
                      File? compressedFile = await FlutterImageCompress.compressWithFile(
                        croppedFile.path,
                        quality: 80, // 压缩质量,0-100
                      );
                      setState(() {
                        _imageFile = compressedFile;
                      });
                    }
                  }
                },
                child: Text('选择并裁剪图片'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们使用了ImagePicker来选择图片,ImageCropper来裁剪图片,以及FlutterImageCompress来压缩图片。注意,select_crop_compress_image插件内部实际上依赖了这些插件,但为了明确展示各个步骤,这里单独引入了它们。

请确保你已经添加了必要的权限到你的AndroidManifest.xml(针对Android)和Info.plist(针对iOS)文件中,以允许应用访问存储和相机(如果需要)。

这个示例提供了一个基本的工作流程,你可以根据需要进行进一步的自定义和扩展。

回到顶部