Flutter Resize ImagePicker 图片在上传到 firebase 之前
Flutter Resize ImagePicker Image before uploading to firebase
我正在使用 flutter 构建一个演示壁纸应用程序,用户可以在其中将图像上传到 firebase。加载这些图像时,我首先要加载图像的小版本,只有在用户单击图像后,才加载完整版本。
为了实现这一点,我想我会在用户选择图像后在后台简单地上传 2 个版本。现在我正在为如何实现这一点而苦苦挣扎。
以下是用户如何使用 ImagePicker 将图像选取到文件 var.
Future pickImage() async {
var tempImage = await ImagePicker.pickImage(source: ImageSource.gallery, maxHeight: 2000);
print(tempImage.runtimeType);
setState(() {
inspirationimage = tempImage;
});
String result = await uploadImage();
}
如您所见,临时图像是全尺寸版本。我现在会有这样的东西:
var smallImage = tempImage.resize(height: 200);
显然这不起作用,因为 tempImage 是文件类型。知道这通常是如何解决的吗?
谢谢
由于您使用的是 Firebase,因此您可以使用 Firebase "Resize Image" extension. If you want to do it on client side however, take a look at 。
你为什么不让你的用户使用这个裁剪图像
image_cropper 1.3.1
插件?
link : https://pub.dev/packages/image_cropper
示例
// File image = await ImagePicker.pickImage(source: source);
final _picker = ImagePicker();
PickedFile image = await _picker.getImage(source: source);
if (image != null) {
// Remove crop attribute if we don't want to resize the image
File cropped = await ImageCropper.cropImage(
sourcePath: image.path,
aspectRatio: CropAspectRatio(ratioX: 1, ratioY: 1),
compressQuality: 100, // 100 means no compression
maxWidth: 700,
maxHeight: 700,
compressFormat: ImageCompressFormat.jpg,
androidUiSettings: AndroidUiSettings(
toolbarColor: primaryColor,
toolbarTitle: "RPS Cropper",
statusBarColor: primaryColor,
backgroundColor: Colors.white,
//toolbarWidgetColor: primaryColor,
activeControlsWidgetColor: primaryColor,
//dimmedLayerColor: primaryColor,
cropFrameColor: primaryColor,
cropGridColor: primaryColor,
),
);
我正在使用 flutter 构建一个演示壁纸应用程序,用户可以在其中将图像上传到 firebase。加载这些图像时,我首先要加载图像的小版本,只有在用户单击图像后,才加载完整版本。 为了实现这一点,我想我会在用户选择图像后在后台简单地上传 2 个版本。现在我正在为如何实现这一点而苦苦挣扎。
以下是用户如何使用 ImagePicker 将图像选取到文件 var.
Future pickImage() async {
var tempImage = await ImagePicker.pickImage(source: ImageSource.gallery, maxHeight: 2000);
print(tempImage.runtimeType);
setState(() {
inspirationimage = tempImage;
});
String result = await uploadImage();
}
如您所见,临时图像是全尺寸版本。我现在会有这样的东西:
var smallImage = tempImage.resize(height: 200);
显然这不起作用,因为 tempImage 是文件类型。知道这通常是如何解决的吗?
谢谢
由于您使用的是 Firebase,因此您可以使用 Firebase "Resize Image" extension. If you want to do it on client side however, take a look at
你为什么不让你的用户使用这个裁剪图像
image_cropper 1.3.1
插件?
link : https://pub.dev/packages/image_cropper
示例
// File image = await ImagePicker.pickImage(source: source);
final _picker = ImagePicker();
PickedFile image = await _picker.getImage(source: source);
if (image != null) {
// Remove crop attribute if we don't want to resize the image
File cropped = await ImageCropper.cropImage(
sourcePath: image.path,
aspectRatio: CropAspectRatio(ratioX: 1, ratioY: 1),
compressQuality: 100, // 100 means no compression
maxWidth: 700,
maxHeight: 700,
compressFormat: ImageCompressFormat.jpg,
androidUiSettings: AndroidUiSettings(
toolbarColor: primaryColor,
toolbarTitle: "RPS Cropper",
statusBarColor: primaryColor,
backgroundColor: Colors.white,
//toolbarWidgetColor: primaryColor,
activeControlsWidgetColor: primaryColor,
//dimmedLayerColor: primaryColor,
cropFrameColor: primaryColor,
cropGridColor: primaryColor,
),
);