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

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

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

解決済

2回答

4531閲覧

swiftでの画像ダウンロード時のEXIFデータについて

syuuichi

総合スコア35

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

0クリップ

投稿2016/06/23 06:55

以下の前提でプログラムを作成しております。
・開発OS:MacOS X
・プラットフォームOS:iOS
・言語:swift2.0
・開発環境:xcode7.3.1

上記の環境でサーバ上にある画像(JPEG)ファイルをダウンロードして、EXIFデータの内容を参照したいと考えています。
→img = UIImage(data:data!)のようにイメージデータを作成しています。

以下質問点です。
(1)上記のようにダウンロードして作成したUIImageにはEXIF情報は付加されないのでしょうか?
(2)もし、付加される場合どのようにEXIF情報を参照すればよいのでしょうか?
(3)もし、付加されない場合、ダウンロードした画像ファイルのEXIF情報を取得する方法がほかにありますでしょうか?

よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

(1)上記のようにダウンロードして作成したUIImageにはEXIF情報は付加されないのでしょうか?
(2)もし、付加される場合どのようにEXIF情報を参照すればよいのでしょうか?

UIImageにEXIF情報は入っていません。
というか、EXIF情報が入っているのはjpeg形式のファイルだけです。
png形式のファイルにはEXIF情報は入っていません。
jpeg形式のファイルを読み出す際に、exif情報を取得することはできます。

(3)もし、付加されない場合、ダウンロードした画像ファイルのEXIF情報を取得する方法がほかにありますでしょうか?

http://stackoverflow.com/questions/31888319/swift-accesing-exif-dictionary
が参考になると思います。

CGImageSourceCopyPropertiesAtIndexでNSDictionaryでjpegファイルのプロパティを読み出せば、そのNSDictionaryの"{Exif}"キーの中にEXIF情報が入っています。

投稿2016/06/23 11:01

TakeOne

総合スコア6299

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

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

syuuichi

2016/06/25 02:54

回答ありがとうございます。 >http://stackoverflow.com/questions/31888319/swift-accesing-exif-dictionary >が参考になると思います。 参考サイトを拝見しました。 サーバー上に置いてあるJPEGファイルを直接参照して、EXIF情報を取得する処理のようですが、今回はサーバーに対して、画像要求のリクエストを投げると、レスポンスとして画像データをバイナリで戻すようなサーバに対してのアクセスになっています。 直接画像ファイルを見ることができない状態になっていますので、ご提示いただいたサンプルでは実現できそうにありません。 前提条件の記載ができていなく、申し訳ございません。 レスポンスとして返ってきたバイナリデータを解析などしてEXIF情報を取得する方法はないでしょうか?
TakeOne

2016/06/25 03:11

紹介した記事はサーバー上のURLを指定してそれを参照するように書かれていますが、別にローカルファイルのURLを指定してもかまいません。 既に画像データをバイナリで受け取っているのであれば、それを一旦ローカルファイルに保存し、そのローカルファイルのURLを指定して読み込めばよいと思います。 というか、直接サーバーのURLを指定して読み込むと通信電波が不安定な時にアプリがハングアップする可能性がありますから、通信が不安定でもアプリがハングアップしないよう、非同期処理で画像データを受け取ったものを一旦ローカルファイルに保存してから参照することをお勧めします。
syuuichi

2016/07/01 02:25

回答ありがとうございます。 試しに以下のようなコードで実装してみました。 session.dataTaskWithRequest(req) {( data , response , error ) -> Void in let path = NSTempraryDirectory() data?.writeToFile(path,atomically:true) : } resume() 機器の関係上、シミュレータではなく、実機確認を行っているのですが ・作成されたファイルをiphone上で確認するためにはどのように行えば可能でしょうか? ・作成されたファイル名は元のJPEGのファイル名と同一になるのでしょうか? swift初心者で基本的な質問かもしれませんが、ご教授お願いします。
guest

0

TakeOne様から提示していただいた方法でEXIF情報を取得できました。
回答ありがとうございました。

投稿2016/07/01 06:38

編集2016/07/01 06:41
syuuichi

総合スコア35

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問