blob: 208d7db6f0a683c7bc4904fcc7680aea852ca76f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import UniformTypeIdentifiers
import SwiftUI
import CoreGraphics
struct GifRenderer {
static func render(_ images: [CGImage], at fps: Int, to url: URL) async {
let framedelay = String(format: "%.3f", 1.0 / Double(fps))
let fileProperties = [kCGImagePropertyGIFDictionary as String: [kCGImagePropertyGIFLoopCount as String: 0]]
let gifProperties = [kCGImagePropertyGIFDictionary as String: [kCGImagePropertyGIFUnclampedDelayTime as String: framedelay]]
let cfURL = url as CFURL
if let destination = CGImageDestinationCreateWithURL(cfURL, UTType.gif.identifier as CFString, images.count, nil) {
CGImageDestinationSetProperties(destination, fileProperties as CFDictionary?)
for image in images {
CGImageDestinationAddImage(destination, image, gifProperties as CFDictionary?)
}
CGImageDestinationFinalize(destination)
}
}
}
|