Direkt zum Hauptinhalt

Bilder im Hintergrund in WebP und AVIF konvertieren

Sie können unser Plugin über den Shopware Store beziehen:
https://store.shopware.com/de/memod97197147652m/bilder-im-hintergrund-in-webp-und-avif-konvertieren.html

Systemanforderungen

Prozessoren

Im Plugin gibt es 2 Prozessoren für die Bilder.

1. GD:

Wenn GD im Einsatz ist kann es sein, dass AVIF nicht unterstützt wird.
Wir verwenden imageavif dafür.
https://www.php.net/manual/de/function.imageavif.php
Das müsste ab PHP 8.1 verfügbar sein, wenn libavif auf dem System vorhanden ist.

2. Imagick (Wird von uns bevorzugt):

Imagick hat in der Version 6 und jünger noch ein Problem mit AVIF Bildern mit transparenz.
Ab Imagick 7 geht das aber wie gewünscht.
Unter Imagick 6 ignorieren wir einfach transparente Bilder bei der Konvertierung.

Erste Installation

  • Plugin installieren und aktivieren
  • Plugin nach Wunsch konfigurieren (Verlustfrei / Qualität, siehe Dokumentation unten)
  • Empfehlung: Alle WebP initial manuell auf der Konsole generieren (./bin/console memo:webp:generate)

Einstellungen

Maximale Anzahl an generierten Bilder pro Stunde

Definiert wieviele Bilder durch den Taskrunner pro Stunde generiert werden können, um das System nicht zu überlasten.
Wenn der CLI Befehl verwendet wird, wir diese Einstellung ignoriert.

Ohne Verlust komprimieren

Da haben wir die Erfahrung gemacht, dass die Bilder teils am Ende noch grösser sind als z.B. unter JPG.
Das hat damit zu tun, dass AVIF und WebP sehr stark in der Komprimierung sind, aber nicht für den lossless Bereich gedacht sind.

Verwendung von GD erzwingen

Falls vorhanden verwendet unser Plugin immer Imagick.
Als Fallback verwenden wir GD. Mittels dieser Einstellung wird diese Logik übersprungen und immer GD verwendet.

Speicher Limit für Imagick in MB

Hier kann das RAM Limit definiert werden.
Wir haben die Erfahrung gemacht, dass einige Hoster sehr aggressive Taskkiller im Einsatz haben.
Dadurch kann der RAM Verbrauch niedrig gehalten werden, was den Taskkiller davon abhält unsere Bildergenerierung zu killen.

Kompressionsqualität WebP / AVIF:

Zahl zwischen 1 und 100.
100 wäre dann lossless.
Wir empfehlen für WebP 50 und für Avif 20.
Das kommt aber ganz auf die Bilder im Shop an. Einige Shops profitieren von höhere Auflösungen.
In dem Fall würde sich 80 und 40 als Einstellung anbieten.

Geschwindigkeit der AVIF Komprimierung:

Zahl zwischen 0 und 10.
AVIF kann das gleiche Bilder unterschiedlich stark komprimieren.
Umso höher die Zahl ist umso schneller wird die Konvertierung abgeschlossen, dafür ist die resultierende Dateigrösse allerdings auch grösser.
Das kommt ganz auf die Anzahl Bilder im Shop und auf die Leistung des Servers an.
2 ist eine recht aggressive Einstellung um eine guten Komprimierung zu erreichen.

Pfad für temporäre Dateien für Imagick:

Imagick legt während der Komprimierung temporäre Dateien in den /tmp Ordner.
Das ist meistens kein Problem. Uns ist allerdings auf ein paar Hostings aufgefallen, dass die tmp Partition vollgelaufen ist, weil Imagick Dateien angelegt hat und dann der Task von einem Taskkiller abgeschossen wurde.
Dadurch wurden die Temporären Dateien nie bereinigt.
Wenn hier ein absoluter Pfad gesetzt wird, dann speichert Imagick die Dateien dort rein.
Dadurch kann das Problem umgangen werden.

Konsolen Befehle

Mit dem Befehl bin/console memo:webp:generate können die Bilder sofort und ohne Scheduled Task erstellt werden.
Es gibt auch die Option async also bin/console memo:webp:generate -a um die Bilder über die Message Queue zu verarbeiten.
Die Bilder werden nicht jedes mal komplett neu konvertiert, das System erkennt, ob Bilder bereits konvertiert wurden und überspringt diese.

Bei diesem Befehl werden die Bilder synchron abgearbeitet.
Die bestehenden Ordner werden verglichen und fehlende Dateien werden 

Mögliche Probleme

WebP Bilder werden nicht ausgegeben

Hier gibt es mehrere Auslöser. Zuerst kann geprüft werden, ob im Frontend bei den Bildern ein Picture Tag ausgegeben wird.

image.png

Falls der Picture Tag nicht ausgegeben wird ist es möglich, dass das eingesetzte Theme oder ein Plugin die folgende Datei überschreibt:
Resources/views/storefront/utilities/thumbnail.html.twig

Bitte prüfen Sie die installierten Plugins und, falls dies der Fall ist, übernehmen Sie die Anpassungen unseres Plugins in Ihr Theme.

Für Bilder mit Transparenz werden keine AVIF Dateien generiert

Imagick unterstützt AVIF mit Transparenz erst ab der Version 7.
Sollte das Plugin eine jüngere Version erkennen prüft unser Plugin zuerst, ob das Bild eine transparente Ebene besitzt.
Falls ja wird dieses Bild bei der Konvertierung übersprungen.

Welche Imagick Version Sie verwenden finden Sie ganz einfach auf Ihrem Server mit folgendem Befehl heraus:
php -r "print_r(\\Imagick::getVersion()['versionString']);"

 

Logs

Das Plugin logt Fehler beim Konvertieren in das reguläre Logfile unter var/logs/...