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

Flutter中如何限制Wechat Asset Picker仅选择JPG图片

Flutter 多选JPG图片并压缩上传解决方案

依赖选择说明

  • 无需更换现有第三方依赖,wechat_assets_picker原生支持资源类型、格式过滤,完全可以满足仅选择JPG图片的需求,搭配现有flutter_image_compress即可实现完整流程,额外更换依赖会增加不必要的包体积和适配成本。
  • 如果确实需要替换,可选择multi_image_picker_plus,但功能和现有组件重合度极高,不推荐替换。

Wechat Asset Picker 仅展示、选择JPG图片配置方法

配置分两步完成,先过滤非图片资源,再过滤非JPG格式的图片:

  1. 在AssetPickerConfig中设置requestType: RequestType.image,直接隐藏所有视频、音频等非图片类资源
  2. 配置filterOptions参数,通过MIME类型规则仅保留JPG格式图片可被选中

修正后的选图代码如下:

final List<myimagepicker.AssetEntity>? result =
                  await myimagepicker.AssetPicker.pickAssets(
                context,
                pickerConfig: const myimagepicker.AssetPickerConfig(
                  gridCount: 3,
                  maxAssets: 10,
                  pickerTheme: null,
                  themeColor: Color.fromARGB(255, 245, 91, 165),
                  pageSize: 30,
                  // 仅加载图片类资源,过滤视频、音频
                  requestType: myimagepicker.RequestType.image,
                  // 仅保留JPG/JPEG格式图片
                  filterOptions: myimagepicker.FilterOptionGroup(
                    imageOption: myimagepicker.FilterOption(
                      mimeType: myimagepicker.MimeType.jpeg,
                    ),
                  ),           
                ),
              );

压缩环节兜底适配(避免非JPG资源导致压缩报错)

由于部分安卓、iOS机型存在系统资源标识和实际格式不符的情况,选图完成后、压缩前增加一层格式校验和转码逻辑,确保进入压缩流程的文件一定是JPG格式:

// 遍历选中的资源列表处理
for (int i = 0; i < result.length; i++) {
  final asset = result[i];
  final originFile = await asset.file;
  if (originFile == null) continue;

  // 获取资源实际MIME类型
  final mimeType = await asset.mimeTypeAsync;
  String processPath = originFile.absolute.path;

  // 非JPG格式先转码为JPG临时文件
  if (mimeType != 'image/jpeg') {
    final tempDir = await getTemporaryDirectory();
    processPath = '${tempDir.path}/temp_${DateTime.now().millisecondsSinceEpoch}.jpg';
    await FlutterImageCompress.compressAndGetFile(
      originFile.absolute.path,
      processPath,
      format: CompressFormat.jpeg,
      quality: 100,
    );
  }

  // 原有JPG压缩逻辑
  var compressedFile = await FlutterImageCompress.compressAndGetFile(
    processPath,
    outPath,
    quality: 50,
    format: CompressFormat.jpeg,
  );

  // 后续执行Firestore上传逻辑即可
}

注意:请确认本地依赖的wechat_assets_picker版本不低于8.0.0,低版本的过滤参数命名存在差异,可升级到最新稳定版后使用上述配置。

内容的提问来源于stack exchange,提问作者Mark Nugromentry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:42:22