34 lines
969 B
Dart
34 lines
969 B
Dart
import 'dart:typed_data';
|
||
|
||
import 'package:flutter_image_compress/flutter_image_compress.dart';
|
||
|
||
/// Compresses a JPEG image to reduce upload size.
|
||
///
|
||
/// Target: ≤ 200 KB for verification selfies. Falls back to the original
|
||
/// bytes if compression fails so the upload is never blocked.
|
||
class ImageCompressService {
|
||
ImageCompressService._();
|
||
|
||
/// Compress [bytes] (JPEG/PNG) down to [quality] (1–100).
|
||
/// Resizes the longest side to at most [maxDimension] pixels.
|
||
static Future<Uint8List> compress(
|
||
Uint8List bytes, {
|
||
int quality = 70,
|
||
int maxDimension = 800,
|
||
}) async {
|
||
try {
|
||
final result = await FlutterImageCompress.compressWithList(
|
||
bytes,
|
||
minHeight: maxDimension,
|
||
minWidth: maxDimension,
|
||
quality: quality,
|
||
format: CompressFormat.jpeg,
|
||
);
|
||
return result;
|
||
} catch (_) {
|
||
// If compression fails on any platform, return original bytes.
|
||
return bytes;
|
||
}
|
||
}
|
||
}
|