[iOSアプリ開発]アプリの階層内にURL先の画像を保存する+読み込む。

画像のurlなどを取得して、そのURL先の画像をアプリのディレクトリ内に保存+その保存した画像を読み込んで表示する方法をまとめておきます。

 
1、URLから画像を保存する
 

 
まずはじめに、画像を保存するパスを生成します。

myImageName:String = "sample"
func getDocumentsURL() -> NSURL {
    let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
    return documentsURL
}
 
func fileInDocumentsDirectory(filename: String) -> String {
    
    let fileURL = getDocumentsURL().URLByAppendingPathComponent(filename)
    return fileURL.path!
    
}

let imagePath = fileInDocumentsDirectory(myImageName)

実際に生成されたパスをみてみるとアプリ下のDocumentにsampleという名前で保存されています。
/var/mobile/Containers/Data/Application/3B436B9C-6A6D-4215-B64A-DF84148DA737/Documents/sample

次に生成した画像パスを用いて実際に保存を行ないます。


func saveImage (image: UIImage, path: String ) -> Bool{
        //pngで保存する場合
        let pngImageData = UIImagePNGRepresentation(image)
        // jpgで保存する場合
        let jpgImageData = UIImageJPEGRepresentation(image, 1.0)
        let result = pngImageData!.writeToFile(path, atomically: true)
        
        return result
    }

saveImg(image, imagePath)

 

 
2,保存した画像をロードする。
 

 

さきほどのimagePathをCoreDataもしくは変数などに格納しておき、そのパスを使って画像をロードします。

func loadImageFromPath(path: String) -> UIImage? {
        let image = UIImage(contentsOfFile: path)
        if image == nil {   
            print("missing image at: \(path)")
        }
        return image
    }

loadImageFromPath(imagePath)

そして、実際に表示するときは、こちら

img = loadImageFromPath(imagePath)
imagetargetView.image = img

 
 
参考:
 
with Special Thanks