bitverliebt / contao-image-resize
Automatically resizes oversized images when they are uploaded via the Contao back end file manager.
Package info
github.com/bitverliebt/contao-image-resize
Type:contao-bundle
pkg:composer/bitverliebt/contao-image-resize
Requires
- php: ^8.1
- contao/core-bundle: ^5.3
- contao/image: ^1.2
- contao/manager-plugin: ^2.11
README
Verkleinert Bilder automatisch, sobald sie über die Contao-Dateiverwaltung (Backend) hochgeladen werden und ein konfiguriertes Maximum überschreiten. Löst das Problem, dass Kamera- bzw. Handyfotos mit z. B. 4331×6496 Pixel beim späteren Generieren von Bildgrößen Speicher- oder Verarbeitungsfehler verursachen.
Funktionsweise
- Hängt sich über den offiziellen
postUpload-Hook in den Backend-Upload ein. - Liest die Abmessungen des hochgeladenen Bildes aus.
- Ist es größer als
max_width/max_height, wird es proportional verkleinert (Modus „box", kein Beschneiden) und überschreibt die Originaldatei. - Die eigentliche Bildverarbeitung übernimmt die Contao-Image-Factory. Dadurch wird automatisch die in der Installation verfügbare bzw. konfigurierte Imagine-Engine verwendet – Gmagick, Imagick oder GD, in genau der Reihenfolge, die Contao selbst nutzt. Metadaten- und Farbprofil-Behandlung sowie EXIF-Orientierung laufen damit konsistent zum restlichen Bildsystem.
- SVG wird absichtlich nicht verändert (Vektorformat). GIF wird von der Contao-Engine animationssicher behandelt.
- Optional: Ist ein Bild kleiner als
min_width/min_height, wird nur eine Logmeldung geschrieben (keine automatische Vergrößerung, da das die Bildqualität verschlechtern würde).
Installation
composer require bitverliebt/contao-image-resize
Danach im Contao Manager bzw. per Konsole den Cache leeren:
php vendor/bin/contao-console cache:clear --env=prod --no-warmup php vendor/bin/contao-console cache:warmup --env=prod
Konfiguration
Standardmäßig wird auf 2500×2500 Pixel begrenzt. Eigene Werte in
config/config.yaml der Hauptanwendung setzen:
contao_image_resize: max_width: 3000 max_height: 3000 min_width: 0 # 0 = deaktiviert min_height: 0 # 0 = deaktiviert jpeg_quality: 85
jpeg_quality wird für JPEG und WebP als Qualitätswert (1–100) an die
Imagine-Engine durchgereicht.
Hinweise für den produktiven Einsatz
- Das Verkleinern selbst braucht beim Hochladen kurzzeitig Speicher in der
Größenordnung des Originalbildes. Ein
memory_limitvon mindestens 256–512M wird empfohlen, damit auch sehr große Kamerafotos (20+ Megapixel) beim Upload sicher verarbeitet werden. Danach liegt nur noch die kleine Version auf dem Server – die laufende Bildverarbeitung (Thumbnails, Bildgrößen) ist davon nicht mehr betroffen. Ist Imagick/Gmagick installiert, wird der Upload speicher- und qualitätsschonender verarbeitet als mit reinem GD.- Wichtig: Das
memory_limitdes PHP-FPM-/Web-Kontexts ist relevant, nicht das der CLI – beide können sich unterscheiden (php -iauf der Konsole zeigt ggf. einen anderen Wert als das, was beim Backend-Upload tatsächlich gilt). Am sichersten lässt sich der reale Wert über eine kurze PHP-Datei im Webroot mitini_get('memory_limit')prüfen, oder direkt im Hoster-Account ändern, falls dort eine PHP-Konfiguration pro Domain möglich ist. - Ist das Limit zu niedrig, bricht PHP mit einem nicht abfangbaren
Fatal Error ab – je nach Server-Konfiguration (
log_errors) landet das in keinem Log. Die Erweiterung schätzt den Speicherbedarf daher vor dem Verkleinern grob ab und schreibt bei absehbarem Speichermangel einen Fehler ins Contao-Systemprotokoll, statt den Prozess unkontrolliert abstürzen zu lassen.
- Wichtig: Das
- Wirkt nur auf neue Uploads über die Backend-Dateiverwaltung, nicht rückwirkend auf bereits vorhandene Dateien.
- Getestet für Contao 5.3+ / PHP 8.1+.