Start · Sprachen · PHP · Referenz · imagecreatefromwebp

imagecreatefromwebp

Funktion

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

seit PHP 5.4.0 Kategorie: image

Signatur

imagecreatefromwebp(string $filename): GdImage|false

Beschreibung

imagecreatefromwebp() liest eine WebP-Bilddatei (oder eine über URL erreichbare WebP-Ressource) ein und gibt ein GdImage-Objekt zurück, das anschließend mit den GD-Funktionen weiterverarbeitet werden kann. Die Funktion ist der Einstiegspunkt für jede Bildmanipulation auf Basis vorhandener WebP-Dateien.

WebP ist ein modernes Bildformat von Google, das im Vergleich zu JPEG und PNG deutlich kleinere Dateigrößen bei vergleichbarer oder besserer Qualität erzielt. Für Webanwendungen ist es daher besonders relevant, WebP-Dateien einzulesen, zu skalieren, zuzuschneiden oder in andere Formate zu konvertieren.

Damit die Funktion verfügbar ist, muss PHP mit WebP-Unterstützung in der GD-Erweiterung kompiliert worden sein. Dies kann mit gd_info() oder phpinfo() geprüft werden. Fehlt die WebP-Unterstützung, gibt die Funktion false zurück oder steht gar nicht zur Verfügung.

Das zurückgegebene GdImage-Objekt sollte nach der Verwendung mit imagedestroy() freigegeben werden (in PHP < 8.0 ist es ein Ressource-Handle; ab PHP 8.0 ein echtes Objekt, das automatisch vom Garbage Collector freigegeben wird).

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Pfad zur WebP-Datei auf dem Dateisystem oder eine gültige URL (sofern allow_url_fopen in der PHP-Konfiguration aktiviert ist). Der Pfad kann absolut oder relativ sein.

Rückgabewert

Typ
GdImage|false
Beschreibung
Gibt bei Erfolg ein GdImage-Objekt (vor PHP 8.0 eine GD-Ressource) zurück. Im Fehlerfall — z. B. wenn die Datei nicht existiert, keine gültige WebP-Datei ist oder WebP-Unterstützung fehlt — wird false zurückgegeben.

Beispiele

WebP-Datei einlesen und als JPEG ausgeben

<?php
// WebP-Bild einlesen
$bild = imagecreatefromwebp('foto.webp');

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

// Als JPEG mit Qualität 85 ausgeben
header('Content-Type: image/jpeg');
imagejpeg($bild, null, 85);

// Ressource freigeben (in PHP < 8.0 empfohlen)
imagedestroy($bild);

WebP-Bild skalieren und als neue WebP-Datei speichern

<?php
// Original-WebP einlesen
$original = imagecreatefromwebp('original.webp');

if ($original === false) {
    die('Fehler: Bild konnte nicht geladen werden.');
}

$breite  = imagesx($original);
$hoehe   = imagesy($original);

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

// Neues, leeres Bild in Zielgröße erstellen
$skaliert = imagecreatetruecolor($neueBreite, $neueHoehe);

// Original auf Zielbild kopieren und skalieren
imagecopyresampled(
    $skaliert, $original,
    0, 0, 0, 0,
    $neueBreite, $neueHoehe,
    $breite, $hoehe
);

// Als WebP mit Qualität 80 speichern
if (imagewebp($skaliert, 'skaliert.webp', 80)) {
    echo 'Skaliertes WebP wurde gespeichert.';
} else {
    echo 'Fehler beim Speichern.';
}

imagedestroy($original);
imagedestroy($skaliert);
Skaliertes WebP wurde gespeichert.

WebP-Unterstützung vor der Verwendung prüfen

<?php
$gdInfo = gd_info();

if (!isset($gdInfo['WebP Support']) || $gdInfo['WebP Support'] === false) {
    die('Diese PHP-Installation unterstützt kein WebP.');
}

$bild = imagecreatefromwebp('beispiel.webp');

if ($bild === false) {
    die('Die Datei konnte nicht geladen werden.');
}

echo 'Bildbreite: ' . imagesx($bild) . ' px';
echo PHP_EOL;
echo 'Bildhöhe: '  . imagesy($bild) . ' px';

imagedestroy($bild);
Bildbreite: 1920 px Bildhöhe: 1080 px

// Wichtig · Fallstricke

WebP-Unterstützung prüfen: Nicht jede PHP-GD-Installation unterstützt WebP. Prüfe dies vorab mit gd_info() und dem Schlüssel 'WebP Support', um Laufzeitfehler zu vermeiden.

URL-Laden: Das Laden von Bildern über URLs ist nur möglich, wenn allow_url_fopen = On in der php.ini gesetzt ist. Aus Sicherheitsgründen sollte das Laden externer URLs mit äußerster Vorsicht und nur aus vertrauenswürdigen Quellen erfolgen, um Server-Side Request Forgery (SSRF) zu vermeiden.

Animierte WebP-Dateien werden von GD nicht vollständig unterstützt. Es wird lediglich der erste Frame des animierten Bildes eingelesen.

Fehlerbehandlung: Die Funktion gibt eine PHP-Warnung aus, wenn die Datei nicht gelesen werden kann. Mit @imagecreatefromwebp() kann die Warnung unterdrückt werden — besser ist jedoch die Verwendung eines eigenen set_error_handler() oder das Prüfen der Datei mit file_exists() vor dem Aufruf.