thumbnail_util.dart 1.39 KB
import 'dart:io';

import 'package:flutter_image_compress/flutter_image_compress.dart';
import 'package:video_thumbnail/video_thumbnail.dart';

/// 缩略图工具类
///
class ThumbnailUtil {
  ///  在指定目录下生成缩略图
  ///  返回缩略图路径
  static Future<String?> genTempThumbnail(File imageFile, Directory dir) async {
    try {
      // 缩略图路径
      final tempPath = dir.path;
      final targetPath = '$tempPath/thumbnail_${DateTime.now().millisecondsSinceEpoch}.jpg';

      // 压缩生成缩略图文件
      final compressedFile = await FlutterImageCompress.compressAndGetFile(imageFile.absolute.path, targetPath);

      return compressedFile!.path;
    } catch (e) {
      print('生成缩略图出错: $e');
      return null;
    }
  }

  /// 为视频文件生成缩略图
  /// 返回缩略图路径
  static Future<String?> genVideoThumbnail(String videoPath, Directory dir) async {
    try {
      final thumbnailPath = '${dir.path}/video_thumb_${DateTime.now().millisecondsSinceEpoch}.jpg';

      final thumbPath = await VideoThumbnail.thumbnailFile(
        video: videoPath,
        thumbnailPath: thumbnailPath,
        imageFormat: ImageFormat.JPEG,
        maxWidth: 128, // 缩略图最大宽度
        quality: 75, // 图片质量
      );

      return thumbPath;
    } catch (e) {
      print('生成视频缩略图出错: $e');
      return null;
    }
  }
}