Flutter HEIF图片转换插件heif_converter的使用

发布于 1周前 作者 eggper 来自 Flutter

Flutter HEIF图片转换插件heif_converter的使用

简介

heif_converter 是一个用于将 HEIC/HEIF 文件转换为 PNG/JPEG 图像的 Flutter 插件。

安装

pubspec.yaml 文件中添加该插件依赖:

dependencies:
  heif_converter: ^lastVersion

请确保将 ^lastVersion 替换为实际的最新版本号。

如何使用

导入包

在 Dart 文件中导入插件:

import 'package:heif_converter/heif_converter.dart';

调用转换方法

使用本地 HEIC/HEIF 图像文件路径调用 convert 方法:

String jpgPath = await HeifConverter.convert(heicPath, output: jpgPath);
String pngPath = await HeifConverter.convert(heicPath, format: 'png');

示例 Demo

以下是一个完整的示例,展示如何下载 HEIC 文件并将其转换为 PNG 格式:

import 'dart:async';
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:heif_converter/heif_converter.dart';
import 'package:path_provider/path_provider.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final httpClient = HttpClient();
  String heicUrl = 'https://filesamples.com/samples/image/heic/sample1.heic';
  String? output;

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 异步初始化平台消息
  Future<void> initPlatformState() async {
    String? tmp = await downloadAndConvert();

    // 如果小部件在异步平台消息处理期间从树上移除,则我们希望丢弃回复而不是调用setState更新不存在的外观。
    if (!mounted) return;

    setState(() {
      output = tmp;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: (output != null && output!.isNotEmpty)
              ? Image.file(File(output!))
              : const Text('No Image'),
        ),
      ),
    );
  }

  // 下载并转换文件
  Future<String?> downloadAndConvert() async {
    File heicFile = await _downloadFile(heicUrl, 'sample.heic');
    return HeifConverter.convert(heicFile.path, format: 'png');
  }

  // 下载文件到本地
  Future<File> _downloadFile(String url, String filename) async {
    var request = await httpClient.getUrl(Uri.parse(url));
    var response = await request.close();
    var bytes = await consolidateHttpClientResponseBytes(response);
    String dir = (await getTemporaryDirectory()).path;
    File file = File('$dir/$filename');
    await file.writeAsBytes(bytes);
    return file;
  }
}

解释

  1. 下载文件:通过 _downloadFile 方法从指定 URL 下载 HEIC 文件,并保存到临时目录。
  2. 转换文件:使用 HeifConverter.convert 方法将下载的 HEIC 文件转换为 PNG 格式。
  3. 显示图像:在应用界面中显示转换后的图像。

这个示例展示了如何在 Flutter 应用中集成 heif_converter 插件来处理 HEIC/HEIF 图像文件。请根据需要调整代码和配置。


更多关于Flutter HEIF图片转换插件heif_converter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter HEIF图片转换插件heif_converter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用heif_converter插件来转换HEIF图片的示例代码。这个插件允许你将HEIF图片转换为其他格式,比如JPEG或PNG。

首先,确保你已经在pubspec.yaml文件中添加了heif_converter依赖:

dependencies:
  flutter:
    sdk: flutter
  heif_converter: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来,你可以在Dart代码中使用heif_converter插件。以下是一个简单的示例,展示了如何加载HEIF图片并将其转换为JPEG格式,然后将其保存到本地文件系统:

import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';
import 'dart:typed_data';
import 'package:heif_converter/heif_converter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('HEIF Converter Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: _convertHeifToJpeg,
            child: Text('Convert HEIF to JPEG'),
          ),
        ),
      ),
    );
  }

  Future<void> _convertHeifToJpeg() async {
    // 1. 获取应用的临时目录路径
    Directory tempDir = await getTemporaryDirectory();
    String tempPath = tempDir.path;

    // 2. 假设你有一个HEIF图片文件路径,这里使用本地资源举例
    // 注意:在实际使用中,你需要从正确的位置加载HEIF文件
    String heifFilePath = 'path/to/your/image.heif';  // 替换为你的HEIF文件路径

    // 3. 读取HEIF文件内容
    File heifFile = File(heifFilePath);
    Uint8List heifData = await heifFile.readAsBytes();

    // 4. 使用heif_converter插件将HEIF转换为JPEG
    try {
      Uint8List jpegData = await HeifConverter.convertToJpeg(heifData, quality: 90);

      // 5. 保存转换后的JPEG文件
      String jpegFilePath = '$tempPath/converted_image.jpeg';
      File jpegFile = File(jpegFilePath);
      await jpegFile.writeAsBytes(jpegData);

      // 6. 打印文件保存路径(可选)
      print('JPEG file saved at: $jpegFilePath');
    } catch (e) {
      // 处理错误
      print('Error converting HEIF to JPEG: $e');
    }
  }
}

在这个示例中,我们做了以下几步:

  1. 获取应用的临时目录路径。
  2. 假设你有一个HEIF图片文件路径(你需要根据实际情况替换路径)。
  3. 读取HEIF文件内容。
  4. 使用heif_converter插件将HEIF转换为JPEG,并指定JPEG的质量(0-100)。
  5. 将转换后的JPEG数据写入一个新文件,并保存。
  6. 打印保存的文件路径(可选)。

请确保你有合适的HEIF文件路径,并且在实际应用中处理文件路径和错误情况。此外,你可能还需要添加必要的权限(如读写存储权限)到你的AndroidManifest.xmlInfo.plist文件中,具体取决于你的应用需求。

回到顶部