plued2 danke dir für die Rückmeldung. Das Problem liegt hier nicht im Event Listener sondern in deinem Anwendungsfall. Die doppelte Verarbeitung eines Bildes ergibt keinen Sinn und wirft i.d.R. auch ohne meinen Event Listener einen Fehler.
Ich kann grundsätzlich zwar bestätigen, dass die Zeile
<f:image src="{f:uri.image(src: icon)}" />
ohne den Event Listener funktioniert und mit dem Event Listener nicht mehr.
Grund dafür ist allerdings, dass du keinerlei zusätzliche Angaben in f:uri.image gemacht hast, die eine Verarbeitung des Bildes erforderlich machen. Aus diesem Grund wird der originale Bildpfad direkt weitergereicht und der umgebende f:image ViewHelper kann damit weiter arbeiten. Das ändert allerdings nichts an der Tatsache, dass das Problem bereits in der unnötigen Verschachtelung der beiden ViewHelper besteht.
Sobald wir nämlich das Test-Szenario ohne den Event Listener ein bisschen anpassen, laufen wir in den gleichen Fehler, den wir erhalten, wenn wir mit dem Event Listener arbeiten:
<f:image src="{f:uri.image(src: icon, width: '321')}" />
Die Angabe einer Zielbreite - sofern sie nicht der Breite des ursprünglichen Bildes entspricht - bewirkt nun, dass das Bild bereits per f:uri.image neu berechnet wird. Das daraus resultierende ProcessedFile-Objekt wirft dann auch ganz ohne meinen Event Listener einen Fehler in f:image. Der einzige Unterschied, den wir mit dem Event Listener haben, besteht also darin, dass dieser auch ohne zusätzliche Angaben die Bildverarbeitung anstößt. Schließlich hat er die WebP-Konvertierung zum Ziel.
Und was ist jetzt die Lösung?
Schreibe einfach folgendes:
<f:image src="{icon}" />
Die Vorab-Verarbeitung durch f:uri.image ist nicht notwendig, da f:image intern genau den gleichen Verarbeitungsprozess anstößt. Auf diese Weise reduzierst du das Fehler-Risiko - unabhängig davon, ob du meinen Event Listener benutzt.
Die Schreibweise:
<img src="{f:uri.image(src: icon)}" />
funktioniert zwar auch aber ich würde davon abraten. Bei dieser Schreibweise verlierst du alle sinnvollen Attribute im img-Tag, die TYPO3 sonst noch für die Bild-Ausgabe standardmäßig vorsieht.