Signatur
Beschreibung
imagebmp() schreibt das übergebene GD-Bild als BMP-Datei (Windows Bitmap Format) entweder direkt in den Ausgabepuffer (Browser) oder in eine Datei auf dem Dateisystem. Die Funktion ist seit PHP 7.2.0 verfügbar und ergänzt die Familie der Bildausgabe-Funktionen wie imagepng(), imagejpeg() und imagegif().
Das BMP-Format ist ein verlustfreies Rasterformat ohne Transparenz-Unterstützung in der klassischen Variante. Es eignet sich vor allem für einfache Grafiken, bei denen maximale Kompatibilität mit Windows-Anwendungen wichtig ist. Der Parameter $compressed steuert, ob RLE-Komprimierung (Run-Length Encoding) auf 8-Bit-Bilder angewandt wird.
Wenn $file auf null gesetzt oder weggelassen wird, wird der BMP-Datenstrom direkt an den Ausgabepuffer gesendet. In diesem Fall sollte vor dem Aufruf der korrekte Content-Type-Header (image/bmp) gesendet werden, damit der Browser die Antwort korrekt interpretiert.
Das zurückgegebene BMP ist ein 24-Bit-Bild, außer wenn das Quellbild eine Palette besitzt – dann wird es als Palettenbild gespeichert. Bei transparenten Bildern gehen Transparenzinformationen verloren, da BMP in dieser Implementierung keine Alpha-Kanäle unterstützt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $image Pflicht | GdImage | Ein GD-Bildobjekt, das z. B. mit imagecreatetruecolor(), imagecreatefromjpeg() oder einer ähnlichen Funktion erzeugt wurde. |
|
| $file | string|null | null | Pfad zur Ausgabedatei als Zeichenkette oder null. Wird null übergeben oder der Parameter weggelassen, wird das Bild direkt in den Ausgabepuffer geschrieben. |
| $compressed | bool | true | Steuert, ob RLE-Komprimierung für Palettenbilder (8-Bit) angewandt wird. Bei true wird RLE-Komprimierung aktiviert, bei false wird unkomprimiert gespeichert. Für True-Color-Bilder hat dieser Parameter keine Wirkung. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn die Datei nicht geschrieben werden konnte oder das Bildobjekt ungültig ist).Beispiele
BMP-Bild direkt an den Browser ausgeben
<?php
// Neues True-Color-Bild erstellen
$image = imagecreatetruecolor(200, 100);
// Hintergrundfarbe setzen (blau)
$blue = imagecolorallocate($image, 0, 0, 200);
imagefill($image, 0, 0, $blue);
// Text in weiß schreiben
$white = imagecolorallocate($image, 255, 255, 255);
imagestring($image, 5, 30, 40, 'Hallo BMP!', $white);
// Korrekten Content-Type-Header senden
header('Content-Type: image/bmp');
// BMP in den Ausgabepuffer schreiben
imagebmp($image, null, false);
// Speicher freigeben
imagedestroy($image);
BMP-Bild in eine Datei speichern
<?php
// Bild aus einer bestehenden JPEG-Datei laden
$source = imagecreatefromjpeg('/pfad/zum/bild.jpg');
if ($source === false) {
die('Bild konnte nicht geladen werden.');
}
$outputPath = '/pfad/zum/ausgabe.bmp';
// Als BMP-Datei speichern (mit RLE-Komprimierung)
$result = imagebmp($source, $outputPath, true);
if ($result) {
echo 'BMP-Datei erfolgreich gespeichert: ' . $outputPath;
} else {
echo 'Fehler beim Speichern der BMP-Datei.';
}
imagedestroy($source);
Palettenbild als BMP ohne Komprimierung speichern
<?php
// Palettenbild erstellen (nicht True-Color)
$image = imagecreate(150, 75);
// Farben aus der Palette zuweisen
$background = imagecolorallocate($image, 255, 255, 0); // Gelb
$red = imagecolorallocate($image, 200, 0, 0);
// Rechteck zeichnen
imagerectangle($image, 10, 10, 140, 65, $red);
// Unkomprimiert speichern (compressed = false)
imagebmp($image, '/tmp/palette.bmp', false);
echo 'Paletten-BMP gespeichert (unkomprimiert).';
imagedestroy($image);
// Wichtig · Fallstricke
Transparenz: BMP in der von imagebmp() erzeugten Form unterstützt keinen Alpha-Kanal. Transparente Bereiche in True-Color-Bildern werden ohne Transparenzinformation gespeichert und erscheinen in der Regel schwarz oder werden mit der Hintergrundfarbe gefüllt. Wer Transparenz benötigt, sollte stattdessen imagepng() verwenden.
Dateigröße: BMP-Dateien sind in der Regel deutlich größer als PNG- oder JPEG-Dateien, da das Format kaum Komprimierung bietet. Für die Webausgabe sind PNG oder JPEG meist die bessere Wahl.
Sicherheit: Beim Schreiben in eine Datei sollte der Dateipfad niemals direkt aus Benutzereingaben stammen, um Path-Traversal-Angriffe zu verhindern. Pfade sollten stets validiert und auf erlaubte Verzeichnisse beschränkt werden.
Browserunterstützung: Nicht alle Browser zeigen BMP-Dateien direkt an. Für die Webausgabe empfiehlt sich daher eher imagepng() oder imagejpeg().