【Swift】AVFoundationを用いたカメラ撮影で取得できる画像サイズについて【メモ】

ちょこっとメモ書きです。

AVFoundationを用いたカメラ撮影をして、取得した画像を画面いっぱいに表示してみると、なんでか画像がキュッと縦に引き伸ばした画像になってしまいます。

 

iPhone7での検証ですが、よくよく考えてみるとデフォルトのカメラも上下に黒い帯が入っているので画面サイズぴったりの写真を撮っているわけじゃないんですね。

AVFoundationを用いた撮影方法のコードは今回は割愛しますが、とりあえず撮影される写真サイズの話だけをしますね。

AVCaptureSession の sessionPreset

AVCaptureSessionのsessionPresetってやつが画像のクオリティ設定になります。

設定の種類は「Video Input Presets」に書かれている通りです。

デフォルトでは「AVCaptureSessionPresetHigh」が指定されています。

 

今回、「AVCaptureSessionPresetPhoto」を指定していたのですが、画像取得して画面いっぱいに表示してみると(16:9)縦長の画像になっていました。

 

コンソールで見てみると、

 

AVCaptureSessionPresetPhoto を指定した時 3024 : 4032

AVCaptureSessionPresetHigh      を指定した時 1080 : 1920

 

の画像を取得していました。(iPhone7)

 

つまり、

AVCaptureSessionPresetPhoto を指定した時の比率 3:4

AVCaptureSessionPresetHigh      を指定した時の比率 9:16

の画像を取得しているんですね。

 

ちなみにiPhone4Sでも動かして見たところ

AVCaptureSessionPresetPhoto を指定した時 2448 : 3264

AVCaptureSessionPresetHigh      を指定した時 1080 : 1920

AVCaptureSessionPresetPhoto を指定した時の比率 3:4

AVCaptureSessionPresetHigh      を指定した時の比率 9:16

という結果になりました。

iPhone4Sは画面の比率が2:3なので、画面いっぱいに表示しようと思うとHighを指定した時の9:16には当てはまらなくなります。

 

4Sに対応するかどうか、データサイズ等も含めてちょっと考えなきゃいけないかなぁと思います。

 

メモ書きですが何かの参考になればと思います。それではでは

 

 

AVFoundationを用いた撮影方法は下記の記事を参考にさせていただいてます。

[Swift2] カメラで静止画を撮影 (AVFoundation)

 

2018/04/12追記
iOS11の現在、AVFoundation周りはdeprecatedになってるものが色々あってちょっと色々困っちゃいますね。

ちなみにSwift3で

AVCaptureSessionPresetPhoto

と書いていたところは、Swift4では

.photo

という書き方になります。
Swift ,
コメントは認証制です。詳しくは下記の注意をお読みください。お気軽にコメントお願いします!

Write a Comment

コメント時の注意

「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。 コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。 アカウントをお持ちでない方はメールアドレスで投稿することができます。 初回コメント時は承認後に表示されます。

Related Memo...

UITableView.RowAnimation の .none はアニメーションするよ

UITableView.RowAnimation の .none はアニメーションがnoneなわけじゃなく、デフォルトの設定を使うよという意味らしい。

The inserted or deleted rows use the default animations.

なのでアニメーションしちゃう。今更の気づき。

 

iOS

UINavigationController + UIScrollView の組み合わせで使っている時に謎の余白ができる時

UINavigationController + UIScrollView の組み合わせで使っていて、UIScrollView 上に AutoLayout で上下左右0で View を設置しているのに、30px程度上にずれてしまうとき。

`navigationController.navigationBar.isTranslucent = false` にすると直るかもしれない。

ScrollView上のコンテンツとNavigationBarの重なっているところが透過していたら多分これで直せるはず。

通常のターゲットではちゃんと動いているのに、iOSSnapshotTestCase を用いたテストでだけこの対応が必要なのよくわからないけれど。。。

iOS

記事を書くほどでもないけれどメモっておきたいこと

テスト投稿。

例えばiphone7 の画面サイズ

750 × 1334
半分375 × 667

iOS
more