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の作り方はこちらの記事に詳しく書いてありました。