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 (unsere Empfehlung):

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.

Scheduled Tasks

Unser Plugin setzt die Scheduled Tasks von Shopware voraus.
Ohne diese ist es nicht möglich Hintergrundtasks auszuführen.

https://developer.shopware.com/docs/guides/hosting/infrastructure/scheduled-task.html

Flysystem

Aus Performancegründen haben wir uns dagegen entschieden das Shopware Filesystem (Flysystem) zu verwenden.
Daher ist unser Plugin nur mit einer regulären Shopware Installation kompatibel. Eine Abfrage für alle Dateien wäre in einem an Sharepoint, Dropbox, usw. angebundenem System nicht effizient genug.

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/...

Häufige Fragen

Q: Wie kann ich alle Bilder neu generieren?

Verwenden Sie den Button "Alte Bilder neu generieren" in den Plugineinstellungen.

image.png

Beim nächsten Durchlauf werden alle alten Bilder neu erstellt und überschrieben.
Unter Umständen kann es Sinn machen danach mit der CLI alle Bilder neu zu generieren (./bin/console memo:webp:generate)

Q: Wo werden die Daten gespeichert?

Die Daten werden auf Ihrem Server im Ordner public gespeichert.
Die AVIF Bilder finden Sie unter public/avif/media (Bilder in voller Auflösung) & public/avif/thumbnail (Thumbnails / von Shopware verringerte Auflösungen).
Die WebP Bilder finden Sie unter public/webp/media & public/webp/thumbnail.

Q: Wieso sehe ich keine WebP Bilder?

Prüfen Sie zuerst, ob im Frontend der Picture Tag angezeigt wird.
Falls nicht prüfen Sie, ob Sie in Ihrem Theme die Datei Resources/views/storefront/utilities/thumbnail.html.twig überschreiben.

Falls der Picture Tag vorhanden ist, aber das Bild dennoch nicht im WebP Format ausgegeben wird führen Sie den Befehl ./bin/console memo:webp:generate und prüfen den Output auf Fehler.

Falls im Output keine Fehler vorhanden sind ist es möglich, dass Sie die Scheduled Tasks nicht korrekt eingerichtet haben.

Bitte prüfen Sie auch, ob Ihr Shop den Systemanforderungen entspricht.

Q: Wie kann ich nur einen Teil neu generieren (z.B. nur die AVIF Thumbnails)

Wenn Sie die Dateien auf dem Server löschen werden diese beim nächsten Durchlauf neu konvertiert.
In welchen Ordnern die Bilder gespeichert werden können Sie oben sehen.

Wichtig: Bereinigen Sie den Shop Cache danach. Shopware speichert die WebP Pfade zwischen und es kommt zu 404 Fehlern, wenn Sie den Cache nicht leeren.

Sie haben noch weitere Fragen?

Wenn wir Ihr Anliegen hier nicht lösen konnten, können Sie sich gerne natürlich auch an unseren Support wenden.
Wir werden Ihnen so schnell wie möglich dabei helfen Ihre Fragen zu klären.

Sie können ein Ticket über Ihren Shopware Account erstellen oder bei uns ein direktes Ticket über eine Mail an support@mediamotion.ch eröffnen.

Bitte nennen Sie uns bereits beim Erstellen des Tickets Ihre aktuelle Shopware Version und Ihre Pluginversion.