import CoreGraphics import SwiftUI /* Copyright (C) 2024 Rubén Beltrán del Río This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see https://captura.tranquil.systems. */ import UniformTypeIdentifiers 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) } } }