Signatur
Beschreibung
imageavif() kodiert ein GD-Bildobjekt im AVIF-Format (AV1 Image File Format) und schreibt das Ergebnis entweder in eine Datei oder gibt es direkt an den Ausgabe-Puffer aus. AVIF bietet im Vergleich zu JPEG und WebP eine deutlich bessere Kompressionseffizienz bei gleicher visueller Qualität und unterstützt HDR, Alpha-Transparenz sowie verlustfreie Kompression.
Der Parameter quality steuert die Bildqualität von 0 (schlechteste Qualität, kleinste Datei) bis 100 (beste Qualität, größte Datei). Der Standardwert -1 überlässt die Wahl der Standardeinstellung der zugrunde liegenden Bibliothek (libavif). Der Parameter speed beeinflusst die Kodiergeschwindigkeit von 0 (langsam, bessere Kompression) bis 10 (schnell, schlechtere Kompression); auch hier bedeutet -1 Standardeinstellung.
Wird $file als null oder weggelassen übergeben, wird das AVIF-Bild direkt ausgegeben. In diesem Fall sollte vor der Ausgabe der passende HTTP-Header Content-Type: image/avif gesetzt werden. Alternativ kann ein Dateipfad oder eine bereits geöffnete Datei-Ressource angegeben werden.
Voraussetzung für die Nutzung von imageavif() ist, dass PHP mit AVIF-Unterstützung kompiliert wurde (libavif muss vorhanden sein). Die Verfügbarkeit lässt sich mit imagetypes() und dem Flag IMG_AVIF prüfen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $image Pflicht | GdImage | Das GD-Bildobjekt, das zuvor z. B. mit imagecreatetruecolor(), imagecreatefromjpeg() o. Ä. erzeugt wurde. |
|
| $file | string|null | null | Dateipfad oder geöffnete Datei-Ressource, in die das AVIF-Bild geschrieben wird. Bei null erfolgt die Ausgabe direkt an den Ausgabe-Puffer (z. B. Browser). |
| $quality | int | -1 | Bildqualität von 0 (niedrigste) bis 100 (höchste). -1 verwendet die Standardeinstellung der Bibliothek. |
| $speed | int | -1 | Kodiergeschwindigkeit von 0 (langsam, bessere Kompression) bis 10 (schnell, schlechtere Kompression). -1 verwendet die Standardeinstellung der Bibliothek. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn AVIF-Unterstützung fehlt oder die Datei nicht geschrieben werden kann).Beispiele
AVIF-Bild direkt an den Browser ausgeben
<?php
// AVIF-Unterstützung prüfen
if (!(imagetypes() & IMG_AVIF)) {
die('AVIF wird von dieser PHP-Installation nicht unterstützt.');
}
// Neues True-Color-Bild erstellen
$image = imagecreatetruecolor(400, 200);
// Hintergrundfarbe setzen
$bg = imagecolorallocate($image, 30, 144, 255);
imagefilledrectangle($image, 0, 0, 399, 199, $bg);
// Text einfügen
$textColor = imagecolorallocate($image, 255, 255, 255);
imagestring($image, 5, 120, 85, 'Hallo AVIF!', $textColor);
// Korrekten Content-Type senden
header('Content-Type: image/avif');
// Bild mit Qualität 80 ausgeben
imageavif($image, null, 80);
imagedestroy($image);
AVIF-Bild in eine Datei speichern
<?php
// Vorhandenes JPEG laden
$source = imagecreatefromjpeg('/var/www/html/fotos/original.jpg');
if ($source === false) {
die('Quelldatei konnte nicht geladen werden.');
}
// Als AVIF mit Qualität 75 und mittlerer Geschwindigkeit speichern
$ziel = '/var/www/html/fotos/konvertiert.avif';
$ergebnis = imageavif($source, $ziel, 75, 6);
if ($ergebnis) {
echo 'Bild erfolgreich als AVIF gespeichert: ' . $ziel;
} else {
echo 'Fehler beim Speichern der AVIF-Datei.';
}
imagedestroy($source);
// Wichtig · Fallstricke
Verfügbarkeit: imageavif() ist erst ab PHP 8.1.0 verfügbar und erfordert, dass PHP gegen libavif kompiliert wurde. Ältere Server-Umgebungen unterstützen diese Funktion möglicherweise nicht. Vor dem Einsatz sollte stets imagetypes() & IMG_AVIF geprüft werden.
Browser-Kompatibilität: AVIF wird von modernen Browsern (Chrome ab v85, Firefox ab v93, Safari ab v16) unterstützt, ältere Browser jedoch nicht. Für maximale Kompatibilität empfiehlt sich das <picture>-Element mit AVIF als bevorzugtes Format und JPEG/PNG als Fallback.
Performance: Die AVIF-Kodierung ist je nach Einstellung deutlich langsamer als JPEG oder WebP. Für dynamisch generierte Bilder sollte das Ergebnis gecacht werden, um wiederholte Kodierungen zu vermeiden.