BMP to GIF Converter

GIF caps out at 256 colors, and no browser writes a real one from a canvas. Drop a BMP below and this page runs the honest version of that trade: same picture, fewer bytes, no pretending about the format you get.

No browser builds a true GIF file from a canvas, not Chrome, not Firefox, not Safari. Ask for one here and you get PNG data wearing a .gif name. This page still cuts your bitmap down in size. It will not tell you the output is something it is not.

BMP to GIF conversion bench

Drop a BMP here or tap to browse

One file at a time, up to 50MB. Nothing is sent anywhere.

So what format did you download?

Open the download in a hex editor and the first bytes read 89 50 4E 47. That is PNG's signature, not GIF's. The extension lied. The bytes did not.

Canvas elements in Blink, Gecko and WebKit all guarantee exactly one export format: PNG. JPEG and WebP show up as extras in most of them. GIF never made the list in any of the three, because nobody wrote a GIF encoder into the canvas specification. Ask a browser to export image/gif anyway and the spec tells it what to do about that: fall back to PNG and say nothing, unless the page checks the blob's reported type itself. This page checks, and the badge above only appears when the fallback fires, which today is every time, on every browser.

GIF against what you are holding

Line up the two formats and the gap is not subtle.

PropertyReal GIF fileWhat this page hands you
Color palette256 colors max, indexedFull 24 or 32 bit color, untouched
CompressionLZW, lossless inside that palettePNG's DEFLATE, lossless across the full range
FramesOne or many, built for animationOne, always
TransparencyA single fully transparent color per frameFull alpha channel, byte by byte, if the BMP carried one
Fits bestFlat art, icons, short loopsAnything a PNG already handles well

Where the megabytes went

A bitmap never compresses a single pixel. Take a 1280 by 720 photo at 24 bits per pixel: each row costs 3840 bytes of color, already a multiple of four, times 720 rows, and you are holding 2.76 MB before the file header is even added. Send that same picture through as a full color PNG and DEFLATE finds the redundancy a camera photo always carries, which typically lands the result under a third of the bitmap's weight. None of that is GIF's palette trick. It is PNG doing what PNG does, nothing more.

Odd widths waste more than you would guess. A 641 pixel wide row at 24 bits needs 1923 bytes of color, padded up to 1924, so four pixels' worth of padding rides along on every row for nothing.

When a real GIF earns its place

Circumstantial upside

One thing worth knowing before you dismiss the mismatch: because the fallback lands on PNG, a 32 bit bitmap with a true alpha channel keeps every value between fully clear and fully opaque. A genuine GIF would have thrown that away and kept one on or off transparent color instead. In this one respect, the file you download is a better container than the format printed on its own extension.

Where this stops

Questions about the BMP to GIF swap

What the .gif extension holds underneath, and where the real format still wins.

Why does the file open fine if it is not a real GIF?

Because browsers, operating systems and most image viewers read the actual bytes at the start of a file rather than trusting its extension. PNG data opens as a PNG no matter what you named it. A strict format validator that checks the extension against the signature would flag the mismatch, which is rare outside of automated pipelines.

Will this ever produce an animated GIF?

No. This converter reads one still bitmap and writes one still frame. For a real multi frame GIF, built with an actual encoder rather than a canvas fallback, use the animated mode on the PNG to GIF converter.

Is my file uploaded anywhere during this?

No. The BMP is read with FileReader and drawn to a canvas element inside the page. There is no request to a server once the page has loaded. Close the tab and nothing about the file remains anywhere but your own device.

Why is the output sometimes bigger than a proper 256-color GIF would be?

Because the output keeps full color rather than reducing to a palette. A true GIF built from flat, few-color art can beat this converter on size. A GIF built from a photograph almost never does, since 256 colors band visibly on gradients that a full color PNG stores cleanly.

What happens to an 8 bit or 1 bit indexed BMP?

The browser decodes it to full RGBA before this page ever sees a pixel, so whatever palette the bitmap held is already gone by the time the preview appears. The output holds full color regardless of how compact the source was.

My BMP will not load. What is going on?

Check whether the file uses run length compression or wraps another format inside a BMP shell, the BI_RLE8, BI_RLE4, BI_JPEG and BI_PNG cases. Browser canvas decoders skip all four. The BMP to PNG converter reads them, since it parses the header directly rather than handing the file straight to the browser.

Can I choose a lower quality to shrink the file further?

Not on this page. Both PNG and GIF are lossless formats, so there is no quality slider to turn. If you need a smaller file after this conversion, run the result through the image compressor.

Does the DPI or color profile survive?

Rarely, and only if the source ever had one. Most BMP files carry no color profile at all. A V4 or V5 header can include a color space tag, but the canvas pipeline this page relies on does not expose it, so it does not carry through to the download.