@@ -7,12 +7,20 @@ import 'load_balancer_utils.dart';
77const _kMaxDimension = 1920 ;
88const _kQuality = 85 ;
99
10- enum ImageType { gif, jpeg }
10+ enum ImageType { gif, jpeg, png }
1111
1212extension ImageTypeExtension on ImageType {
13- String get mimeType => this == ImageType .gif ? 'image/gif' : 'image/jpeg' ;
13+ String get mimeType => switch (this ) {
14+ ImageType .gif => 'image/gif' ,
15+ ImageType .jpeg => 'image/jpeg' ,
16+ ImageType .png => 'image/png' ,
17+ };
1418
15- String get extension => this == ImageType .gif ? 'gif' : 'jpg' ;
19+ String get extension => switch (this ) {
20+ ImageType .gif => 'gif' ,
21+ ImageType .jpeg => 'jpg' ,
22+ ImageType .png => 'png' ,
23+ };
1624}
1725
1826(Uint8List , ImageType , int , int )? compressImage (Uint8List data) {
@@ -47,6 +55,18 @@ extension ImageTypeExtension on ImageType {
4755 image = copyResize (image, width: targetWidth, height: targetHeight);
4856 }
4957
58+ final maxChannelValue = image.maxChannelValue;
59+ final hasTransparency = image.any ((pixel) => pixel.a < maxChannelValue);
60+
61+ if (hasTransparency) {
62+ return (
63+ Uint8List .fromList (encodePng (image)),
64+ ImageType .png,
65+ image.width,
66+ image.height,
67+ );
68+ }
69+
5070 return (
5171 JpegEncoder (quality: _kQuality).encode (image),
5272 ImageType .jpeg,
0 commit comments