Frontend first draft
This commit is contained in:
45
frontend/pshared/lib/utils/image/conversion.dart
Normal file
45
frontend/pshared/lib/utils/image/conversion.dart
Normal file
@@ -0,0 +1,45 @@
|
||||
import 'package:image/image.dart' as img;
|
||||
|
||||
import 'package:share_plus/share_plus.dart';
|
||||
|
||||
import 'package:pshared/api/errors/failed_to_read_image.dart';
|
||||
import 'package:pshared/config/constants.dart';
|
||||
import 'package:pshared/utils/image/transformed.dart';
|
||||
|
||||
|
||||
bool _imageTooBig(img.Image image, int maxDimension) {
|
||||
return image.width > maxDimension && image.height > maxDimension;
|
||||
}
|
||||
|
||||
bool _imageTooSmall(img.Image image, int maxDimension) {
|
||||
return image.width < maxDimension && image.height < maxDimension;
|
||||
}
|
||||
|
||||
TransformedImage _getImageBytes(img.Image image, int maxDimension) {
|
||||
List<int> imageBytes;
|
||||
|
||||
if (_imageTooBig(image, maxDimension) || _imageTooSmall(image, maxDimension)) {
|
||||
final double scale = image.width < image.height
|
||||
? maxDimension / image.width
|
||||
: maxDimension / image.height;
|
||||
|
||||
int newWidth = (image.width * scale).toInt();
|
||||
int newHeight = (image.height * scale).toInt();
|
||||
|
||||
final img.Image resizedImage = img.copyResize(image, width: newWidth, height: newHeight);
|
||||
image = resizedImage;
|
||||
}
|
||||
|
||||
imageBytes = img.encodePng(image);
|
||||
return TransformedImage(imageBytes, 'image/png');
|
||||
}
|
||||
|
||||
Future<TransformedImage> defaultTransformImage(XFile file, {int? maxDimension}) async {
|
||||
maxDimension = maxDimension ?? Constants.defaultDimensionLength;
|
||||
img.Image? image = img.decodeImage(await file.readAsBytes());
|
||||
if (image == null) {
|
||||
throw ErrorFailedToReadImage();
|
||||
}
|
||||
|
||||
return _getImageBytes(image, maxDimension);
|
||||
}
|
||||
6
frontend/pshared/lib/utils/image/transformed.dart
Normal file
6
frontend/pshared/lib/utils/image/transformed.dart
Normal file
@@ -0,0 +1,6 @@
|
||||
class TransformedImage {
|
||||
final List<int> bytes;
|
||||
final String imageType;
|
||||
|
||||
TransformedImage(this.bytes, this.imageType);
|
||||
}
|
||||
Reference in New Issue
Block a user