やりたいことは自分のアプリ内で、
UIImagePickerControllerを呼び出してPhotoLibraryから写真を選択、
選択した写真の(画像もだけど)ExifやTiffなどのメタデータも取ってくる、ということ。
iOS9からALAssetsLibraryが非推奨になったので、メタデータ取得にもPhotos frameworkを使った。
UIImagePickerControllerDelegate に適合したPhotoViewControllerを用意し、以下な感じで実装。
PhotoViewController.swift
class PhotoViewController: UIViewController {
// PhotoLibraryを出すところ
func showPicker() {
let sourceType = UIImagePickerControllerSourceType.PhotoLibrary;
if (UIImagePickerController.isSourceTypeAvailable(sourceType)) {
let picker = UIImagePickerController()
picker.sourceType = sourceType
picker.delegate = self
self.presentViewController(picker, animated:true, completion:nil)
}
}
}
extension PhotoViewController: UIImagePickerControllerDelegate {
// 写真選択された際に呼ばれる
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
// 画像の取得云々は割愛
// meta data取得
if
let assetURL:AnyObject = info[UIImagePickerControllerReferenceURL],
let url = NSURL(string: assetURL.description)
{
let result = PHAsset.fetchAssetsWithALAssetURLs([url], options: nil)
if let asset = result.firstObject as? PHAsset {
let options = PHContentEditingInputRequestOptions()
options.networkAccessAllowed = true
asset.requestContentEditingInputWithOptions(options, completionHandler: {
(input, info) in
printd("\(input), \(info)")
if
let input = input,
let url = input.fullSizeImageURL
{
let ciImg = CIImage(contentsOfURL: url)
// ciImg?.propertiesに、EXIF, TIFFなどのメタデータが入ってる
printd("\(ciImg?.properties)")
}
})
}
}
}
参考
http://stackoverflow.com/questions/24462112/ios-8-photos-framework-access-photo-metadata
https://github.com/zakkhoyt/PHAsset-Utility