概要
カメラで撮影した画像をアップロードしたり、画面上に表示したりするアプリを開発しているときに、端末によってはカメラの解像度が高く(画像サイズが大きく)動作がもたつくのでアプリ内で圧縮してから扱う方法を模索しました。
結論
image_picker
を使えば簡単に実装できます!
設定
pubspec.yaml
dependencies:
image_picker: [version]
アプリケーションコード
.dart
import 'package:image_picker/image_picker.dart';
で、インポートして、
.dart
final ImagePicker picker = ImagePicker();
final pickedFile = await picker.getImage(source: ImageSource.camera, imageQuality: 80);
これだけで実装できてしまいます!
imageQuality
の値を低くすると圧縮率が上がります。
上記のコードに続けて、下記のように書いてあげると、dart.io.File
を生成することができます。
.dart
final image = File(pickedFile.path);
なお、ImagePicker().getImage
のシグネチャは以下のようになっており、画像の上限幅・高さの指定やカメラの指定(背面/ 前面)もできます。
.dart
Future<PickedFile> getImage({
@required ImageSource source,
double maxWidth,
double maxHeight,
int imageQuality,
CameraDevice preferredCameraDevice = CameraDevice.rear,
}) {
// 略
}
他の方法
flutter_image_compress
でも画像の圧縮が可能です。
設定
pubspec.yaml
dependencies:
flutter_image_compress: [version]
アプリケーションコード
.dart
import 'package:flutter_image_compress/flutter_image_compress.dart';
で、インポートして、
.dart
Future<File> compressFile(File file) async {
var result = await FlutterImageCompress.compressAndGetFile(
file.absolute.path,
file.absolute.path,
quality: 80,
);
return result;
}
こんな感じでも実装できます!