iOS
Swift

アニメーションGIFを写真に保存する

More than 1 year has passed since last update.

アニメーションGIFを写真.app(Photos.app)に保存する方法を紹介します。

写真

UIImageViewを配置してアニメーションGIFを読み込みます。


sample1.swift

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var kImageView: UIImageView!

override func viewDidLoad() {
super.viewDidLoad()

let url = NSURL(string: "http://example.com/sample.gif")!
let task = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: {data, response, error in
self.kImageView.image = UIImage(data: data!)
})
task.resume()
}
}


アニメーションGIF

アニメーションGIFを写真.appに保存するためにはPhotos.frameworkを利用します。


sample2.swift

import UIKit

import Photos

class ViewController: UIViewController {

@IBOutlet weak var kImageView: UIImageView!

override func viewDidLoad() {
super.viewDidLoad()

let url = NSURL(string: "http://example.com/sample.gif")!
let task = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: {data, response, error in
self.kImageView.image = UIImage(data: data!)
let url = NSURL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true).URLByAppendingPathComponent("tmp.gif")
data?.writeToURL(url, atomically: true)

PHPhotoLibrary.sharedPhotoLibrary().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromImageAtFileURL(url)
}, completionHandler: nil)
})
task.resume()
}
}


アニメーションGIFのデータを一度ファイルに書き出すのがポイントです。

UIImageWriteToSavedPhotosAlbum()PHAssetChangeRequest.creationRequestForAssetFromImage() などUIImageを引数にとるものでは1コマ目だけが保存され静止画となります。

写真.appを開くとアニメーションGIFが保存されていることがわかります。

しかし写真.appでは静止画となってしまいアニメーションが再生されません。

アニメーションGIFであることを確認するために共有をタップしてメールに添付します。

これでアニメーションGIFであることが確認できます。

アニメーションGIFの確認