BMP to AVIF Crop Converter
Load a BMP image, drag the crop handles to define exactly the area you need, preview the result, then download a next-gen AVIF file. Everything runs in your browser — your image never leaves your device.
Drop a BMP here
or Browse Files · BMP supported
What This Tool Does
This tool loads a BMP image directly in your browser, presents an interactive crop overlay with draggable handles, and converts the selected area to an AVIF file. No server upload is required. The full workflow — loading, cropping, encoding — runs entirely in client-side JavaScript using the HTML5 Canvas API. BMP files are decoded using URL.createObjectURL combined with img.decode(), which resolves only after the image is fully ready to paint, ensuring the canvas always receives complete pixel data. The output AVIF is encoded using the browser's native Canvas toBlob('image/avif') API, producing a compact next-gen image that is 90–98% smaller than the equivalent uncompressed BMP.
Who This Is For
- Web developers who have BMP source files and need a cropped, optimized AVIF for web delivery
- Designers extracting a specific region of a BMP bitmap for use in a modern web project
- Anyone converting legacy BMP files to next-gen AVIF without installing software
- Developers who need a quick crop-and-convert workflow that stays entirely in the browser
BMP vs AVIF: Format Comparison
| Property | BMP | AVIF |
|---|---|---|
| Primary use | Legacy Windows bitmaps, raw pixel data | Modern web images, photos |
| Compression | None (uncompressed) | Lossy or lossless (AV1) |
| Typical file size (12 MP) | 30–36 MB | 0.5–3 MB |
| Transparency support | Limited (32-bit BMP only) | Yes (alpha channel) |
| HDR & wide color gamut | No | Yes |
| Browser support | Universal (local only) | Chrome 85+, Firefox 93+, Edge 121+, Safari 16+ |
| Web delivery suitability | Poor — files are very large | Excellent — best-in-class compression |
| Best for | Legacy Windows apps, raw image data | Web delivery, modern image storage |
Frequently Asked Questions
URL.createObjectURL combined with img.decode() is the most reliable loading strategy across all image formats. The img.decode() promise resolves only when the image is fully decoded and ready to paint — guaranteed non-blank pixels. This prevents the silent blank-canvas problem that can occur when ctx.drawImage() is called before the browser completes the full image decode.canvas.toBlob('image/avif'), which is typically equivalent to a quality of 0.8–0.9. This produces excellent visual results with significant file size reduction compared to BMP. The output is visually lossless for most photographic content.