WebP ist ein neues Bildformat, das eine verlustfreie und verlustbehaftete Kompression für Bilder bietet. Es wurde primär für den Einsatz auf Websites entwickelt. Die verlustbehaftete WebP-Komprimierung verwendet eine prädiktive Kodierung, die gleiche Methode, die auch der VP8-Videocodec verwendet. Diese Methode verwendet die Werte einzelner Pixelblöcke, um die Werte eines folgenden Blockes vorherzusagen und speichert dann nur die Differenz. Die verlustfreie WebP-Kompression verwendet vorhergehende Bildfragmente, um gleiche Bereiche exakt zu rekonstruieren. Diese Art unterstützt auch eine Transparenz (auch Alpha-Kanal genannt) wie PNG-Dateien.
PHP-Funktion imagewebp()
In PHP wurde mit der Version 5.4, die am 1. März 2012 veröffentlicht wurde, die Funktion imagewebp() hinzugefügt. Sie funktioniert analog zu der bereits sehr häufig verwendeten Funktion imagejpeg().
Als erster Übergabeparameter wird eine Bild-Ressource benötigt und der zweite Parameter gibt den Dateienamen der WebP-Datei an. Als dritter Parameter kann noch eine Kompressionsrate zwischen 0 und 100 angegeben werden, der Standardwert beträgt 80.
imagewebp($img, 'output.webp');
Beliebigen Dateityp umwandeln
Sollen verschiedene Eingangsformate umgewandelt werden, können die PHP-Funktionen file_get_contents() und imagecreatefromstring() verwendet werden. Mit file_get_contents() wird eine Datei eingelesen und der Inhalt als String zurückgegeben. Anschließend wird mit der Funktion imagecreatefromstring() aus dem String eine Bild-Ressource erstellt. Sie kann die Dateiformate JPEG, PNG, GIF, BMP, WBMP, and GD2 verarbeiten. Die Rückgabe wird an die imagewebp() Funktion übergeben und ein Dateiname für die Ausgabe definiert. Eine komplette WebP-Konvertierung sieht wie folgt aus:
imagewebp(imagecreatefromstring(file_get_contents('input.jpg')), 'output.webp');
WebP in WordPress
Für WordPress stehen viele verschiedene Plugins für die Unterstützung von WebP zur Verfügung. Soll nur das Beitragsbild automatisch in das WebP-Format umgewandelt werden, kann dies direkt in der functions.php realisiert werden.
Dazu kann der nachfolgende Code verwendet werden. Es muss nur noch die erste Variable $path angepasst werden. Hier muss der absolute Pfad zum Upload-Verzeichnis eingetragen werden. Die Funktion imageToWebp() wird mit add_action() bei WordPress registriert. In diesem Fall wird die Funktion ausgeführt, sobald ein Post veröffentlicht wird.
function imageToWebp($post_id){ $path = "/var/www/wp-content/uploads/"; $images = array (); $post_thumbnail_id = get_post_thumbnail_id($post_id); $images[] = $path.wp_get_attachment_metadata($post_thumbnail_id)[file]; foreach (wp_get_attachment_metadata($post_thumbnail_id)[sizes] as $key => $value){ $images[] = $path.substr(wp_get_attachment_metadata($post_thumbnail_id)[file], 0, 8).wp_get_attachment_metadata($post_thumbnail_id)[sizes][$key][file]; } foreach($images as $image) { if(!file_exists($image.'.webp')){ imagewebp(imagecreatefromstring(file_get_contents($image)), $image.'.webp'); } } } add_action('publish_post','imageToWebp');