【写真のexif情報を取得方法】
前提条件
info.plistの設定
import Photos
UIImagePickerDelegate
imagePickerControllerの呼び出し
以下、写真が押された時に呼ばれる関数です。
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
// 選択したアイテムの元のバージョンのAssets Library URL
let assetUrl = info[UIImagePickerControllerReferenceURL] as! URL
// PHAsset = Photo Library上の画像、ビデオ、ライブフォト用の型
let result = PHAsset.fetchAssets(withALAssetURLs: [assetUrl], options: nil)
let asset = result.firstObject
// コンテンツ編集セッションを開始するためのアセットの要求
asset?.requestContentEditingInput(with: nil, completionHandler: { contentEditingInput, info in
// contentEditingInput = 編集用のアセットに関する情報を提供するコンテナ
let url = contentEditingInput?.fullSizeImageURL
// 対象アセットのURLからCIImageを生成
let inputImage = CIImage(contentsOf: url!)!
// CIImageのpropertiesから画像のメタデータのなかのGPSを取得する
if inputImage.properties["{GPS}"] as? Dictionary<String,Any> == nil {
print("この写真にはGPS情報がありません")
} else {
let gps = inputImage.properties["{GPS}"] as? Dictionary<String,Any>
var latitude = gps!["Latitude"] as! Double
let latitudeRef = gps!["LatitudeRef"] as! String
var longitude = gps!["Longitude"] as! Double
let longitudeRef = gps!["LongitudeRef"] as! String
if latitudeRef == "S" {
latitude = latitude * -1
}
if longitudeRef == "W" {
longitude = longitude * -1
}
print(latitude)
print(longitude)
}
})
picker.dismiss(animated: true, completion: nil)
}
前提条件
info.plistの設定
import Photos
UIImagePickerDelegate
imagePickerControllerの呼び出し
以下、写真が押された時に呼ばれる関数です。
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
// 選択したアイテムの元のバージョンのAssets Library URL
let assetUrl = info[UIImagePickerControllerReferenceURL] as! URL
// PHAsset = Photo Library上の画像、ビデオ、ライブフォト用の型
let result = PHAsset.fetchAssets(withALAssetURLs: [assetUrl], options: nil)
let asset = result.firstObject
// コンテンツ編集セッションを開始するためのアセットの要求
asset?.requestContentEditingInput(with: nil, completionHandler: { contentEditingInput, info in
// contentEditingInput = 編集用のアセットに関する情報を提供するコンテナ
let url = contentEditingInput?.fullSizeImageURL
// 対象アセットのURLからCIImageを生成
let inputImage = CIImage(contentsOf: url!)!
// CIImageのpropertiesから画像のメタデータのなかのGPSを取得する
if inputImage.properties["{GPS}"] as? Dictionary<String,Any> == nil {
print("この写真にはGPS情報がありません")
} else {
let gps = inputImage.properties["{GPS}"] as? Dictionary<String,Any>
var latitude = gps!["Latitude"] as! Double
let latitudeRef = gps!["LatitudeRef"] as! String
var longitude = gps!["Longitude"] as! Double
let longitudeRef = gps!["LongitudeRef"] as! String
if latitudeRef == "S" {
latitude = latitude * -1
}
if longitudeRef == "W" {
longitude = longitude * -1
}
print(latitude)
print(longitude)
}
})
picker.dismiss(animated: true, completion: nil)
}
以下、写真が押された時に呼ばれる関数です。
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
// 選択したアイテムの元のバージョンのAssets Library URL
let assetUrl = info[UIImagePickerControllerReferenceURL] as! URL
// PHAsset = Photo Library上の画像、ビデオ、ライブフォト用の型
let result = PHAsset.fetchAssets(withALAssetURLs: [assetUrl], options: nil)
let asset = result.firstObject
// コンテンツ編集セッションを開始するためのアセットの要求
asset?.requestContentEditingInput(with: nil, completionHandler: { contentEditingInput, info in
// contentEditingInput = 編集用のアセットに関する情報を提供するコンテナ
let url = contentEditingInput?.fullSizeImageURL
// 対象アセットのURLからCIImageを生成
let inputImage = CIImage(contentsOf: url!)!
// CIImageのpropertiesから画像のメタデータのなかのGPSを取得する
if inputImage.properties["{GPS}"] as? Dictionary<String,Any> == nil {
print("この写真にはGPS情報がありません")
} else {
let gps = inputImage.properties["{GPS}"] as? Dictionary<String,Any>
var latitude = gps!["Latitude"] as! Double
let latitudeRef = gps!["LatitudeRef"] as! String
var longitude = gps!["Longitude"] as! Double
let longitudeRef = gps!["LongitudeRef"] as! String
if latitudeRef == "S" {
latitude = latitude * -1
}
if longitudeRef == "W" {
longitude = longitude * -1
}
print(latitude)
print(longitude)
}
})
picker.dismiss(animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
// 選択したアイテムの元のバージョンのAssets Library URL
let assetUrl = info[UIImagePickerControllerReferenceURL] as! URL
// PHAsset = Photo Library上の画像、ビデオ、ライブフォト用の型
let result = PHAsset.fetchAssets(withALAssetURLs: [assetUrl], options: nil)
let asset = result.firstObject
// コンテンツ編集セッションを開始するためのアセットの要求
asset?.requestContentEditingInput(with: nil, completionHandler: { contentEditingInput, info in
// contentEditingInput = 編集用のアセットに関する情報を提供するコンテナ
let url = contentEditingInput?.fullSizeImageURL
// 対象アセットのURLからCIImageを生成
let inputImage = CIImage(contentsOf: url!)!
// CIImageのpropertiesから画像のメタデータのなかのGPSを取得する
if inputImage.properties["{GPS}"] as? Dictionary<String,Any> == nil {
print("この写真にはGPS情報がありません")
} else {
let gps = inputImage.properties["{GPS}"] as? Dictionary<String,Any>
var latitude = gps!["Latitude"] as! Double
let latitudeRef = gps!["LatitudeRef"] as! String
var longitude = gps!["Longitude"] as! Double
let longitudeRef = gps!["LongitudeRef"] as! String
if latitudeRef == "S" {
latitude = latitude * -1
}
if longitudeRef == "W" {
longitude = longitude * -1
}
print(latitude)
print(longitude)
}
})
picker.dismiss(animated: true, completion: nil)
}