Tiefenblick

BMP in JPG, PNG und WebP konvertieren: Ein praktischer Leitfaden

koboshiCo-founder
·7 min Lesezeit
BMP in JPG, PNG und WebP konvertieren: Ein praktischer Leitfaden
Zusammenfassung

BMP ist einfach zu lesen, aber sperrig zu speichern. Dieser Leitfaden zeigt native OS-Tools, Kommandozeilen-Workflows und Konvertierung mit Code in fünf Sprachen – damit Sie BMP zuverlässig in JPG, PNG oder WebP umwandeln können.

Ein 1920 × 1080 großes 24-Bit-BMP belegt knapp 6 MB. Dieselbe Aufnahme als JPEG mit Qualität 90 liegt meist unter 500 KB. An diesem Unterschied von etwa zehn zu eins liegt es, dass BMP-Dateien in älteren Scannern, medizinischer Software und Windows-Interna immer noch auftauchen – und dass sie fast immer konvertiert werden müssen, bevor sie woanders verwendet werden können.

BMPs Stärke ist seine Einfachheit. Gute Konvertierung bedeutet, zu wissen, wann diese Einfachheit hilft, wann sie im Weg ist und welches Zielformat tatsächlich zum Job passt.

Warum BMP noch existiert

BMP speichert Pixel mit minimalem Header-Overhead. Keine Huffman-Tabellen, kein DEFLATE-Zustandsautomat, kein Chroma-Subsampling. Für eingebettete Systeme, ältere Windows-Tools und jede Situation, in der „Header lesen, Bytes kopieren“ die gesamte Aufgabe ist, ist diese Einfachheit ein echter Vorteil.

Dieselben Einschränkungen haben BMP aus dem Alltag verdrängt:

  • Keine effektive Kompression. Unkomprimierte BMPs sind groß. RLE-Varianten existieren, schlagen aber selten moderne Codecs.
  • Kein verlässlicher Alpha-Kanal. Das Alpha-Byte von 32-Bit-BMP wird von Tools unterschiedlich interpretiert.
  • Bottom-up-Zeilenreihenfolge. Die meisten BMPs speichern Zeilen von unten nach oben, was einen kleinen Konvertierungsschritt nötig macht, wenn das Zielformat Top-down erwartet.
  • Kein Metadaten-Ökosystem. Kein EXIF, keine ICC-Profilunterstützung im klassischen Header, keine Animation.

Für Archivierung oder Kompatibilität ist BMP in Ordnung. Für Web, E-Mail, Mobil oder Speichereffizienz muss es in etwas anderes umgewandelt werden.

Das richtige Ausgabeformat wählen

Bevor Sie einen Befehl ausführen oder Code schreiben, entscheiden Sie, worauf Sie optimieren.

ZielVerwendungKompromiss
JPGFotos, Vorschauen, jede BildschirmanzeigeVerlustbehaftet, aber winzige Dateigröße
PNGGrafiken, Screenshots, alles mit TransparenzVerlustfrei, für Fotos größer als JPG
WebPModernes Web, Apps, überall wo Bandbreite zähltKleiner als JPG/PNG, breite Browserunterstützung

Wenn Sie ein gescanntes Dokument mit Text und Diagrammen konvertieren, hält PNG Kanten scharf. Bei Fotos von einem alten Gerät ist JPG oder WebP die bessere Wahl. Für die Web-Auslieferung gewinnt WebP meist an Größe.

Unsere browserbasierten BMP to JPG-, BMP to PNG- und BMP to WebP-Konverter verarbeiten alle drei Fälle lokal – Ihre Datei bleibt dabei auf Ihrem Gerät.

Konvertierung unter Windows

Paint

  1. Öffnen Sie das BMP in Paint.
  2. Wählen Sie Datei > Speichern unter.
  3. Wählen Sie JPEG-Bild, PNG-Bild oder WebP-Bild.
  4. Speichern.

Paint reicht für Einzeldateien. Es bietet keine Qualitätskontrolle und keine Batch-Option, daher ist es für ganze Ordner unpraktisch.

PowerShell (ImageMagick)

Installieren Sie ImageMagick über den offiziellen Installer:

magick input.bmp output.jpg
magick input.bmp output.png
magick input.bmp output.webp

Für die Batch-Konvertierung in einem Ordner:

Get-ChildItem *.bmp | ForEach-Object {
    magick $_.FullName ($_.BaseName + ".jpg")
}

PowerShell ohne externe Tools

Windows 10 und 11 enthalten den .NET-Imaging-Stack. Das funktioniert für BMP zu JPG und PNG, nicht aber für WebP ohne Zusatzbibliothek:

Add-Type -AssemblyName System.Drawing
$img = [System.Drawing.Image]::FromFile("input.bmp")
$img.Save("output.jpg", [System.Drawing.Imaging.ImageFormat]::Jpeg)
$img.Dispose()

Konvertierung unter macOS

Vorschau

  1. Öffnen Sie das BMP in Vorschau.
  2. Wählen Sie Datei > Exportieren.
  3. Wählen Sie das Format aus der Dropdown-Liste.
  4. Passen Sie bei JPEG gegebenenfalls die Qualität an.

Vorschau ist schnell und privat, aber wie Paint nur für einzelne Dateien.

Terminal mit sips

sips ist in macOS integriert und unterstützt BMP, JPEG, PNG und TIFF:

sips -s format jpeg input.bmp --out output.jpg
sips -s format png input.bmp --out output.png

WebP erfordert ImageMagick oder cwebp aus dem Homebrew-Paket webp:

brew install webp

# cwebp kann BMP nicht direkt lesen, daher zuerst in PNG konvertieren
sips -s format png input.bmp --out temp.png
cwebp temp.png -o output.webp
rm temp.png

Batch-Shell-Schleife

for f in *.bmp; do
    sips -s format jpeg "$f" --out "${f%.bmp}.jpg"
done

Konvertierung unter Linux

ImageMagick

sudo apt install imagemagick

magick input.bmp output.jpg
magick input.bmp output.png
magick input.bmp output.webp

JPEG-Qualität anpassen:

magick input.bmp -quality 90 output.jpg

Batch-Konvertierung

for f in *.bmp; do
    magick "$f" "${f%.bmp}.jpg"
done

Wenn Sie nur die kleinstmögliche WebP-Ausgabe benötigen, verwenden Sie direkt cwebp:

for f in *.bmp; do
    cwebp -q 85 "$f" -o "${f%.bmp}.webp"
done

Konvertierung mit Code

Wenn Sie Konvertierungen innerhalb einer Anwendung, Pipeline oder eines Backend-Services brauchen, ist der Aufruf einer Bibliothek meist sauberer als ein Shell-Aufruf von ImageMagick.

TypeScript / Node.js

Verwenden Sie sharp. Es liest BMP und gibt JPG, PNG und WebP aus.

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")

Im Browser können Sie sharp nicht ausführen. Unser BMP to WebP-Konverter verwendet WebAssembly, um Dekodierung und Kodierung vollständig clientseitig durchzuführen.

PHP

PHP hat integrierte Bildfunktionen, wenn die GD-Erweiterung aktiviert ist.

<?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

Go's Standardbibliothek liest kein BMP, aber golang.org/x/image/bmp schon. Für die Ausgabe verwenden Sie image/jpeg, image/png und 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 und WebP folgen demselben Muster mit png.Encode und webp.Encode.

Java

Javas ImageIO liest BMP out-of-the-box. Für WebP-Ausgabe brauchen Sie eine Bibliothek wie webp-imageio oder cwebp-Bindings.

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);
    }
}

Für feinere JPEG-Qualitätskontrolle verwenden Sie die JPEGImageWriteParam-API.

Python

Mit Pillow ist Python der unkomplizierteste Weg, BMP in jedes gängige Format zu verwandeln.

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)

Für transparente PNG-Ausgabe erzwingen Sie stattdessen keine RGB-Konvertierung:

with Image.open("input.bmp") as img:
    img.save("output.png")

Häufige Fallstricke

  • Indizierte BMPs. BMPs mit 8 Bit oder weniger verwenden eine Palette. Manche Decoder geben ohne explizite Konvertierung Palettenindizes statt RGB-Werte zurück. In Pillow löst img.convert("RGB") das Problem vor dem Speichern als JPEG oder WebP.
  • Bottom-up-Ausrichtung. Die meisten Bibliotheken handhaben das automatisch, aber wenn Sie einen manuellen BMP-Decoder schreiben, bedeutet ein positives Höhenfeld, dass Zeilen von unten nach oben gespeichert sind.
  • JPEG-Standardqualität. Viele Tools verwenden 75–80 als Standard. Für Fotos, die im Vollbild betrachtet werden, ist 90 sicherer. Für Thumbnails reichen 70–80.
  • WebP-Kompatibilität. WebP hat hervorragende Browserunterstützung, scheitert aber in manchen älteren Desktop-Bildbetrachtern. Wenn das Ziel eine native Windows-App ist, sind PNG oder JPG sicherer.

Was wofür verwenden

  • Legacy-Archive: Bewahren Sie das Original-BMP auf. Speicherplatz ist billig; die verlorene Originalversion nicht.
  • Web-Uploads: Konvertieren Sie zu WebP. Falls Fallback nötig, behalten Sie eine JPG-Kopie.
  • Druck- oder Bearbeitungsworkflows: PNG bleibt verlustfrei und vermeidet Kompressionsartefakte.
  • E-Mail und Messaging: JPG ist das sicherste universelle Format.

Wenn Sie einen schnellen Weg suchen, der weder Installation noch Kommandozeile erfordert, verwenden Sie unsere BMP to JPG-, BMP to PNG- und BMP to WebP-Konverter. Alles läuft im Browser, sodass die Datei von Anfang bis Ende auf Ihrem Rechner bleibt.

Mehr Blog-Posts zum Lesen