Camera photos rarely stay flat. Skin tones fade in gradients, skies fade in gradients, and JPEG has already softened both before anything else touches the file. Feed that into a format capped at 256 colors and something has to give.
This page runs the whole trade in your browser tab. No queue, no upload, no server that has ever seen your photo.
Two compression schemes, doubled damage
JPEG throws away detail your eye rarely notices on its own: smoothed blocks, softened high-frequency noise, chroma squeezed to half resolution. GIF then throws away something else entirely, color itself, capping every frame at a fixed number of index slots. Stack the two and a photo that looked fine at full size starts showing edges where a gradient used to sit.
| Format | What it throws away | Best suited for |
|---|---|---|
| JPEG (source) | Fine detail, chroma resolution | Photographs, continuous tone |
| GIF (output) | Color depth, smooth gradients | Flat art, icons, short loops |
When does this pairing actually make sense?
Not for a hero photo on a landing page. That job belongs to JPEG or WebP, formats that were never asked to compress with a quarter palette.
- Legacy inboxes and forums that still expect a .gif extension for inline previews.
- Retro avatar sets where visible banding reads as the aesthetic, not a defect.
- Batch thumbnail exports for a catalog page that already renders everything small.
Native GIF encoding through canvas.toBlob is not guaranteed by every browser. When a browser skips the image/gif output type, the spec has it fall back to PNG, quietly, with the file still named .gif. Every download card below checks the blob it actually received and says so when your GIF is a PNG in a party hat.
Dithering versus a flatter photo
The two dropdowns above the convert button set intent. They do not guarantee a palette rewrite, since actual color reduction on export runs through whatever GIF encoder your browser ships.
- Floyd-Steinberg
- Scatters the rounding error from each pixel into its neighbors. Breaks banding into a fine grain that reads better across skin and sky.
- None
- Rounds each pixel straight to the closest palette slot. Faster, blockier, sometimes the honest choice for flat pixel art.
- 256 down to 32
- Lower slot counts shrink the file and hit gradients harder. A flat logo survives 32 colors. A sunset rarely does.
- Chroma already halved
- JPEG reduced color resolution before this page opened. A second reduction pass compounds an existing loss, it does not start fresh.
Batch mode is the entire point
Drop ten photos, not one. Most sibling converters in this category expect a single file and a side-by-side compare panel. This page queues a folder, applies the same palette and dithering choice across every file, then hands back one card per result with its own download link. If you are clearing a camera-roll folder of screenshots into GIFs for an old CMS that only accepts that extension, this is the version of the tool built for that afternoon, not for one file at a time.
What this page will not do
It will not animate your photos. One JPG in, one still GIF frame out, every time. It will not quantize colors the way a dedicated encoder such as gifsicle would, and it cannot recover detail JPEG already discarded before you opened this page. Expect a usable batch export, not a print-ready master.
Picking the exit that is not GIF
Photos with gradients worth keeping belong on JPG to PNG instead, lossless, no palette ceiling. Need the trip back from an animated file? GIF to JPG pulls a frame back out. Jumping between more than two formats in one session gets easier through the format converter, and a heavy source folder should probably meet the image compressor before any of this.
Reviewed August 2026. Conversion runs client-side. Files never leave the tab, and clearing the queue only wipes in-memory state.
