Start · Sprachen · PHP · Referenz · imagecreatefrombmp

imagecreatefrombmp

Funktion

Erstellt ein neues GD-Bildobjekt aus einer BMP-Datei oder URL und gibt es zurück.

seit PHP 7.2.0 Kategorie: image

Signatur

imagecreatefrombmp(string $filename): GdImage|false

Beschreibung

imagecreatefrombmp() liest eine BMP-Datei (Windows Bitmap) von einem lokalen Dateipfad oder einer URL und gibt ein GdImage-Objekt zurück, das anschließend mit anderen GD-Funktionen weiterverarbeitet werden kann. Die Funktion ist seit PHP 7.2.0 verfügbar und schließt damit eine lange bestehende Lücke in der GD-Bibliothek, da BMP zuvor nicht nativ unterstützt wurde.

Typische Einsatzbereiche sind das Einlesen von BMP-Bildern zur Konvertierung in webfreundlichere Formate wie PNG oder JPEG sowie das Bearbeiten und Manipulieren von BMP-Grafiken innerhalb eines PHP-Skripts. Die Funktion unterstützt sowohl unkomprimierte als auch RLE-4- und RLE-8-komprimierte BMP-Dateien.

Nach erfolgreicher Erstellung des Bildobjekts kann es mit Funktionen wie imagepng(), imagejpeg() oder imagewebp() in andere Formate ausgegeben oder gespeichert werden. Wenn die Datei nicht geöffnet werden kann oder kein gültiges BMP-Format vorliegt, gibt die Funktion false zurück.

Beim Laden von URLs ist zu beachten, dass der PHP-Konfigurationswert allow_url_fopen aktiviert sein muss. Aus Sicherheitsgründen sollte das Laden von Bildern aus nicht vertrauenswürdigen URLs vermieden werden.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Pfad zur BMP-Datei oder eine URL. Bei URLs muss allow_url_fopen in der php.ini aktiviert sein.

Rückgabewert

Typ
GdImage|false
Beschreibung
Gibt bei Erfolg ein GdImage-Objekt zurück. Im Fehlerfall (z. B. Datei nicht gefunden oder ungültiges BMP-Format) wird false zurückgegeben.

Beispiele

BMP-Datei laden und als PNG speichern

<?php
// BMP-Datei einlesen
$image = imagecreatefrombmp('eingabe.bmp');

if ($image === false) {
    die('Fehler: BMP-Datei konnte nicht geladen werden.');
}

// Bild als PNG speichern
imagepng($image, 'ausgabe.png');

// Speicher freigeben
imagedestroy($image);

echo 'BMP erfolgreich in PNG konvertiert.';
?>
BMP erfolgreich in PNG konvertiert.

BMP-Bild laden, skalieren und als JPEG ausgeben

<?php
// Original-BMP laden
$original = imagecreatefrombmp('foto.bmp');

if ($original === false) {
    die('BMP-Datei konnte nicht geladen werden.');
}

$breit  = imagesx($original);
$hoch   = imagesy($original);

// Zielgröße: 50 % der Originalgröße
$neueBreite = (int)($breit / 2);
$neueHoehe  = (int)($hoch  / 2);

// Leeres Zielbild erstellen
$skaliert = imagecreatetruecolor($neueBreite, $neueHoehe);

// Bild skalieren (Resampling für bessere Qualität)
imagecopyresampled(
    $skaliert,
    $original,
    0, 0, 0, 0,
    $neueBreite, $neueHoehe,
    $breit, $hoch
);

// Als JPEG an den Browser senden
header('Content-Type: image/jpeg');
imagejpeg($skaliert, null, 85);

// Speicher freigeben
imagedestroy($original);
imagedestroy($skaliert);
?>

// Wichtig · Fallstricke

Verfügbarkeit: imagecreatefrombmp() ist erst seit PHP 7.2.0 verfügbar. Für ältere PHP-Versionen müssen externe Bibliotheken oder eigene Parser-Implementierungen genutzt werden.

Sicherheit: Beim Laden von Bildern aus Benutzereingaben sollte der Dateipfad sorgfältig validiert werden, um Path-Traversal-Angriffe (../../etc/passwd) zu verhindern. Das Laden von BMP-Dateien aus nicht vertrauenswürdigen Quellen über URLs ist ebenfalls riskant. Im Zweifel sollte das MIME-Type des Bildes nach dem Laden mit getimagesize() oder finfo geprüft werden.

Speicher: BMP-Dateien sind oft unkomprimiert und können sehr groß sein. Das Laden großer BMP-Bilder kann zu hohem Speicherverbrauch führen. Der PHP-Speicherlimit (memory_limit) sollte entsprechend angepasst werden.

Formatunterstützung: Es werden unkomprimierte sowie RLE-4- und RLE-8-komprimierte BMP-Dateien unterstützt. Nicht alle BMP-Varianten (z. B. 16-Bit oder 32-Bit mit Alpha) werden von allen GD-Versionen gleich gut verarbeitet.