Flutter 使用 Dart 内置的图片压缩库

21 min read

在 Flutter 中,可以使用内置的 dart:ui 库提供的图片处理和压缩功能来进行图片压缩。

首先,确保在 pubspec.yaml 文件中的 dependencies 部分添加了 flutter_image_compress 包的引用:

dependencies:
  flutter_image_compress: ^1.0.0

然后,运行 flutter packages get 命令来获取包。

接下来,可以使用 flutter_image_compress 包提供的方法来压缩图片。

import 'dart:io';
import 'package:flutter_image_compress/flutter_image_compress.dart';

// 压缩图片方法
Future<File> compressImage(File file, String targetPath) async {
  var result = await FlutterImageCompress.compressAndGetFile(
    file.absolute.path,
    targetPath,
    quality: 75,
    format: CompressFormat.jpeg,
  );

  return result;
}

// 示例用法
void compressExample() async {
  File imageFile = File('/path/to/image.jpg');
  String targetPath = '/path/to/compressed_image.jpg';

  File compressedFile = await compressImage(imageFile, targetPath);
  print('Compressed file size: ${compressedFile.lengthSync()}');
}

在上述示例中,compressImage 方法接受一个 File 对象和目标路径作为参数,并通过调用 FlutterImageCompress.compressAndGetFile 方法来压缩图片。可以通过调整 quality 参数来控制压缩质量,范围为 0-100。format 参数指定了输出的图片格式,可选值有 CompressFormat.jpegCompressFormat.png

压缩完成后,可以通过 compressedFile 对象获取压缩后的图片文件,然后可以根据需要进行进一步的处理或上传等操作。

注意,flutter_image_compress 包使用了 native 代码,因此需要确保项目的 iOS 和 Android 配置正确,以便与 native 代码进行交互。