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
- 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.
- 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.
- The tool runs Canvas drawImage (decoded BMP → canvas at native dimensions) → toBlob('image/jpeg', quality) which applies JPEG's DCT + Huffman + chroma subsampling pipeline.
- 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.
- 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.