如何在Flutter/Dart中将ImagePicker选取的.jpg转为.bmp文件?
Flutter JPG转BMP(支持Android/iOS)解决方案
这里用纯Dart实现的image库搞定转换,完全跨平台,不用折腾原生代码,步骤如下:
1. 添加依赖
在pubspec.yaml里加入两个必要包:
dependencies: image: ^4.0.17 # 用pub上的最新版本即可 image_picker: ^1.0.4 # 确保已引入图片选择库
执行flutter pub get安装依赖。
2. 核心转换代码
第一步:获取选中的JPG图片
用ImagePicker读取图片的字节数据:
import 'package:image_picker/image_picker.dart'; import 'dart:typed_data'; import 'dart:io'; final XFile? pickedImage = await ImagePicker().pickImage(source: ImageSource.gallery); if (pickedImage == null) return; // 读取图片字节 final Uint8List jpgBytes = await pickedImage.readAsBytes();
第二步:解码JPG并编码为BMP
借助image库完成格式转换:
import 'package:image/image.dart' as img; // 解码JPG图片 img.Image? decodedJpg = img.decodeJpg(jpgBytes); if (decodedJpg == null) { // 处理图片解码失败的情况,比如弹出提示 return; } // 编码为BMP格式字节 Uint8List bmpBytes = img.encodeBmp(decodedJpg);
第三步:保存BMP到本地(可选)
如果需要把转换后的BMP存到设备里:
import 'package:path_provider/path_provider.dart'; // 获取应用专属文档目录 final Directory appDocDir = await getApplicationDocumentsDirectory(); final String bmpFilePath = '${appDocDir.path}/converted_image.bmp'; // 写入文件 await File(bmpFilePath).writeAsBytes(bmpBytes);
注意事项
image库是纯Dart实现,无需配置Android/iOS原生项目,直接跨平台运行- 处理超大尺寸图片时,建议先缩小分辨率再转换,避免内存溢出:
img.Image resizedImage = img.copyResize(decodedJpg, width: 1000); // 按宽度缩放 Uint8List bmpBytes = img.encodeBmp(resizedImage); - 测试时覆盖不同色彩模式、分辨率的JPG图片,确保转换后的BMP能正常打开
内容的提问来源于stack exchange,提问作者Jaimis Domadiya
相关产品推荐
相关产品推荐

