LoginSignup
28
31

More than 5 years have passed since last update.

iPhoneに保存された画像パスからUIImageを表示

Posted at

概要

iPhoneのカメラ、写真を使った処理についてメモレベルでまとめます。
画像をそのまま保存するとデータが大きくなり過ぎるかなと思い、デフォルトの写真に保存されている画像のパスだけをアプリ内で持っておけばデータはそこまで大きくならないかと思い、色々と調べました。その際に画像のパス→UIImageに変換する流れをまとめています。

写真の表示

iPhoneのデフォルトの写真一覧を表示させます。

import AssetsLibrary

func pickImageFromLibrary() {
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary) {
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary

        // 新たに追加したカメラロール表示ViewControllerをpresentViewControllerにする
        self.presentViewController(imagePicker, animated: true, completion: nil)
    }
}

写真から画像のパスを取得

写真が選択された時に呼ばれるメソッドです。

import AssetsLibrary

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: AnyObject]) {
    if info[UIImagePickerControllerOriginalImage] != nil {        
        // 画像のパスを取得
        let imageUrl = info[UIImagePickerControllerReferenceURL] as? NSURL
    }    
}

ちなみにimageUrlにはこんな感じの値が入ってますassets-library://asset/asset.JPG?id=106E99A1-4F6A-45A2-B320-B0AD4A8E8473&ext=JPG

info[UIImagePickerControllerOriginalImage] as? UIImageにするとそのままUIImageを取得できます。

カメラロールの画像パスからUIImageにする

上記で取得した画像パスからUIImageに変換するためにPhotos frameworkを使います。
参考:Photos frameworkを使ってiPhoneアルバム内の写真を取得・削除する+α

import Photos

let fetchResult: PHFetchResult = PHAsset.fetchAssetsWithALAssetURLs([url], options: nil)
    let asset: PHAsset = fetchResult.firstObject as! PHAsset
    let manager = PHImageManager.defaultManager()
    manager.requestImageForAsset(asset, targetSize: CGSize(width: 140, height: 140), contentMode: .AspectFill, options: nil) { (image, info) in
        // imageをセットする
        imageView.image = image
}

おわりに

アプリ内に画像のパスだけ保存しておくと元の写真が削除されるとアプリからデータをひけなくなるため(当たり前)アプリ内でもパスではなく画像を保存しておいた方がよいなと思い、これ自体あんまり意味なかったかなと後から気づきました。。

28
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
31