Team Color, image compression for attendance verification, improved wherebouts
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user