multi_image_picker
Flutterのmulti_image_pickerというパッケージがあります。
これはデバイスの画像ライブラリにアクセスし画像を複数枚選ぶことができるパッケージです。
生じた問題
multi_image_picker: ^4.7.14
バージョンを4.7.14
でインストールし、
iOSのlivePhotoを選択すると、エラーが生じる。
iOSの画像の拡張子は.heicで、これは.jpgに変換する様にコードも描いていたのでなぜエラーが起きるのか不明
調べてみると、livePhotoの拡張子が、.MOVになっていました。
選択した画像は、Assetなので、
Image.asset(name)
で表示すれば問題ないですが、保存するときには困りました。
原因
正直あまりよくわからないですが、
multi_image_pickerが4.7.12の時に、
Fix picking live images on iOS will now pick the correct image
約:iOSでのライブ画像の選択を修正し、正しい画像を選択するようになりました
と変更ログがありました。
これで変更があったのかもです。
iOSのlivePhotoは撮影すると、.heicと.movの二つのファイルが保存されるそうです。
したがって、選択するときに.heicではなく.movの方が選択されてしまうみたいです。
対処
.MOVののファイルを、.jpgに変換したら問題なく、画像になってくれました。
mime_typeというパッケージを使って、動画ファイルであることを調べて拡張子を変更できる様にしました、
ちょっと適当なサンプルなんですが、画像を選択して1枚目の画像のファイル名を変更するようにしました。
printでファイル名みれるようにしたが、ファイル名は変わってます。
loadAssets() async {
List<Asset> resultList = List<Asset>();
String name;
try {
resultList = await MultiImagePicker.pickImages(
maxImages: 300,
enableCamera: true,
materialOptions: MaterialOptions(),
);
} on Exception catch (e) {
print(e);
}
setState(() {
name = resultList[0].name;
});
print('元の画像:$name');
if (mime(name) == 'video/quicktime') {
name = name.toLowerCase().replaceAll('.mov', '.jpg');
}
print('変更後の画像:$name');
}