うるおいらんど

アプリ開発やサイト制作のメモとか。

【Swift】カメラで撮影した画像を用いた時に向きがおかしい時の対策【UIImagePickerController】

魚ライン
魚ライン

UIImagePickerControllerを用いてカメラを起動し、撮影した際に取得した画像からCGImageを取り出すとどうも向きがおかしいことになってしまいます。

縦向きで撮影した写真も、横向きで撮影した写真も縦横の長さが変わらないのです。

横向きで撮影した写真についてはそのままで大丈夫なのですが、縦向きで撮影した写真も横長の写真として認識されてしまうのです(90度回転しているのかな・・・?)

 

一応解決したのでついでにリサイズ・切り抜き処理とともに紹介していきます。

向きがおかしい〜については少し飛ばして下さいな

UIImagePickerControllerを用意する

UIAlertControllerの中に用意してください。iOS7にも対応するには場合わけでUIActionSheetも使用してください。

 

あと、ViewControllerのところにデリゲートを追加するのをお忘れなく!

 

撮影後に呼び出されるメソッドはimagePickerController:didFinishPickingImage:editingInfoとなります。

(ちょっと調べてみるとこのメソッド随分前にobjective-cでは非推奨になってるとかどうとか・・・でもSwift2.0環境で普通に使用できるし、選択画面に出てくるしどうなんでしょう・・・?)

 

ここでresizeCameraという関数を作成して画像をリサイズ・切り抜きしていきます。

 

画像をリサイズ・切り抜きする

今回画面サイズにぴったりあうようなサイズで画像を加工していきます。

 

そして冒頭の問題です。

縦向きで撮った写真なのに横幅のが広くなっている??

縦向きで撮った写真も横向きで撮った写真もそれぞれ縦横をprintしてみると、どちらも同じになってしまいます。

そういった場合は一度オリジナル画像を描き直してあげるとうまくいきました。

これを先ほどのresizeCameraの最初に入れてあげます。

ちなみにUIGraphicsBeginImageContextとUIGraphicsBeginImageContextWithOptionsですが、前者より後者の方が画質良く取得することができます。

UIGraphicsBeginImageContextWithOptions(サイズ,透過可否,倍率 )となっていて倍率は0にするとデバイスに合わせて自動で設定してくれるそう(1.0にしたままリリースしちゃったゾー・・・笑)

メモリ使用量とも相談して使い分けると良いかもです。

resizeCamera内の最終コード

 

こんな感じで取得できました。

実際縦長写真がちょっとうまく縮小できてない気もします。画面サイズ比率にするなら、横幅を合わせた時に画面サイズより縦が短いか長いかの判断も必要ということですかね・・?

 

参考サイト

iPhoneカメラで撮影した画像のUIImageからCGImageを取り出すと90度傾く問題の解決法

[Swift] 画像のサムネイル生成(縮小&切り抜き)

 

魚ライン
モッピー!お金がたまるポイントサイト
魚ライン

Swiftの記事一覧を見る

コメント

コメントは認証制です。詳しくは下記の注意をお読みください。

コメントを残す

コメント時の注意

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

魚ライン 魚ライン