You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 06:35:03