iOS UIImageからgifファイルを作成する

ImageI/Oフレームワークを調べていたら、gifを作成出来るという記事を見つけたので試してみました。


コード

import UIKit
import ImageIO
import MobileCoreServices
import AVFoundation

class ViewController: UIViewController {

   private var imageArray: Array<CGImage> = []
   private let frameRate = CMTimeMake(value: 1, timescale: 5)
   
   override func viewDidLoad() {
       super.viewDidLoad()
       // Do any additional setup after loading the view, typically from a nib.
       let imageNameArray = ["画像"]
       for i in imageNameArray {
           let image = UIImage(named: i)
           guard let cgImage = image?.cgImage else {
               return
           }
           imageArray.append(cgImage)
       }
       makeGifImage()
   }

   private func makeGifImage(){
       //ループカウント 0で無限ループ
       let fileProperties = [kCGImagePropertyGIFDictionary as String: [kCGImagePropertyGIFLoopCount as String: 0]]
       //フレームレート
       let frameProperties = [kCGImagePropertyGIFDictionary as String:[kCGImagePropertyGIFDelayTime as String :CMTimeGetSeconds(frameRate)]]
       let url = NSURL(fileURLWithPath:NSTemporaryDirectory()).appendingPathComponent("\(NSUUID().uuidString).gif")
       guard let destination = CGImageDestinationCreateWithURL(url as! CFURL,kUTTypeGIF,imageArray.count,nil)else{
           print("CGImageDestinationの作成に失敗")
           return
       }
       CGImageDestinationSetProperties(destination,fileProperties as CFDictionary?)
       
       //画像を追加
       for image in imageArray{
           CGImageDestinationAddImage(destination,image,frameProperties as CFDictionary?)
       }
       if CGImageDestinationFinalize(destination){
           //GIF生成後の処理をする
           print("成功")
       }else{
           print("GIF生成に失敗")
       }
       
       let animationGifView = UIWebView(frame: CGRect(x:0,y:0,width:300,height:400))
       animationGifView.center = CGPoint(x:self.view.frame.width / 2.0,y:self.view.frame.height * 2 / 7.0)
       
       //urlをNSDataに変換
       let gifData =  NSData(contentsOf: url!)
       //gifをloadする
       animationGifView.load(gifData as! Data, mimeType: "image/gif", textEncodingName: "utf-8", baseURL: url!)
       self.view.addSubview(animationGifView)
   }

}

imageNameArrayプロパティにUIImageのnameを入れます。

これを実行すると、urlのファイルパスにgifファイルが生成され、そのgifをwebViewで表示します。

gifの作り方はこちらの記事に詳しく書いてありました。

https://dev.classmethod.jp/smartphone/iphone/swift_anigif/

いいなと思ったら応援しよう!