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

Flutter中使用Image.memory加载HEIC/HEIF图片报错求助

Flutter加载HEIC/HEIF图片解决方案

Flutter自带的Image.memory不支持HEIC/HEIF格式解码,直接加载会出现解码错误,以下是两种可行的解决方法:

方法一:使用heic_to_jpeg库转格式

这个库可以直接将HEIC格式的字节数据转换为JPEG格式,操作简单:

  1. 在pubspec.yaml中添加依赖:
dependencies:
  heic_to_jpeg: ^1.0.0 # 请使用最新版本
  1. 修改文件选择逻辑,对HEIC文件进行格式转换:
Uint8List? pickedPhotoFile;
FilePickerResult? selectedFile;

Future<void> selectFile() async {
  selectedFile = await FilePicker.platform.pickFiles(type: FileType.any);

  if (selectedFile != null) {
    final file = selectedFile!.files.single;
    // 判断是否为HEIC/HEIF格式
    final extension = file.extension?.toLowerCase();
    if (extension == 'heic' || extension == 'heif') {
      // 将HEIC字节转成JPEG
      pickedPhotoFile = await HeicToJpeg.convert(file.bytes!);
    } else {
      pickedPhotoFile = file.bytes;
    }
  }
  setState(() {});
}
  1. 图片显示代码保持不变即可,转换后的JPEG字节可以直接用Image.memory加载。

方法二:使用image库结合heic_decoder解码

如果需要更灵活的图像处理(比如调整尺寸),可以用这两个库组合:

  1. 添加依赖:
dependencies:
  image: ^4.0.17 # 最新版本
  heic_decoder: ^1.0.2 # 最新版本
  1. 解码并转换格式:
import 'package:image/image.dart' as img;
import 'package:heic_decoder/heic_decoder.dart';

Uint8List? pickedPhotoFile;
FilePickerResult? selectedFile;

Future<void> selectFile() async {
  selectedFile = await FilePicker.platform.pickFiles(type: FileType.any);

  if (selectedFile != null) {
    final file = selectedFile!.files.single;
    final extension = file.extension?.toLowerCase();
    if (extension == 'heic' || extension == 'heif') {
      // 解码HEIC为Image对象
      final heicImage = await HeicDecoder.decode(file.bytes!);
      // 转成PNG字节(也可以转JPEG:img.encodeJpg(heicImage))
      pickedPhotoFile = img.encodePng(heicImage);
    } else {
      pickedPhotoFile = file.bytes;
    }
  }
  setState(() {});
}

注意:heic_decoder在Android平台需要额外配置(参考库文档),iOS平台无需额外操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:42:39