Initializing... drag & drop files here
Supports: BMP
BMP is Microsoft's native Windows bitmap container, designed in the late 1980s for the original Windows GDI. PPM (Portable Pixmap) is the colour member of the Netpbm family, developed by Jef Poskanzer by the end of 1988 as a lowest-common-denominator interchange format. Both store raster pixels with minimal cleverness, but they live in different ecosystems: BMP rules Windows tooling, PPM rules Unix image-processing pipelines. Converting BMP to PPM is what you do when a research script, computer-vision dataset, or Netpbm command-line tool needs your image and refuses anything else.
pnmscale, pamcomp, pnmquant, and convert accept PPM natively. The Netpbm package ships over 300 small utilities that chain via stdin/stdout, and PPM is the connective tissue.width * height * 3 bytes. No DEFLATE, no Huffman, no IDAT chunks.| Property | BMP | PPM |
|---|---|---|
| Developer | Microsoft (Windows 2.0, 1987) | Jef Poskanzer / Netpbm project (1988) |
| Magic bytes | BM (0x42 0x4D) |
P6 (raw) or P3 (plain ASCII) |
| Compression | Usually uncompressed; optional RLE for 4- and 8-bit indexed | None — always raw pixel data |
| Bit depths | 1, 2, 4, 8, 16, 24, 32 bpp | 1 byte/sample when maxval < 256; 2 bytes/sample when maxval ≥ 256 |
| Colour model | Indexed (with palette) or direct RGB / RGBA | Direct RGB only (no palette, no alpha) |
| Metadata | DIB header, optional ICC profile, gap fields | None — just width, height, maxval |
| Row padding | Each row padded to a 4-byte boundary | No padding |
| MIME type | image/bmp |
image/x-portable-pixmap (unregistered with IANA) |
| Native ecosystem | Windows GDI, Paint, legacy printer drivers | Unix/Linux, Netpbm, ImageMagick, academic CV code |
| Typical use today | Windows screenshots, icon source art | Pipeline intermediate, scientific imaging, teaching |
| Setting | PPM maxval | Bytes / pixel | Best for |
|---|---|---|---|
| 8-bit (Recommended) | 255 | 3 | General use, ImageMagick pipelines, OpenCV input |
| 16-bit (High Precision) | 65535 | 6 | Medical / scientific imaging, high-dynamic-range source, deep colour grading |
| 1-bit (Black & White) | 1 (as PBM-like P6) | ~3 (palette collapsed to two values) | OCR rasters, line-art diagrams, fax-style documents |
Pick 8-bit unless you know your downstream tool needs more — a 1920x1080 16-bit PPM is roughly 12 MB versus 6 MB at 8-bit, and most viewers display 16-bit by clipping back to 8-bit anyway.
Both formats store raw pixel data with no compression, so a 1920x1080 24-bit image is about 6 MB either way (1920 x 1080 x 3 bytes plus a tiny header). BMP can be slightly larger because each row is padded to a 4-byte boundary and the DIB header carries more bytes; PPM has no row padding and a header under 20 bytes. If you need a smaller file, convert to BMP to PNG or BMP to JPG instead — those use compression.
P6 is the magic number for "raw" (binary) PPM, the modern default. P3 is the older ASCII variant where every pixel is written as decimal text — useful for hand-debugging but typically 3x to 5x larger. Every mainstream Netpbm tool, ImageMagick build, GIMP, and OpenCV (cv::imread) read P6 PPM by default. If you specifically need P3 ASCII output, open the file in GIMP or ImageMagick and re-export — xconvert produces P6.
No. PPM is strictly three-channel RGB. If your source BMP has a 32-bit RGBA layout, the alpha channel is dropped and transparent pixels render as the BMP's stored background colour. Convert to PNG via BMP to PNG if you need to preserve transparency.
PPM has no compression layer in the spec — the format is defined to be raw pixel bytes after the header. There is nothing to tune. File size depends only on width x height x bit depth. This is also why PPM is popular as a pipeline intermediate: it never re-quantises or filters your pixels.
Use 8-bit unless the downstream tool explicitly asks for 16-bit. Source BMPs from screenshots, scans, and consumer cameras are 8-bit per channel; converting to 16-bit only doubles file size without adding information. Pick 16-bit when feeding HDR-aware image processing, medical DICOM workflows, or astrophotography stacks where every quantisation level matters.
Indexed BMPs (1, 4, and 8-bit) are expanded to full RGB during conversion — the palette is resolved into per-pixel colour triplets because PPM does not support indexed mode. The visual output is identical, but the file size grows: an 8-bit 1024x768 indexed BMP (~770 KB) becomes a ~2.3 MB PPM after expansion.
Yes. Use PPM to BMP for the reverse direction. Because both formats store raw RGB samples at the same bit depth, a round trip BMP → PPM → BMP at 8-bit preserves every pixel value exactly. The only difference will be metadata (BMP DIB header fields, gap, colour profile) which PPM cannot carry through.
Yes within the upload limit. A 600 DPI A3 scan at 24-bit colour is roughly 250 MB as BMP and similar as PPM. Files convert in a single browser session, so on slower machines large 16-bit PPM jobs may take 20-30 seconds per image. For batch scientific work over many gigabytes, the command-line bmptopnm from the Netpbm package is faster on the same hardware.
If you want lossless interchange but also need metadata, multi-page support, or LZW compression, convert to TIFF instead via BMP to TIFF. TIFF is the format scientific imaging usually settles on once a workflow outgrows PPM's minimalism — it keeps the lossless guarantee but adds tags, ICC profiles, and 16-bit per channel without the file-size penalty.