Signatur
Beschreibung
imagewebp() gibt ein zuvor erzeugtes oder geladenes GD-Bild im WebP-Format aus. Je nach zweitem Parameter wird das Bild entweder direkt an den Browser gesendet oder in eine Datei auf dem Server geschrieben. WebP ist ein modernes, verlustbehaftetes (und ab libwebp 0.5 auch verlustfreies) Bildformat von Google, das deutlich kleinere Dateigrößen als JPEG bei vergleichbarer Qualität bietet.
Wird der Parameter file als null übergeben oder weggelassen, erfolgt die Ausgabe in den Standard-Ausgabe-Stream (typischerweise direkt an den Browser). In diesem Fall sollte vor dem Aufruf der korrekte HTTP-Header Content-Type: image/webp gesendet werden.
Der Parameter quality akzeptiert Werte von 0 (schlechteste Qualität, kleinste Dateigröße) bis 100 (beste Qualität). Der Standardwert -1 verwendet die interne Standard-Qualitätsstufe der libwebp-Bibliothek (ca. 80). Für verlustfreie WebP-Komprimierung kann, sofern die libwebp-Version es unterstützt, IMG_WEBP_LOSSLESS als Qualitätswert übergeben werden.
Die Funktion setzt eine PHP-Installation voraus, die mit WebP-Unterstützung kompiliert wurde. Ob dies der Fall ist, lässt sich über imagetypes() oder phpinfo() prüfen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $image Pflicht | GdImage | Das GD-Bildobjekt, das ausgegeben werden soll. Wird typischerweise durch Funktionen wie imagecreatetruecolor(), imagecreatefromjpeg() oder ähnliche erzeugt. |
|
| $file | string|null | null | Pfad zur Zieldatei, in die das WebP-Bild geschrieben werden soll. Wenn null oder weggelassen, wird das Bild direkt in den Ausgabe-Stream (Browser) geschrieben. |
| $quality | int | -1 | Qualitätsstufe von 0 (niedrigste Qualität) bis 100 (höchste Qualität). Der Wert -1 verwendet den Standardwert der libwebp-Bibliothek (ca. 80). Mit IMG_WEBP_LOSSLESS kann verlustfreie Komprimierung aktiviert werden (sofern unterstützt). |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn das Bild nicht gespeichert werden konnte oder WebP nicht unterstützt wird).Beispiele
WebP-Bild direkt an den Browser senden
<?php
// Neues True-Color-Bild erstellen
$image = imagecreatetruecolor(400, 300);
// Hintergrundfarbe setzen (Blau)
$blau = imagecolorallocate($image, 0, 102, 204);
imagefill($image, 0, 0, $blau);
// Text in Weiss zeichnen
$weiss = imagecolorallocate($image, 255, 255, 255);
imagestring($image, 5, 100, 130, 'Hallo WebP!', $weiss);
// HTTP-Header setzen und Bild ausgeben
header('Content-Type: image/webp');
imagewebp($image, null, 85);
// Speicher freigeben
imagedestroy($image);
WebP-Bild in eine Datei speichern
<?php
// JPEG-Bild laden und als WebP speichern
$quellbild = imagecreatefromjpeg('/var/www/bilder/foto.jpg');
if ($quellbild === false) {
die('Bild konnte nicht geladen werden.');
}
$zieldatei = '/var/www/bilder/foto.webp';
if (imagewebp($quellbild, $zieldatei, 90)) {
echo 'WebP-Bild erfolgreich gespeichert: ' . $zieldatei;
} else {
echo 'Fehler beim Speichern des WebP-Bildes.';
}
imagedestroy($quellbild);
Verlustfreies WebP erzeugen (lossless)
<?php
// PNG laden und verlustfrei als WebP speichern
$quellbild = imagecreatefrompng('/var/www/bilder/grafik.png');
if ($quellbild === false) {
die('PNG konnte nicht geladen werden.');
}
// IMG_WEBP_LOSSLESS erfordert libwebp >= 0.5 und PHP >= 8.1
$qualitaet = defined('IMG_WEBP_LOSSLESS') ? IMG_WEBP_LOSSLESS : 100;
if (imagewebp($quellbild, '/var/www/bilder/grafik.webp', $qualitaet)) {
echo 'Verlustfreies WebP gespeichert.';
}
imagedestroy($quellbild);
// Wichtig · Fallstricke
WebP-Unterstützung prüfen: Nicht alle PHP-Installationen unterstützen WebP. Mit imagetypes() & IMG_WEBP lässt sich prüfen, ob WebP verfügbar ist. Fehlt die Unterstützung, gibt imagewebp() false zurück, ohne eine Fehlermeldung auszugeben.
Header vor Ausgabe senden: Wenn das Bild direkt an den Browser ausgegeben wird, muss header('Content-Type: image/webp') aufgerufen werden, bevor irgendeine Ausgabe (auch Leerzeichen) erfolgt. Andernfalls schlägt der header()-Aufruf fehl.
Datei-Berechtigungen: Beim Schreiben in eine Datei muss das PHP-Prozess-Konto Schreibrechte auf das Zielverzeichnis besitzen. Der Rückgabewert sollte stets geprüft werden, da Fehler (z. B. fehlende Berechtigungen) lautlos als false zurückgegeben werden.
Browser-Kompatibilität: WebP wird von allen modernen Browsern unterstützt. Bei älteren Browsern (insbesondere Internet Explorer) sollte ein Fallback auf JPEG oder PNG vorgesehen werden.