質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

3590閲覧

横撮影した写真を横向きで表示したい

ivysystemdesign

総合スコア17

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2015/10/26 16:20

編集2015/10/26 16:22

###使用言語
swift2.0

###前提・実現したいこと
AVFoundationを利用して写真を撮り、そのデータ(Array<NSData>)をNSUserDefaultsに保存しています。
NSUserDefaults内のデータを取り出して1つずつUIImageにキャストしてUICollectionViewに写真一覧として表示しているのですが、横向きで撮った写真でも縦に表示されてしまっているので、これを改善したいです。

※ちなみに、iPhoneのアルバムに保存したくありません。

###問題点
AVFoundationで撮影した写真には、自動的に撮影地の座標や画像の回転情報といったメタデータは付いているのでしょうか?
もしメタデータが付いているならNSDataからメタデータ(EXIF)を抜き出すにはどうしたらよいのでしょうか?

また、そもそもメタデータがNSDataに付いてないなら、NSDataにEXIFを追記するにはどのようにすればよいのでしょうか?

ちなみにEXIFを抜き出すためのコード(objective-c)がqiitaで公開されていたのですが、このコードは参考になるでしょうか?

#import "ViewController.h" #import <ImageIO/ImageIO.h> #import <CoreLocation/CoreLocation.h> @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSString *imgPath = [NSString stringWithFormat:@"%@/exit_test.JPG", [[NSBundle mainBundle] resourcePath]]; CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)CFBridgingRetain([NSURL fileURLWithPath:imgPath]), nil); NSDictionary *metadata = (NSDictionary *) CFBridgingRelease(CGImageSourceCopyPropertiesAtIndex(source, 0, NULL)); //GPS Dictionary NSDictionary *GPSDictionary = [metadata objectForKey:(NSString *)kCGImagePropertyGPSDictionary]; } @end

UIImagePickerControllerを利用して撮影された写真のEXIF取得・追加の方法は数多く公開されているのですが、AVFoundationで撮影されたNSDataからEXIFを取得したり追加する方法が見つけることができずに困っております。
もし、分かる方が居られましたらご教授お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

既にNSDataに画像を取得しているのであればCGImageSourceCreateWithURL()じゃなくてCGImageSourceCreateWithData()を使えばよいと思います。
(参考)
http://qiita.com/gfx/items/d1b0892b17616c65cd47

ただ、そのNSDataの画像をUIImageのimageWithDataでUIImageに変換して扱えば、画像方向の情報はUIImageのimageOrientationプロパティに反映され、それをそのままUIImageViewで表示すれば正しい方向に表示されるはずです。

もしそうしているのに画像が回転しているのであれば、NSDataに格納する時点で既にorientation情報を欠落させている可能性があります。

「AVFoundationで撮影した写真」というのが、具体的にどういう方法で撮影/保存しているのかよくわかりませんが、通常はexif情報を一緒に保存する処理が必要です。
以下のURLが参考になると思います。
(参考)
http://d.hatena.ne.jp/nakamura001/20100717/1279376457

別にexif情報が必要ないんだったら、画像保存時点で自分で画像を正しい方向に回転(データの並びを変更)させてから保存してもよいと思います。

投稿2015/10/27 02:01

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ivysystemdesign

2015/10/28 15:35

ご回答ありがとうございます! EXIFを追加する手順などがなんとなく理解することができました! ただ参考を元にswift2で書き換えを試みたのですが、以下の部分が分からず結局うまくいきませんでした… 書き換え部分で手詰まってしまったので別に質問させていただきました。もしswift2についてもお詳しかったら以下の質問もご回答いただけると嬉しいです。 https://teratail.com/questions/18912?complete= 重ね重ねのお願い申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問