import 'dart:io'; import 'package:image/image.dart' as img; import 'package:path_provider/path_provider.dart'; /// 上传前压缩:限制长边、JPEG 质量,减轻内存与带宽;解码失败时返回原文件。 Future compressImageForUpload( File source, { int maxSide = 2048, int jpegQuality = 85, }) async { try { final raw = await source.readAsBytes(); final image = img.decodeImage(raw); if (image == null) return source; var work = image; if (work.width > maxSide || work.height > maxSide) { if (work.width >= work.height) { work = img.copyResize(work, width: maxSide, interpolation: img.Interpolation.linear); } else { work = img.copyResize(work, height: maxSide, interpolation: img.Interpolation.linear); } } final jpg = img.encodeJpg(work, quality: jpegQuality); final dir = await getTemporaryDirectory(); final out = File( '${dir.path}/upload_${DateTime.now().millisecondsSinceEpoch}.jpg', ); await out.writeAsBytes(jpg, flush: true); return out; } catch (_) { return source; } }