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

import 'package:flutter_image_compress/flutter_image_compress.dart';
import 'package:video_compress/video_compress.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 {
      var fileThumbnail = await VideoCompress.getFileThumbnail(videoPath, quality: 50, position: -1);
      return fileThumbnail.path;
    } catch (e) {
      print('生成视频缩略图出错: $e');
      return null;
    }

    // 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;
    // }
  }
}