KI-Bildkennzeichnung 3/6: Remote-Thumbnail-Hook (ResolveRemoteThumbnailUrlExtension) + ImagorUrlBuilder #6

Closed
opened 2026-08-02 06:52:13 +00:00 by csaeum · 0 comments
Owner

Teil 3 von 6 der Serie "KI-Bildkennzeichnung" (Art. 50 Abs. 4 KI-VO). Baut auf #4 auf (braucht ai_status/ai_type).

Ziel

Thumbnail-URLs (srcset) für KI-markierte Bilder über imagor mit Text-Wasserzeichen ausliefern, statt Shopwares lokaler PHP-Bildkomposition.

Verifizierte Shopware-Core-API (Version 6.7.10.2, doppelt geprüft: Quellcode + developer.shopware.com)

  • Shopware\Core\Content\Media\Extension\ResolveRemoteThumbnailUrlExtension, Extension-Name remote_thumbnail_url.resolve, verfügbar seit 6.7.1.0
  • Wird über MediaUrlLoader/RemoteThumbnailLoader ausgelöst, sobald shopware.media.remote_thumbnails.enable = true ist (siehe #9, separates Repo)
  • Registrierung als EventSubscriberInterface, NICHT als klassisches Symfony-Event, sondern über:
    getSubscribedEvents(): [
        ExtensionDispatcher::pre(ResolveRemoteThumbnailUrlExtension::NAME) => 'onResolve',
    ]
    
  • Der Listener bekommt $event->mediaEntity (Typ MediaEntity|PartialEntity — Guard über instanceof MediaEntity bzw. has('customFields'), da PartialEntity keine getCustomFields()-Methode hat)
  • Kritisch: Nach Setzen von $event->result MUSS $event->stopPropagation() aufgerufen werden — sonst überschreibt Shopwares Standard-Pattern-Ersetzung das Ergebnis wieder (im Core-Code bestätigt)

Komponenten

  • Neuer Service src/Service/ImagorUrlBuilder.php — einzige Stelle, die aus (Quell-URL, Breite, Höhe, ai_status, ai_type) die fertige imagor-URL baut. Watermark-Ansatz: imagors label()-Filter mit deutschem Klartext ("KI-generiert" / "KI-verändert", je nach ai_type), halbtransparenter Hintergrund, Position unten links. Ohne ai_status → reine imagor-Resize-URL ohne Filter.
  • Neue config.xml-Karte imagorBaseUrl (Sales-Channel-scoped SystemConfigService-Eintrag, exakt nach dem bestehenden debugLoggingEnabled-Muster in diesem Plugin)
  • Neuer Subscriber src/Subscriber/RemoteThumbnailUrlSubscriber.php wie oben beschrieben

Akzeptanzkriterien

  • ImagorUrlBuilder per PHPUnit isoliert getestet (kein echtes imagor nötig)
  • Mit shopware.media.remote_thumbnails.enable = true (lokal in DDEV-Config aktiviert): srcset-Thumbnails von KI-markierten Bildern zeigen auf imagor-URLs mit Label-Filter
  • Bilder ohne ai_status liefern unveränderte imagor-URLs ohne Filter
Teil 3 von 6 der Serie "KI-Bildkennzeichnung" (Art. 50 Abs. 4 KI-VO). Baut auf #4 auf (braucht `ai_status`/`ai_type`). ## Ziel Thumbnail-URLs (srcset) für KI-markierte Bilder über imagor mit Text-Wasserzeichen ausliefern, statt Shopwares lokaler PHP-Bildkomposition. ## Verifizierte Shopware-Core-API (Version 6.7.10.2, doppelt geprüft: Quellcode + developer.shopware.com) - `Shopware\Core\Content\Media\Extension\ResolveRemoteThumbnailUrlExtension`, Extension-Name `remote_thumbnail_url.resolve`, verfügbar seit 6.7.1.0 - Wird über `MediaUrlLoader`/`RemoteThumbnailLoader` ausgelöst, sobald `shopware.media.remote_thumbnails.enable = true` ist (siehe #9, separates Repo) - Registrierung als `EventSubscriberInterface`, NICHT als klassisches Symfony-Event, sondern über: ```php getSubscribedEvents(): [ ExtensionDispatcher::pre(ResolveRemoteThumbnailUrlExtension::NAME) => 'onResolve', ] ``` - Der Listener bekommt `$event->mediaEntity` (Typ `MediaEntity|PartialEntity` — Guard über `instanceof MediaEntity` bzw. `has('customFields')`, da `PartialEntity` keine `getCustomFields()`-Methode hat) - **Kritisch:** Nach Setzen von `$event->result` MUSS `$event->stopPropagation()` aufgerufen werden — sonst überschreibt Shopwares Standard-Pattern-Ersetzung das Ergebnis wieder (im Core-Code bestätigt) ## Komponenten - **Neuer Service** `src/Service/ImagorUrlBuilder.php` — einzige Stelle, die aus (Quell-URL, Breite, Höhe, `ai_status`, `ai_type`) die fertige imagor-URL baut. Watermark-Ansatz: imagors `label()`-Filter mit deutschem Klartext ("KI-generiert" / "KI-verändert", je nach `ai_type`), halbtransparenter Hintergrund, Position unten links. Ohne `ai_status` → reine imagor-Resize-URL ohne Filter. - **Neue `config.xml`-Karte** `imagorBaseUrl` (Sales-Channel-scoped `SystemConfigService`-Eintrag, exakt nach dem bestehenden `debugLoggingEnabled`-Muster in diesem Plugin) - **Neuer Subscriber** `src/Subscriber/RemoteThumbnailUrlSubscriber.php` wie oben beschrieben ## Akzeptanzkriterien - [ ] `ImagorUrlBuilder` per PHPUnit isoliert getestet (kein echtes imagor nötig) - [ ] Mit `shopware.media.remote_thumbnails.enable = true` (lokal in DDEV-Config aktiviert): `srcset`-Thumbnails von KI-markierten Bildern zeigen auf imagor-URLs mit Label-Filter - [ ] Bilder ohne `ai_status` liefern unveränderte imagor-URLs ohne Filter
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
SW-Plugins/wsc_swplugin_aiseotools#6
No description provided.