1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Flutter】multi_image_pickerでlivePhotoの拡張子が.MOVになったので.jpgにした

Posted at

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');
}
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?