So wandeln Sie Base64 in BMP um
- Fügen Sie das Base64 oder die vollständige URI
data:image/bmp;base64,...ein, oder öffnen Sie eine.txt-Datei mit der Zeichenkette. Zeichenketten von mehreren Megabyte sind bei Bitmaps normal und hier kein Problem. - Die Statuszeile sollte bei Erkannt BMP anzeigen. Die Vorschau zeigt das Bild und seine Pixelgröße; Größe nennt die Größe der dekodierten Datei in Bytes.
- Drücken Sie Datei herunterladen, um die
.bmpzu speichern.
Browser dekodieren BMP in einem <img>, darunter monochrome 1-Bit-, 8-Bit-Paletten-, 24-Bit- und die meisten 32-Bit-Dateien.
BMP-Dateigröße aus Breite und Höhe
Eine BMP hat einen 14-Byte-Datei-Header, einen Info-Header (40 Bytes in der üblichen Version), optional eine Palette und dann die Pixelzeilen. Jede Zeile wird auf ein Vielfaches von 4 Bytes aufgefüllt. Für ein 24-Bit-Bild ohne Palette gilt:
file size = 54 + height × (width × 3, rounded up to a multiple of 4)
| Bild | Zeilengröße | BMP-Datei | Base64-Länge |
|---|---|---|---|
| 33×10, 24 Bit | 99 → 100 Bytes | 1.054 Bytes | 1.408 Zeichen |
| 100×100, 24 Bit | 300 Bytes | 30.054 Bytes | 40.072 Zeichen |
| 800×600, 24 Bit | 2.400 Bytes | 1.440.054 Bytes | 1.920.072 Zeichen |
| 1920×1080, 24 Bit | 5.760 Bytes | 6.220.854 Bytes | 8.294.472 Zeichen |
| 1920×1080, 1 Bit | 240 Bytes | 259.262 Bytes | 345.684 Zeichen |
Bei 1 Bit kommt eine zweifarbige Palette mit 8 Bytes hinzu. Weil die Zahlen feststehen, lässt sich eine Bitmap leicht prüfen: Der Datei-Header speichert die Gesamtgröße in den Bytes 2 bis 5. Im Hex-Dump des 100×100-Beispiels lauten sie 66 75 00 00, als Little-Endian-Zahl also 0x7566 = 30.054. Zeigt Größe weniger an, wurde das Base64 abgeschnitten. BMP-Zeilen werden standardmäßig von unten nach oben gespeichert, einer abgeschnittenen Bitmap fehlt daher der obere Teil des Bildes.
Wie BMP-Base64 aussieht
Jede BMP beginnt mit den Buchstaben BM, das Base64 also mit Qk. Das dritte Zeichen hängt von der Dateigröße ab und ist 0, 1, 2 oder 3; typisch sind Qk02 und Qk1m. Der Detektor prüft außerdem die Größe des Info-Headers bei Byte 14, damit Zufallsdaten, die zufällig mit BM beginnen, nicht für eine Bitmap gehalten werden.
Bitmaps ohne Header (DIB)
Manche Quellen liefern die Bitmap ohne den Datei-Header BM. Das ist ein DIB, das Format der Windows-Zwischenablage (CF_DIB), der Bilder in ICO-Dateien und mancher Geräte-SDKs. Sein Base64 beginnt mit KAAAA, der Kodierung der Info-Header-Größe von 40 Bytes, 28 00 00 00.
Das Tool kann es nicht anzeigen, denn ohne Datei-Header sind die Bytes keine gültige Bilddatei, und es meldet Binärdaten. Abhilfe schafft es, die 14 fehlenden Bytes voranzustellen:
import base64, struct
def dib_to_bmp(dib: bytes) -> bytes:
header_size, = struct.unpack_from("<I", dib, 0)
bpp, = struct.unpack_from("<H", dib, 14)
compression, colors = struct.unpack_from("<I", dib, 16)[0], struct.unpack_from("<I", dib, 32)[0]
if bpp <= 8 and colors == 0:
colors = 1 << bpp
masks = 12 if header_size == 40 and compression == 3 else 0
offset = 14 + header_size + masks + colors * 4
return b"BM" + struct.pack("<IHHI", 14 + len(dib), 0, 0, offset) + dib
b64 = open("dib.txt").read()
with open("image.bmp", "wb") as f:
f.write(dib_to_bmp(base64.b64decode(b64)))
Der Header braucht die Gesamtgröße der Datei und den Offset der Pixeldaten. Diese folgen auf den Info-Header, die Farbmasken von 16- und 32-Bit-Bitfield-Bildern und die Palette. Kodieren Sie das Ergebnis mit BMP in Base64 wieder, wenn Sie es als Text brauchen, oder prüfen Sie es hier. DIBs aus ICO-Dateien sind ein Sonderfall: Ihre Höhe ist verdoppelt, um Platz für eine Transparenzmaske zu schaffen. Base64 in Python erklärt mehr zum Dekodieren von Binärdaten.
Häufige Probleme
- „Erkannt: PNG, erwartet: BMP.“ Der Absender hat das Bild bereits umgewandelt, oder das System nennt es nur Bitmap. Speichern Sie es mit Als .png herunterladen als PNG; das ist kleiner und wird von jedem Programm gelesen.
- Die Farben wirken vertauscht oder das Bild steht in einem anderen Programm auf dem Kopf. BMP speichert Pixel als Blau-Grün-Rot und meist von unten nach oben. Eine negative Höhe im Header bedeutet Zeilen von oben nach unten. Browser kommen mit all dem zurecht, einfache selbst geschriebene Reader manchmal nicht.
- Ein Gerät lehnt die dekodierte Datei ab. Vergleichen Sie ihren SHA-256 mit dem, was das Gerät empfangen hat, und prüfen Sie dann Farbtiefe und Header-Version im Hex-Dump. Ältere Reader erwarten einen 40-Byte-Header (
28 00 00 00bei Offset 14) und keinen Alphakanal.
Häufige Fragen
Warum ist meine Bitmap-Base64-Zeichenkette so lang?
BMP speichert rohe Pixel ohne Komprimierung. Eine 24-Bit-Bitmap mit 1920×1080 Pixeln hat 6.220.854 Bytes, also 8.294.472 Base64-Zeichen, ganz egal, was das Bild zeigt.
Mein Base64 beginnt mit KAAAA statt mit Qk. Was ist das?
Eine Bitmap ohne ihren 14-Byte-Datei-Header, ein sogenanntes DIB. Es stammt aus der Windows-Zwischenablage, aus manchen Geräte-SDKs und aus ICO-Dateien. Ergänzen Sie den Header mit dem Python-Snippet auf dieser Seite, dann wird daraus eine normale .bmp.
Wie erkenne ich, ob eine BMP-Zeichenkette vollständig ist?
Die Bytes 2 bis 5 der Datei enthalten ihre Gesamtgröße. Öffnen Sie Hex-Dump anzeigen, lesen Sie sie als Little-Endian-Zahl und vergleichen Sie sie mit der Zeile Größe. Ist die dekodierte Größe kleiner, wurde die Zeichenkette abgeschnitten.
Kann ich statt einer BMP ein PNG bekommen?
Diese Seite speichert die Bitmap unverändert. Zum Umwandeln laden Sie sie herunter und legen sie in BMP in Base64 mit Umwandeln in PNG ab; PNG ist verlustfrei und meist viel kleiner.