首页 > 解决方案 > 如何在 Flutter 中压缩 PNG 图像?

问题描述

我是 Fluuter 的新手。我正在尝试在 Flutter 中压缩或调整图像大小,但是当图像为 PNG 格式时,我总是遇到不支持的错误:

Invalid image: ExifInterface got an unsupported image format file(ExifInterface supports JPEG and some RAW image formats only) or a corrupted JPEG file to ExifInterface.
W/ExifInterface(23209): java.io.IOException: Invalid byte order: ffff8950
W/ExifInterface(23209):     at android.media.ExifInterface.readByteOrder(ExifInterface.java:3121)
W/ExifInterface(23209):     at android.media.ExifInterface.isOrfFormat(ExifInterface.java:2437)
W/ExifInterface(23209):     at android.media.ExifInterface.getMimeType(ExifInterface.java:2315)
W/ExifInterface(23209):     at android.media.ExifInterface.loadAttributes(ExifInterface.java:1753)
W/ExifInterface(23209):     at android.media.ExifInterface.initForFilename(ExifInterface.java:2297)
W/ExifInterface(23209):     at android.media.ExifInterface.<init>(ExifInterface.java:1384)
W/ExifInterface(23209):     at io.flutter.plugins.imagepicker.ExifDataCopier.copyExif(ExifDataCopier.java:15)
W/ExifInterface(23209):     at io.flutter.plugins.imagepicker.ImageResizer.resizeImageIfNeeded(ImageResizer.java:41)
W/ExifInterface(23209):     at io.flutter.plugins.imagepicker.ImagePickerDelegate.handleImageResult(ImagePickerDelegate.java:530)

我尝试过使用image_pickerflutter_image_compress.dart但都不适用于 PNG 格式。这些软件包似乎只支持 JPG 格式。如何压缩 PNG 图像或以某种方式将 JPG 转换为 PNG?

这是我的代码:通过 uisngimage_picker

import 'package:image_picker/image_picker.dart';

    var image = await ImagePicker.pickImage(
        source: ImageSource.gallery,
        maxHeight: 250, // it says this params have compression function but only for JPEG
        maxWidth: 250,
        imageQuality: 90
    );

通过使用flutter_image_compress

import 'package:flutter_image_compress/flutter_image_compress.dart';

//if the origin image is PNG, it doesn't work
    var compressImageData = await FlutterImageCompress.compressWithFile( //returns Future<List<int>>
        image_path,
        minWidth: 50,
        minHeight: 50,
        quality: 100,
        format: CompressFormat.png //e.g. compress to PNG
    );

提前致谢。

标签: androidiosflutter

解决方案


Just using new Plugin name : File_support url : https://pub.dev/packages/file_support

This file support plugin is good when I used first time.It drastically reduce file size 2 mb to 70 kb.

 File compressimage = await FileSupport().compressImage(<Your image file>);


推荐阅读