Skip to main content

JPG to GIF converter

Convert JPG images to GIF format

No watermarkFree & unlimited
All processing happens in your browser. No data is sent to any server.

Photographs and GIF have never got along, and this page will not pretend otherwise. A JPEG can describe millions of shades; the GIF written here picks from a fixed grid of 216, chosen at even steps of 51 in each channel, and assigns every pixel to the closest one without dithering. Skies, skin and shadows therefore arrive as visible steps rather than smooth gradients. The output is a single still frame, so this is not the tool for making an animation. When a system insists on .gif, though, it does the job in one pass in your browser.

Key facts about JPG to GIF converter

Key facts about JPG to GIF converter
Colour reductionMillions of JPEG colours are mapped onto 216 fixed values - each channel snapped to 0, 51, 102, 153, 204 or 255.
Matching methodNearest neighbour by squared distance in RGB, pixel by pixel, with no error diffusion to disguise the jump.
Visible resultBanding in gradients and posterised skin tones, most obvious in skies, out-of-focus backgrounds and soft shadows.
FramesOne. There is no delay, no loop extension and no frame list, so the file is a still picture in GIF89a form.
Size behaviourA photographic GIF is usually larger than the JPEG it came from, because LZW struggles with the noisy index runs that banding creates.
TransparencyNone is written, and none is needed - a JPEG source is opaque everywhere to begin with.
CompressionLZW over palette indices, encoded in the page, with the dictionary reset at 4096 entries as the format requires.
MetadataEXIF, GPS and the colour profile are gone; a GIF has no equivalent field, and nothing beyond pixels reaches the encoder.
Opens natively inEvery browser, chat client, email program and image viewer ever written - universal support is the format's remaining advantage.

What happens to your file

Everything runs on the page: the browser decodes the JPEG, a canvas gives up its pixel array, JavaScript matches each pixel against the 216-entry palette, and a second pass performs the LZW compression and writes the GIF header, the global colour table and the image blocks into a Blob. There is no palette service, no WebAssembly module and no upload, so a photo that still has your location in its original file never travels anywhere - and the GIF copy carries no metadata at all.

About this tool

  1. 1

    Add the JPG

    Any .jpg or .jpeg file, or an iPhone .heic that the page decodes to JPEG data first.

  2. 2

    Read the amber warning

    The notice above the drop zone flags the 256-colour ceiling before you convert; for photos it is the whole story.

  3. 3

    Reduce the size

    Smaller images hide banding better and compress far more efficiently, so the 800 px and 480 px presets are worth using here.

  4. 4

    Convert and judge the gradients

    Check the sky or any large soft area in the result. If the stepping is unacceptable, PNG or WebP is the better target.

Specs & compatibility
Input and outputTakes .jpg and .jpeg only (image/jpeg) and returns .gif with the image/gif type; any other extension is refused before decoding.
Conversion pathJPG to GIF runs in three steps: an <img> element decodes the JPEG, baseline or progressive, in the browser; the pixels land on a 2D canvas in this tab; then getImageData feeds a palette mapper and an LZW encoder that live in the page.
Browser supportThe JPEG side decodes in every browser ever shipped, while writing the GIF needs nothing from the browser, the encoder shipping inside the page.
Controls for this pairNo quality slider, GIF not being a lossy target here, so the max-dimension presets from 3840 down to 200 px are the only way to hold the GIF down in size against the JPG.
Batch, caps and namingTwenty JPG files per run at 500 MB each; one result downloads as a single GIF, several as converted-gif-files.zip, zipped by JSZip 3.10 in page memory.
Device ceilingThe canvas caps it: past roughly 16,384 px a side Chromium refuses the bitmap and iPhone Safari gives up sooner, so an oversized JPG fails before any GIF bytes exist.
  • High-contrast subjects with few flat regions - architecture, text on signage, graphic close-ups - survive the palette much better than portraits do.
  • If you only need a widely supported image rather than the GIF format specifically, PNG is equally universal and keeps every colour.
  • Cropping to the part you actually need before converting removes exactly the large soft backgrounds that band worst.
  • A GIF larger than its JPEG source is normal here and not a sign of failure - the format is simply the wrong fit for photographs.
  • Uploading to an old forum, wiki or intranet system whose image field accepts only .gif.
  • Producing a deliberately posterised, retro-looking version of a photo for a graphic project.
  • Feeding a legacy document or presentation template that was built around GIF assets.
Because 216 colours have to stand in for the millions the JPEG contained, and no dithering is applied to soften the transition. A gradient that passed through hundreds of tones is rounded to the few palette entries nearest to it, producing the bands you can see. That is inherent to indexed colour, not a setting that can be turned off here.
Not with this converter. Each file is processed independently and each output holds a single frame with no timing information, so a batch gives you several still GIFs rather than one animation. Building an animated GIF needs a tool that accepts an ordered sequence and writes frame delays.
JPEG compresses photographic detail by discarding what the eye misses, which is extremely effective. GIF stores palette indices compressed with LZW, and the banding introduced by the colour reduction produces irregular runs that LZW cannot shorten well. On a detailed photo the result routinely exceeds the source.
No. The conversion works from decoded pixels on a canvas, so camera settings, dates and GPS coordinates are left behind, and the GIF format has no standard place to store them anyway. The only annotation GIF offers is a comment extension, which this encoder does not write.
For a photograph, almost anything: PNG if you need lossless and universal support, WebP if you want a small file with full colour, AVIF if size matters most and your audience is on modern browsers. GIF is worth choosing only when the receiving system genuinely accepts nothing else.
View all

Need the opposite? Try GIF to JPG

Updated

We use anonymous analytics to improve ToolChamp. No personal data is stored or sold. Privacy Policy