Skip to content

BMP to JPG Converter Online — Microsoft Bitmap (Windows 1.0/3.0) to JPEG via Canvas

Browser-side — no upload
Last verified May 2026 — runs in your browser

BMP to JPG Converter — Substantial File-Size Reduction via JPEG DCT

Convert BMP (Microsoft Bitmap, originated Windows 1.0 in 1985 as a device-dependent bitmap; modern BITMAPFILEHEADER + BITMAPINFOHEADER format introduced with Windows 3.0 in May 1990 per learn.microsoft.com/en-us/windows/win32/gdi/bitmap-storage) to JPG (ITU-T Recommendation T.81 / ISO/IEC 10918-1:1994, 18 September 1992) for substantially smaller file sizes. BMP stores pixels uncompressed (BI_RGB compression mode at 1/4/8/16/24/32 bits per pixel) — a 1920×1080 24-bit BMP runs ~6.2 MB (1920 × 1080 × 3 bytes + 54-byte header), while the same image as JPG at quality 85 typically lands under 500 KB. JPEG's DCT + Huffman + chroma subsampling pipeline (per ITU-T T.81 baseline) trades a small amount of perceptually invisible high-frequency detail for a 10-20× compression ratio on photographic content. The conversion runs locally via WHATWG Canvas drawImage + HTMLCanvasElement.toBlob('image/jpeg', quality). BMP is natively decoded by every modern browser (Chrome, Firefox, Safari, Edge) so the source loads cleanly without polyfills. Files never leave the device.

How to convert BMP to JPG

  1. Drop a .bmp file onto the tool or click to browse. The browser's built-in BMP decoder reads the BITMAPFILEHEADER + BITMAPINFOHEADER and decodes the BI_RGB pixel data.
  2. Pick a JPG quality level. 85 is the standard web sweet spot per ITU-T T.81 Annex K (visually invisible loss); 90+ approaches visually lossless; below 70 produces visible 8×8 blocking and ringing.
  3. The tool runs Canvas drawImage (decoded BMP → canvas at native dimensions) → toBlob('image/jpeg', quality) which applies JPEG's DCT + Huffman + chroma subsampling pipeline.
  4. Review the before/after file-size comparison: a 1920×1080 24-bit BMP (~6.2 MB) typically lands under 500 KB at quality 85 — a ~10-20× reduction.
  5. Download the JPG. The original BMP stays on disk untouched — files never leave the device.

Common use cases

  • Shrinking Windows screenshots saved as BMP (Print Screen → Paint default) down to web-friendly JPG sizes for blog posts, email attachments, or bug reports.
  • Converting legacy BMP asset libraries from older Windows software (1990s-2000s era) into a modern portable format that any platform accepts.
  • Preparing BMP scanner outputs (some scanner drivers default to BMP for lossless capture) for upload to platforms that reject BMP or impose strict size limits.
  • Batch-converting BMP captures from test tooling (Win32 image-comparison test frameworks often output BMP) into JPG attachments for issue trackers.
  • Reducing the storage footprint of an archived BMP photo library before backing it up to cloud storage that charges per GB.

Frequently asked questions

Does conversion lose quality?

Yes — JPG is lossy. At quality 85+ the loss is visually invisible at normal viewing distances per ITU-T T.81 Annex K's perceptual quantisation tables; below 70 compression artefacts (8×8 block boundaries, ringing near sharp edges, banding in smooth gradients) become visible. BMP is uncompressed (lossless), so any JPG output is a one-way trade of fidelity for file size. For lossless raster output, convert BMP to PNG via a desktop tool (GIMP, Paint.NET, IrfanView) instead.

Why is my BMP so large?

BMP stores pixels uncompressed in BI_RGB mode: 24-bit pixels take exactly 3 bytes each (~3.6 MB for HD 720p, ~6.2 MB for 1080p, ~24.9 MB for 4K). 32-bit BMP variants with padding alpha take 4 bytes per pixel, increasing those numbers ~33%. JPEG's DCT + chroma subsampling + Huffman pipeline trades perceptually invisible high-frequency detail for a 10-20× compression ratio on photographic content (1920×1080 typically lands under 500 KB at quality 85).

What about transparency?

Standard BMP (BI_RGB at 24-bit) does not support transparency — every pixel is fully opaque. The 32-bit BMP variant (BI_BITFIELDS or some BI_RGB at 32 bpp) can carry alpha in Windows-specific encodings, but those are rare in practice. JPEG also lacks transparency — output is always fully opaque. If you need transparency, the source format choice precluded it; consider converting BMP → PNG instead via a different tool.

Will every BMP variant work?

The browser's native BMP decoder handles the common variants: BI_RGB at 24-bit and 32-bit, sometimes BI_BITFIELDS for 16-bit or 32-bit, sometimes BI_RLE8 / BI_RLE4 run-length-encoded variants. Exotic variants (BITMAPV4HEADER / BITMAPV5HEADER with embedded ICC profiles, OS/2 OS22XBITMAPHEADER) may fail to load. Re-export from a desktop tool (GIMP, Paint.NET, IrfanView) as standard 24-bit BI_RGB BMP and try again if loading fails.

Is my file uploaded?

No. The decode + canvas draw + JPEG encode all run client-side via WHATWG Canvas drawImage + HTMLCanvasElement.toBlob('image/jpeg', quality). DevTools Network tab shows zero upload requests during conversion.

Why BMP gets so large — and how JPEG's DCT trades fidelity for size

BMP's structural simplicity is also its size problem. The format stores pixels uncompressed in BI_RGB mode (the most common variant): 24-bit pixels take exactly 3 bytes each, plus a 54-byte header (14-byte BITMAPFILEHEADER + 40-byte BITMAPINFOHEADER) and per-row 4-byte alignment padding. A 1920×1080 photo: 6,220,854 bytes ≈ 6.22 MB. A 4K (3840×2160) 24-bit photo: 24,883,254 bytes ≈ 24.88 MB. (32-bit BMP variants with alpha pad each pixel to 4 bytes, increasing those numbers ~33% to ~8.3 MB and ~33.2 MB respectively.) JPEG's compression pipeline (ITU-T T.81 baseline DCT) does three things: (1) converts RGB to Y′CbCr colour space and downsamples chroma 4:2:0 (immediate ~50% reduction since human vision is less sensitive to chroma resolution); (2) applies an 8×8 forward DCT to each Y/Cb/Cr block, transforming spatial pixels into frequency coefficients; (3) quantises the high-frequency coefficients via Annex K tables scaled by the quality slider (1-100), zeroing out coefficients below the perceptual noise floor; (4) Huffman-codes the surviving coefficients. The result for a typical 1920×1080 photographic source: 200-500 KB at quality 85 (90-95% smaller than the source BMP). Quality 90+ approaches visually lossless; below 70 produces visible 8×8 blocking and ringing. Standard BMP doesn't support transparency, so the alpha-channel question is moot — JPEG's lack of alpha doesn't lose anything that BMP carried. The BI_BITFIELDS variant of BMP can carry 32-bit RGBA in some Windows-specific encodings, but those are rare in practice.

  • Source BMP decoded per Microsoft Windows 3.0 (May 1990) BITMAPFILEHEADER + BITMAPINFOHEADER format
  • BMP browser-native decoding via HTMLImageElement (Chrome, Firefox, Safari, Edge all supported)
  • Adjustable JPEG quality 1-100 mapped to ITU-T T.81 Annex K quantisation tables
  • Substantial file-size reduction — typically 10-20× smaller (90-95% reduction) for photographic content at quality 85
  • Output JFIF v1.02 container (Hamilton, C-Cube Microsystems, 1 September 1992) widely accepted by legacy editors and CMS platforms
  • Real-time before/after file-size comparison via the canvas Blob byte length
  • Browser-side via WHATWG Canvas drawImage + HTMLCanvasElement.toBlob('image/jpeg', quality) — no upload
  • Operates in sRGB (IEC 61966-2-1:1999) at 8-bit precision; BMPs without an embedded ICC profile are interpreted as sRGB

Free. No signup. No file uploads. Ads via AdSense (consent required).

Sources (6)
  • Microsoft Corporation (1990). Windows Bitmap (BMP) File Format — BITMAPFILEHEADER + BITMAPINFOHEADER. learn.microsoft.com/en-us/windows/win32/gdi/bitmap-storage — modern BMP format introduced with Windows 3.0 (May 1990) extending the device-dependent bitmap (DDB) of Windows 1.0 (1985) and Windows 2.0 (1987) DIB support; uncompressed BI_RGB pixel storage at 1/4/8/16/24/32 bits per pixel; BITMAPFILEHEADER (14 bytes) + BITMAPINFOHEADER (40 bytes) header structure that virtually every modern BMP file uses.
  • ITU-T (CCITT) Study Group VIII & ISO/IEC JTC 1/SC 29/WG 10 (JPEG) (1992). Information technology — Digital compression and coding of continuous-tone still images: Requirements and guidelines. ITU-T Recommendation T.81 (18 September 1992) / ISO/IEC 10918-1:1994 — target JPEG baseline DCT bitstream; quality 1–100 maps to Annex K quantisation tables. Converting BMP (uncompressed) to JPG (lossy DCT) typically achieves 90-95% file size reduction at quality 85.
  • Hamilton, E. (C-Cube Microsystems) (1992). JPEG File Interchange Format (JFIF) Version 1.02. 1 September 1992 — target de facto JPEG container; APP0 marker, density units, thumbnail handling.
  • WHATWG (live). HTML Living Standard — HTMLImageElement (browser-native BMP decoding). html.spec.whatwg.org/#htmlimageelement — BMP is natively decoded by every modern browser (Chrome, Firefox, Safari, Edge) via their built-in BMP decoder; common Windows BMP variants (BI_RGB uncompressed at 24-bit and 32-bit, optionally with BITFIELDS or RLE compression) all work.
  • WHATWG (live). HTML Living Standard — Canvas 2D Context: drawImage() + toBlob('image/jpeg', quality). html.spec.whatwg.org/#dom-context-2d-drawimage + canvas section 4.12.5 — browser conversion mechanism: load BMP into HTMLImageElement → drawImage onto canvas at native dimensions → toBlob('image/jpeg', quality) re-encodes via the browser's built-in JPEG encoder.
  • International Electrotechnical Commission (IEC) (1999). Multimedia systems and equipment — Colour measurement and management — Part 2-1: Default RGB colour space — sRGB. IEC 61966-2-1:1999 — default 8-bit RGB colour space the Canvas 2D path operates in; BMP files without an embedded colour profile are interpreted as sRGB by the browser decoder.

These are the W3C, ISO/IEC, ITU-T, and IETF specifications the tool implements or builds on. Locate them on w3.org, iso.org, itu.int, or datatracker.ietf.org.

Sponsored