Overview
Introduction
This tool splits an animated GIF into its individual frames and packages them as real PNG files inside a genuine ZIP archive, ready to download and use individually.
Every frame is decoded, fully composited, and encoded as a real PNG through the browser's own canvas: nothing is faked or approximated.
What Is GIF to ZIP Archive Converter?
A frame-extraction and archiving tool: it decodes each frame of a GIF, resolving any partial-frame disposal or transparency compositing so each output image looks exactly as it would during playback, then re-encodes each one as a standalone PNG.
The resulting PNGs are packaged into a hand-rolled but standards-compliant ZIP archive using STORED (uncompressed) entries.
How GIF to ZIP Archive Converter Works
The uploaded GIF's bytes are decoded via this category's shared GIF codec, producing one fully composited RGBA image per frame.
Each frame is drawn to an offscreen canvas and encoded as a PNG via canvas.toBlob('image/png'), then handed to a hand-rolled ZIP writer that builds valid local file headers, a central directory, and an end-of-central-directory record around each entry.
When To Use GIF to ZIP Archive Converter
Use it to pull individual frames out of a GIF for editing, printing, or use in a slideshow.
Don't use it if you need a compressed archive: entries are stored uncompressed, so the ZIP is roughly the sum of each PNG's own size.
Often used alongside GIF Frame Extractor, GIF Splitter and PGN to GIF Converter.
Features
Advantages
- Produces a genuinely valid ZIP file, verified against real unzip tools rather than only this module's own reader.
- Each frame is a real, standalone PNG rather than a renamed GIF frame or a lossy screenshot.
- Runs entirely client-side; the uploaded GIF and its frames never leave the browser.
Limitations
- ZIP entries are stored uncompressed (STORED method), not DEFLATE-compressed, so archive size roughly matches the sum of each frame's PNG size.
- Frame filenames are sequential (frame-01.png, frame-02.png, …) and can't be customized.
Examples
Best Practices & Notes
Best Practices
- Keep source GIFs under this category's frame-count limit: extracting a very long animation produces a correspondingly large ZIP of PNGs.
- Check the entry list after extraction if you're scripting against it: frame-01.png always corresponds to the GIF's first displayed frame.
- If you only need a handful of frames rather than the whole sequence, extract the full ZIP once and discard the ones you don't need rather than re-running the conversion per frame.
Developer Notes
prepareGifFramesForZip decodes the source GIF via the shared gif-codec's decodeGif, clones each frame's composited PixelBuffer, and returns them alongside suggested frame-NN.png names. The calling component draws each frame to a canvas and encodes it as PNG via canvas.toBlob, then passes the real PNG bytes to buildStoredZip, which writes a standards-following ZIP (STORED entries, CRC32 via this codebase's shared crc32 implementation, local headers + central directory + end-of-central-directory record).
GIF to ZIP Archive Converter Use Cases
- Pulling individual frames out of a GIF for use as static images
- Turning an animated GIF into a PNG image sequence for video editing software
- Archiving all frames of a GIF for later reassembly or analysis
Common Mistakes
- Expecting a compressed archive: STORED entries mean the ZIP is roughly as large as the sum of its PNG frames, not smaller.
- Assuming frame filenames can be customized: they're always the sequential frame-01.png, frame-02.png, … pattern.
Tips
- Pair with gif-frame-extractor if you only need a single frame rather than the whole sequence.
- Rename extracted PNGs after downloading if you need a naming scheme other than frame-NN.png.