Flutter -帮助我压缩图像

nqwrtyyt  于 2023-01-06  发布在  Flutter
关注(0)|答案(1)|浏览(166)

我正在尝试压缩通过file_picker包选取的图像。我正在使用flutter_native_image压缩图像。但图像未被压缩。
请看一下我的代码,让我知道哪里出错了?谢谢。
另外,我不能使用image_picker包,因为它停止工作了,我不得不切换到file_picker。

class UploadSingleImageToFirestore extends StatefulWidget {
  const UploadSingleImageToFirestore({super.key});

  @override
  State<UploadSingleImageToFirestore> createState() =>
      _UploadSingleImageToFirestoreState();
}

class _UploadSingleImageToFirestoreState
    extends State<UploadSingleImageToFirestore> {
  File? _pickedImage;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: appBarTitle(context, 'Upload Single Image'),
      backgroundColor: ZayyanColorTheme.zayyanGrey,
      body: _pickedImage != null
          ? Center(
              child: Column(
                children: [
                  ANPFormContainer(
                    fieldTitle: 'Single Image',
                    subTitle: 'Pick Single Image',
                    child: Padding(
                      padding: const EdgeInsets.symmetric(horizontal: 140),
                      child: Image.file(
                        File(_pickedImage!.path),
                        height: 300,
                        width: 300,
                      ),
                    ),
                  ),
                  addVerticalSpacer(25),
                  ElevatedButton(
                      onPressed: () => pickImage(),
                      child: const Text('Pick Image')),
                  ElevatedButton(
                      onPressed: () => _updateMedia(),
                      child: const Text('Upload Images')),
                ],
              ),
            )
          : InkWell(
              onTap: () => pickImage(),
              child: Center(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: const [
                    Icon(Icons.add_a_photo),
                    SizedBox(height: 10),
                    Text('Tap anywhere to pick images')
                  ],
                ),
              ),
            ),
    );
  }

  pickImage() async {
    FilePickerResult? result =
        await FilePicker.platform.pickFiles(type: FileType.image);

    if (result != null) {
      File file = File(result.files.single.path!);
      print(file);
      compressImage(file);
      setState(() {
        _pickedImage = file;
      });
    } else {
      print("No file selected");
    }
  }

  compressImage(path) async {
    if (_pickedImage == null) return;
    File compressedFile = await FlutterNativeImage.compressImage(
      path,
      quality: 10,
      percentage: 20,
      targetWidth: 600,
    );
    return compressedFile;
  }

  _updateMedia() async {
    CollectionReference collectionRef =
        FirebaseFirestore.instance.collection('Users');
    final coverUrl = await context
        .read<FirebaseStorageService>()
        .saveCoverInCloudStorage(
            file: _pickedImage!,
            state: 'Test State',
            township: 'Test Township',
            propertyType: 'Test House',
            propertyid: 'HYG-1234');
    return collectionRef
        .doc('gMH1s0XUIvWdD2fYfqMvPc915a03')
        .update({
          'logo': coverUrl,
        })
        .then((value) => ScaffoldMessenger.of(context).showSnackBar(
            const SnackBar(content: Text('Property Info Updated'))))
        .catchError((error) => ScaffoldMessenger.of(context).showSnackBar(
            SnackBar(content: Text('+++ Failed to update user: $error"'))));
  }
}
oaxa6hgo

oaxa6hgo1#

如果您的需求只是图像,请使用image_picker而不是file_picker

正在从图像选择器中提取

您可以使用ImagePicker中内置的imaqeQuality属性来压缩图像。此属性采用0到100之间的值,表示原始图像质量的百分比。

File _image;

  Future getImage() async {
    var image = await ImagePicker.pickImage(
        source: ImageSource.gallery,  
                imageQuality: 25,
    );

    setState(() {
      _image = image;
    });
  }

使用flutter_native_image进行压缩

Future<File> compressFile(File file) async{
    File compressedFile = await FlutterNativeImage.compressImage(file.path,
        quality: 5,);
    return compressedFile;
  }

另请参阅:Flutter the best way to compress image

相关问题