1
0

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 1 year has passed since last update.

【Flutter】Cameraライブラリで撮影した画像から高さ・横幅を取得する方法

Posted at

はじめに

Cameraライブラリで撮影した画像から高さ・横幅を取得する際に、Image型に変換を行わないと行けないのですが、変換方法によってはheight・widthの情報がnullになってしまい高さ・横幅を取得出来ません。
同じようなやり方で困っている方もいるかも知れませんのでそちらの変換方法について解説していきたいと思います。

開発環境

OS: MacOS
Flutter: 3.0.4
Flutter Channel: Stable
Dart: 2.17.5
Android Studio: Artic Fox | 2020.3.1 Patch4
cameraライブラリ: ^0.8.1+3

変換方法

前提:takePictureメソッドで撮影した画像が変換対象(XFile型)
①XFile型 → Uint8List型へ変換
②Uint8List型 → Image型へ変換

convert.dart
// 元の撮影画像
final imageForXFile = await controller.takePicture();

// ①XFile型 → Uint8List型へ変換
final imageForUint8 = await File(imageForXFile.path).readAsBytes();

// ②Uint8List型 → Image型へ変換
final imageForImage = decodeImage(imageForUint8)

使用例

Imageのheight・widthプロパティにアクセスできます。
ただしdecodeImageで返却される型はnull許容型のImage?であるため注意してください。

convert.dart
// 高さ
final height = imageForImage?.height

// 横幅
final width = imageForImage?.width

高さ・横幅が取得できない変換方法

変換後のImageのheight・widthの値がnullになってしまう変換方法もご紹介しておきます。
前提:takePictureメソッドで撮影した画像が変換対象(XFile型)
①XFile型 → File型へ変換
②File型 → Image型へ変換

convert.dart
// 元の撮影画像
final imageForXFile = await controller.takePicture();

// ①XFile型 → File型へ変換
final imageForFile = File(XFile.path)

// ②File型 → Image型へ変換
final imageForImage = Image.file(imageForFile)

まとめ

XFileをImageに変換する場合は、XFile → Uint8List → Imageの順に変換を行う。
ご覧いただきありがとうございました。
記事に不備や補足等がある場合はコメント頂けると助かります。

1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?