📷
Androidでimage_gallery_saverパッケージを使用した写真保存で左90度回転した状態で保存される問題の解決方法
事象
Androidでimage_pickerパッケージを使用した写真撮影を行い、image_gallery_serverパッケージで写真を保存させた時に、端末内のギャラリー内で画像が左90度回転して保存されました。
iOSは問題なし。
ギャラリーで見た時は、以下のような感じです。。
せっかくのライジングフリーダムガンダムが、、
事象確認機種
- Androidバージョン:13
- 製品名:Galaxy A22 5G
使用パッケージ等のバージョン
- Flutter: 3.16.8
- image_picker: ^1.0.4
- image_gallery_saver: ^2.0.3
- image: ^4.1.3
解決法
imageパッケージのcopyRotate
メソッドを使用して、「回転されていない」状態の新しい画像データを生成し、その画像データを保存させるようにしました。
Sample.dart
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image/image.dart' as img;
import 'package:image_gallery_saver/image_gallery_saver.dart';
class ImageService {
const ImageService();
Future<img.Image?> decodeImageFile(File imageFile) async {
return await img.decodeImageFile(imageFile.path);
}
/// 画像を端末のアルバム内に保存する。
Future<void> saveToLocal(File imageFile) async {
if (Platform.isAndroid) {
final decodedImage = await decodeImageFile(imageFile);
if (decodedImage == null) {
return;
}
// 左90度回転し保存されるため、保存前に回転していない状態の画像データの生成を行う。
final rotatedImage = img.copyRotate(decodedImage, angle: 0);
final newImageFile = await imageFile.writeAsBytes(
img.encodeJpg(rotatedImage, quality: 50),
);
await saveImageFromByte(newImageFile);
return;
}
await saveImageFromByte(imageFile);
}
/// 画像データから画像を端末のアルバム内に保存する。
Future<void> saveImageFromByte(File imageFile) async {
final result = await ImageGallerySaver.saveImage(
imageFile.readAsBytesSync(),
);
debugPrint('Save result: $result');
}
}
修正後は以下のように保存されます。
作り途中だけどフリーダムかっけぇ、、
備忘録
Androidでの他の端末がどう動くかわからないので気になる所!
Discussion