Help us understand the problem. What is going on with this article?

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

More than 3 years have 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の確認

arthur87
iwate-pu
岩手県滝沢市にある公立大学です。Qiitaではソフトウェア情報学部生や出身の人が多いです。
https://www.iwate-pu.ac.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした