Skip to main content

BMP to GIF converter

Convert BMP images to GIF format

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

Bitmap to GIF swaps one very old Windows format for one very old web format, and the interesting part is the colour count. Your bitmap almost certainly holds 16.7 million possible colours; the GIF written here is quantised to a fixed 216-colour web-safe cube, matched by nearest neighbour with no dithering. Flat logos, pixel art and two-tone interface captures come through cleanly; photographs and gradients band visibly instead of showing the dithered noise a dedicated encoder would produce.

Key facts about BMP to GIF converter

Key facts about BMP to GIF converter
PaletteA fixed 6x6x6 cube in steps of 51 per channel, 216 entries padded to a 768-byte global colour table. It is not derived from your bitmap, so unusual hues shift to the nearest cube point.
DitheringNone. Each pixel picks its closest cube colour independently, keeping edges crisp on flat art and banding hard across any gradient.
TransparencyThe written GIF carries no graphic control extension, so no index is marked transparent. Bitmaps are opaque anyway, so this direction loses nothing.
AnimationImpossible here. A bitmap holds one frame and the encoder writes one image descriptor, so the result is a still GIF.
Size behaviourA 1920x1080 bitmap of 6,220,854 bytes usually becomes a few hundred kilobytes of flat art; a noisy photo defeats LZW and can land near two megabytes.
Fixed overheadEvery file starts with 792 bytes before a single pixel: the GIF89a signature, the logical screen descriptor, the full colour table and the image descriptor.
Opens the resultEverything, from Windows 95 image viewers to every chat client and email renderer in use today.
When not to convertIf the bitmap is a photograph, PNG keeps every colour at a comparable size and is the better target.

What happens to your file

No part of this runs on a server. The bitmap becomes an object URL, is decoded by the Image element using your browser's built-in reader, and drawn into a canvas this page created. From there the GIF is assembled entirely in JavaScript in your tab: the palette match loop, the LZW compressor and the byte writer that emits the GIF89a blocks are all page script, not a remote service and not a WebAssembly module.

About this tool

  1. 1

    Add your bitmap

    Drop a .bmp file on the target area or click to browse. Twenty files per batch, 500 MB each.

  2. 2

    Choose a size

    A resize preset caps the long edge. Fewer pixels means less work for the palette matcher and a faster conversion.

  3. 3

    Run the conversion

    Press Convert. The per-file dots show which bitmap is being quantised and compressed.

  4. 4

    Check for banding

    Open the side-by-side view first. Banding in skies or shadows means this pair is wrong for your image.

  5. 5

    Save the GIF

    Download the file, or take the batch as converted-gif-files.zip built in the browser.

Specs & compatibility
Input and outputTakes .bmp only (image/bmp) and returns .gif with the image/gif type; any other extension is refused before decoding.
Conversion pathBMP to GIF runs in three steps: an <img> element decodes the bitmap, 24-bit and 32-bit variants alike; 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 bitmap side decodes in every current browser, 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 BMP.
Batch, caps and namingTwenty BMP 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 BMP fails before any GIF bytes exist.
  • Bitmaps from old Windows drawing tools often already use a small palette and convert unchanged.
  • With no dithering, anti-aliased text on a coloured background can pick up a stair-stepped halo; a plain background avoids it.
  • Cap the long edge at 480 or 200 for forum and chat use, since GIF has no quality dial to turn down.
  • If you need a transparent background, convert the bitmap to PNG and keep the alpha there.
  • Fixed web-safe 216-colour quantisation
  • LZW compressor written in page JavaScript
  • GIF89a output with a single image block
  • Twenty-file batches zipped locally
  • Turning bitmap sprites from a legacy Windows program into something a wiki will display inline.
  • Producing a tiny GIF of a two-colour diagram for an email signature.
  • Feeding a retro-styled site or bulletin board that still expects GIF assets.
Every pixel is mapped to one of 216 fixed colours with no dithering. A dedicated encoder would scatter the error into neighbouring pixels so the eye blends the bands away; this one does not, because dithering destroys the crisp edges that make GIF useful for flat art. Photographic bitmaps belong in PNG or WebP.
No. The writer emits the GIF89a header but never a graphic control extension, which is the block that declares a transparent palette index. Every pixel is opaque. Coming from a bitmap that is no real loss, since BMP as commonly written has no alpha either, but you cannot use this pair to make a transparent icon.
Usually, not always. The bitmap is three raw bytes per pixel; the GIF stores one index per pixel and compresses those with LZW. Flat art often drops to a few percent, but a noisy photograph gives LZW little to work with and the saving is modest.
No, and that matters. A palette bitmap is decoded to full RGB and then re-quantised to the web-safe cube, so a 256-colour palette tuned to your image is replaced by a generic one. Exact colours can shift by up to 25 values per channel.
The encoder always writes the complete global colour table rather than trimming it to the colours actually used. A 32x32 black-and-white result is therefore around 800 bytes rather than the hundred a hand-tuned encoder would produce. Above a few thousand pixels the overhead stops mattering.
View all

Need the opposite? Try GIF to BMP

Updated

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