Un BMP 1920 × 1080 en 24 bits fait presque 6 Mo. La même image en JPEG qualité 90 pèse généralement moins de 500 Ko. C'est cet écart d'environ un à dix qui explique pourquoi les fichiers BMP traînent encore dans les anciens scanners, les logiciels médicaux et les composants internes de Windows — et pourquoi il faut presque toujours les convertir avant de les utiliser ailleurs.
L'avantage réel de BMP, c'est sa simplicité. Bien le convertir, c'est savoir quand cette simplicité aide, quand elle complique les choses et quel format cible correspond vraiment au besoin.
Pourquoi BMP existe toujours
BMP stocke les pixels avec une surcharge d'en-tête minimale. Pas de tables Huffman, pas de machine à états DEFLATE, pas de sous-échantillonnage chromatique. Pour les systèmes embarqués, les outils Windows hérités et toute situation où « lire l'en-tête, copier les octets » est l'unique exigence, c'est un avantage réel.
Les inconvénients sont les mêmes qui l'ont poussé hors de l'usage quotidien :
- Pas de compression efficace. Les BMP non compressés sont énormes. Les variantes RLE existent, mais elles battent rarement les codecs modernes.
- Pas de canal alpha fiable. L'octet alpha du BMP 32 bits est pris en charge de manière incohérente selon les outils.
- Lignes stockées de bas en haut. La plupart des BMP stockent les lignes depuis le bas de l'image vers le haut, ce qui ajoute une petite étape de conversion pour tout processus attendant des données de haut en bas.
- Aucun écosystème de métadonnées. Pas d'EXIF, pas de profil ICC dans l'en-tête classique, pas d'animation.
Pour l'archivage ou la compatibilité, BMP convient. Pour le web, l'email, le mobile ou l'efficacité de stockage, il doit devenir autre chose.
Choisir le bon format de sortie
Avant d'exécuter une commande ou d'écrire du code, définissez ce que vous cherchez à optimiser.
| Cible | À utiliser quand | Compromis |
|---|---|---|
| JPG | Photos, aperçus, tout affichage écran | Avec perte, mais fichiers très petits |
| PNG | Graphiques, captures d'écran, transparence requise | Sans perte, plus gros que JPG pour les photos |
| WebP | Web moderne, applications, bande passante critique | Plus petit que JPG/PNG, support navigateur large |
Si vous convertissez un document numérisé avec du texte et des schémas, PNG conserve les bords nets. S'il s'agit d'une photo provenant d'un ancien appareil, JPG ou WebP est le bon choix. Pour la diffusion web, WebP gagne généralement en taille.
Nos convertisseurs dans le navigateur BMP to JPG, BMP to PNG et BMP to WebP gèrent les trois cas localement : vos fichiers restent sur votre appareil.
Convertir sous Windows
Paint
- Ouvrez le BMP dans Paint.
- Choisissez Fichier > Enregistrer sous.
- Sélectionnez Image JPEG, Image PNG ou Image WebP.
- Enregistrez.
Paint convient pour un fichier isolé. Il n'offre aucun contrôle de qualité ni option de traitement par lots, ce qui le rend peu pratique pour des dossiers entiers d'images.
PowerShell (ImageMagick)
Installez ImageMagick depuis le programme d'installation officiel :
magick input.bmp output.jpg
magick input.bmp output.png
magick input.bmp output.webp
Conversion par lots dans un dossier :
Get-ChildItem *.bmp | ForEach-Object {
magick $_.FullName ($_.BaseName + ".jpg")
}
PowerShell sans outils externes
Windows 10 et 11 incluent la pile d'imagerie .NET. Cela fonctionne pour BMP vers JPG et PNG, mais pas pour WebP sans bibliothèque supplémentaire :
Add-Type -AssemblyName System.Drawing
$img = [System.Drawing.Image]::FromFile("input.bmp")
$img.Save("output.jpg", [System.Drawing.Imaging.ImageFormat]::Jpeg)
$img.Dispose()
Convertir sous macOS
Aperçu
- Ouvrez le BMP dans Aperçu.
- Choisissez Fichier > Exporter.
- Sélectionnez le format dans le menu déroulant.
- Ajustez la qualité pour JPEG si nécessaire.
Aperçu est rapide et respecte la vie privée, mais comme Paint, il ne traite qu'un fichier à la fois.
Terminal avec sips
sips est intégré à macOS et prend en charge BMP, JPEG, PNG et TIFF :
sips -s format jpeg input.bmp --out output.jpg
sips -s format png input.bmp --out output.png
WebP nécessite ImageMagick ou cwebp du paquet Homebrew webp :
brew install webp
# cwebp ne lit pas directement le BMP, donc conversion intermédiaire en PNG
sips -s format png input.bmp --out temp.png
cwebp temp.png -o output.webp
rm temp.png
Boucle shell par lots
for f in *.bmp; do
sips -s format jpeg "$f" --out "${f%.bmp}.jpg"
done
Convertir sous Linux
ImageMagick
sudo apt install imagemagick
magick input.bmp output.jpg
magick input.bmp output.png
magick input.bmp output.webp
Ajuster la qualité JPEG :
magick input.bmp -quality 90 output.jpg
Conversion par lots
for f in *.bmp; do
magick "$f" "${f%.bmp}.jpg"
done
Si vous n'avez besoin que de la plus petite sortie WebP possible, utilisez directement cwebp :
for f in *.bmp; do
cwebp -q 85 "$f" -o "${f%.bmp}.webp"
done
Convertir avec du code
Lorsque vous avez besoin d'une conversion au sein d'une application, d'un pipeline ou d'un service backend, appeler une bibliothèque est généralement plus propre que d'invoquer ImageMagick depuis le shell.
TypeScript / Node.js
Utilisez sharp. Il gère les entrées BMP et produit du JPG, PNG et WebP.
import sharp from "sharp"
async function convertBmp(
input: string,
output: string,
format: "jpg" | "png" | "webp"
) {
await sharp(input)
.toFormat(format, format === "jpg" ? { quality: 90 } : undefined)
.toFile(output)
}
await convertBmp("input.bmp", "output.jpg", "jpg")
await convertBmp("input.bmp", "output.png", "png")
await convertBmp("input.bmp", "output.webp", "webp")
Dans le navigateur, vous ne pouvez pas exécuter sharp. Notre convertisseur BMP to WebP utilise WebAssembly pour décoder et encoder entièrement côté client.
PHP
PHP dispose de fonctions d'image intégrées si l'extension GD est activée.
<?php
function bmpToJpg(string $input, string $output, int $quality = 90): void {
$image = imagecreatefrombmp($input);
imagejpeg($image, $output, $quality);
imagedestroy($image);
}
function bmpToPng(string $input, string $output): void {
$image = imagecreatefrombmp($input);
imagepng($image, $output);
imagedestroy($image);
}
function bmpToWebp(string $input, string $output, int $quality = 90): void {
$image = imagecreatefrombmp($input);
imagewebp($image, $output, $quality);
imagedestroy($image);
}
bmpToJpg("input.bmp", "output.jpg");
bmpToPng("input.bmp", "output.png");
bmpToWebp("input.bmp", "output.webp");
Go
La bibliothèque standard de Go ne lit pas le BMP, mais golang.org/x/image/bmp le fait. Pour la sortie, utilisez image/jpeg, image/png et golang.org/x/image/webp.
package main
import (
"image/jpeg"
"image/png"
"os"
"golang.org/x/image/bmp"
"golang.org/x/image/webp"
)
func bmpToJpg(input, output string, quality int) error {
f, err := os.Open(input)
if err != nil {
return err
}
defer f.Close()
img, err := bmp.Decode(f)
if err != nil {
return err
}
out, err := os.Create(output)
if err != nil {
return err
}
defer out.Close()
return jpeg.Encode(out, img, &jpeg.Options{Quality: quality})
}
PNG et WebP suivent le même modèle avec png.Encode et webp.Encode.
Java
ImageIO de Java lit le BMP nativement. Pour la sortie WebP, vous avez besoin d'une bibliothèque telle que webp-imageio ou des bindings cwebp.
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class BmpConverter {
public static void bmpToJpg(String input, String output, float quality) throws IOException {
BufferedImage image = ImageIO.read(new File(input));
File out = new File(output);
ImageIO.write(image, "jpg", out);
}
public static void bmpToPng(String input, String output) throws IOException {
BufferedImage image = ImageIO.read(new File(input));
File out = new File(output);
ImageIO.write(image, "png", out);
}
}
Pour un contrôle plus fin de la qualité JPEG, utilisez l'API JPEGImageWriteParam.
Python
Avec Pillow, Python offre la façon la plus directe de convertir un BMP vers n'importe quel format courant.
from PIL import Image
with Image.open("input.bmp") as img:
img.convert("RGB").save("output.jpg", quality=90)
with Image.open("input.bmp") as img:
img.save("output.png")
with Image.open("input.bmp") as img:
img.save("output.webp", quality=90)
Pour conserver la transparence en sortie PNG, ne forcez pas la conversion RGB :
with Image.open("input.bmp") as img:
img.save("output.png")
Pièges courants
- BMP indexés. Les BMP de 8 bits ou moins utilisent une palette. Certains décodeurs renvoient des index de palette au lieu de valeurs RGB si vous ne convertissez pas explicitement. Dans Pillow,
img.convert("RGB")résout cela avant d'enregistrer en JPEG ou WebP. - Orientation de bas en haut. La plupart des bibliothèques gèrent cela automatiquement, mais si vous écrivez un décodeur BMP manuel, souvenez-vous qu'un champ de hauteur positif signifie que les lignes sont stockées de bas en haut.
- Qualité JPEG par défaut. De nombreux outils utilisent 75–80 par défaut. Pour des photos visionnées en plein écran, 90 est plus sûr. Pour des vignettes, 70–80 suffisent.
- Compatibilité WebP. WebP est très bien supporté par les navigateurs, mais échoue encore dans certaines anciennes visionneuses d'images de bureau. Si la cible est une application Windows native, PNG ou JPG sont plus sûrs.
Quoi utiliser où
- Archives héritées : conservez le BMP original. Le stockage coûte peu cher ; perdre la version canonique, non.
- Envoi vers le web : convertissez en WebP. Si un fallback est nécessaire, gardez une copie JPG.
- Flux d'impression ou d'édition : PNG reste sans perte et évite les artefacts de compression.
- Email et messagerie : JPG est le format universel le plus sûr.
Si vous préférez éviter les installations, la ligne de commande et l'envoi de fichiers sur un serveur, utilisez nos convertisseurs BMP to JPG, BMP to PNG et BMP to WebP. Tout se passe dans le navigateur, donc le fichier reste sur votre machine de bout en bout.



