JPG to GIF Converter

Batch-drop JPG photos, set palette depth and dithering once, and let every file convert without leaving the tab.

Drop JPGs here or tap to choose

JPG, JPEG only. Batch as many as you need.

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.

FormatWhat it throws awayBest suited for
JPEG (source)Fine detail, chroma resolutionPhotographs, continuous tone
GIF (output)Color depth, smooth gradientsFlat 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.

Limitation

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.

Questions about the JPG to GIF batch

Answers tied to how this converter actually behaves, not generic format trivia.

Why does my photo look blocky after converting?

JPEG already softened detail and halved chroma resolution before you got here. GIF then caps the whole frame at a limited color count. The two losses stack, so blocking that was invisible in the JPG becomes visible once the palette shrinks around it.

Does the tool read EXIF orientation from my phone camera?

The canvas draws pixels exactly as the file stores them. If your browser does not auto-rotate based on EXIF before drawing, a sideways phone photo stays sideways in the GIF. Rotate the source first if that happens.

How many files can I batch in one run?

There is no hard cap in the code, but everything happens in browser memory. A few dozen high-resolution camera photos at once can stall the tab. Split large folders into smaller batches if things slow down.

Why did I get a PNG when I asked for a GIF?

Some browsers do not implement native GIF encoding for canvas exports. When that happens, the spec requires a silent fallback to PNG. The download card flags this so you know before you ship the file somewhere expecting a real GIF.

Does changing colors or dithering actually shrink the file?

Those settings state your intent. The browser encoder still decides how far to push the palette on export, so results vary between Chrome, Firefox, and Safari on the same source photo.

Is any file uploaded to a server?

No. Reading, drawing, and encoding all happen inside your browser tab. Clearing the queue drops the in-memory buffers, nothing was sent anywhere to begin with.