Flutter如何实现图片压缩
在Flutter中如何实现图片压缩?我想在上传图片前减小文件大小,但不知道具体该用什么插件或方法。目前尝试过ImagePicker选图,但原图体积太大直接上传很慢。有没有推荐的压缩方案?最好能控制压缩质量和支持批量处理。
2 回复
Flutter中可使用flutter_image_compress库实现图片压缩。通过compressAndGetFile方法,可调整质量、尺寸等参数,简单高效。
更多关于Flutter如何实现图片压缩的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中实现图片压缩,可以通过以下方法:
1. 使用image_picker插件(推荐)
import 'package:image_picker/image_picker.dart';
// 选择并压缩图片
Future<XFile?> pickAndCompressImage() async {
final ImagePicker picker = ImagePicker();
// 选择图片时直接设置压缩质量
final XFile? image = await picker.pickImage(
source: ImageSource.gallery,
maxWidth: 800, // 最大宽度
maxHeight: 800, // 最大高度
imageQuality: 70, // 压缩质量 (0-100)
);
return image;
}
2. 使用flutter_image_compress插件
import 'package:flutter_image_compress/flutter_image_compress.dart';
// 压缩图片文件
Future<XFile?> compressImage(File file) async {
final result = await FlutterImageCompress.compressAndGetFile(
file.absolute.path,
'${file.path}_compressed.jpg',
quality: 70, // 压缩质量
minWidth: 800, // 最小宽度
minHeight: 800, // 最小高度
rotate: 0, // 旋转角度
);
return result;
}
3. 完整示例
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
class ImageCompressExample extends StatefulWidget {
@override
_ImageCompressExampleState createState() => _ImageCompressExampleState();
}
class _ImageCompressExampleState extends State<ImageCompressExample> {
XFile? _compressedImage;
Future<void> _pickImage() async {
final ImagePicker picker = ImagePicker();
final XFile? image = await picker.pickImage(
source: ImageSource.gallery,
maxWidth: 800,
maxHeight: 800,
imageQuality: 70,
);
setState(() {
_compressedImage = image;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (_compressedImage != null)
Image.file(File(_compressedImage!.path)),
ElevatedButton(
onPressed: _pickImage,
child: Text('选择并压缩图片'),
),
],
),
),
);
}
}
主要参数说明:
- maxWidth/maxHeight: 限制图片尺寸
- imageQuality: 压缩质量 (0-100,数值越小压缩越厉害)
- minWidth/minHeight: 最小尺寸限制
依赖配置:
在 pubspec.yaml 中添加:
dependencies:
image_picker: ^1.0.4
flutter_image_compress: ^1.1.3
选择图片时直接使用 image_picker 的压缩参数是最简单的方法,如果需要更精细的控制,可以使用 flutter_image_compress 插件。

