A lightweight LZW encoder and decoder for animated GIFs written in pure Swift, thus running on any platform, including Linux.
// Create a new GIF
var gif = GIF(width: 300, height: 300)
// Add some frames for the animation
for i in 0..<20 {
let image = try CairoImage(pngFilePath: "frame\(i).png")
gif.frames.append(.init(image: image, delayTime: 100))
}
// Encode the GIF to a byte buffer
let data = try gif.encoded()
GIF encoding is more computationally intensive than decoding. It can become a bottleneck when GIF is used as a video codec and serialization must happen in real-time. Therefore, multicore CPU is used to accelerate the encoding of animated GIFs. All the animation frames are gathered into one Array
, which is then divided among all CPU cores in the system.
- Swift 5.10+
- Cairo, see swift-graphics