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

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

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

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

<br />
myImageName:String = &quot;sample&quot;<br />
func getDocumentsURL() -&amp;gt; NSURL {<br />
    let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]<br />
    return documentsURL<br />
}</p>
<p>func fileInDocumentsDirectory(filename: String) -&amp;gt; String {</p>
<p>    let fileURL = getDocumentsURL().URLByAppendingPathComponent(filename)<br />
    return fileURL.path!</p>
<p>}</p>
<p>let imagePath = fileInDocumentsDirectory(myImageName)<br />

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

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

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

 

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

 

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

<br />
func loadImageFromPath(path: String) -&amp;gt; UIImage? {<br />
        let image = UIImage(contentsOfFile: path)<br />
        if image == nil {<br />
            print(&quot;missing image at: \(path)&quot;)<br />
        }<br />
        return image<br />
    }</p>
<p>loadImageFromPath(imagePath)<br />

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

<br />
img = loadImageFromPath(imagePath)<br />
imagetargetView.image = img<br />

 
 
参考:
 
with Special Thanks