Zum Inhalt springen
Bilder & Medien

So verhindern Sie, dass WordPress Ihre Bilder mit 82 % komprimiert

WordPress kodiert jedes generierte JPEG mit Qualität 82 auf einer Skala von 0–100 neu. Diese Voreinstellung steckt in WP_Image_Editor::get_default_quality() und gilt für

Veröffentlicht

WordPress kodiert jedes generierte JPEG mit Qualität 82 auf einer Skala von 0–100 neu. Diese Voreinstellung steckt in WP_Image_Editor::get_default_quality() und gilt für jede Ableitung, die WordPress aus Ihrem Upload erzeugt — Thumbnail, medium, medium_large, large und jede weitere Größe, die Ihr Theme registriert. Für Fotos ist 82 ein vernünftiger Kompromiss zwischen Dateigröße und Artefakten. Für Screenshots, UI-Aufnahmen, Diagramme, Logos und alles mit scharfem Text oder flächigen Farben ist 82 sichtbar zerstörerisch: Sie bekommen Mosquito-Noise, das um jeden Buchstaben herum flimmert, und Banding über glatten Verläufen.

Um das zu ändern, fügen Sie einen Filter hinzu und regenerieren Ihre Vorschaubilder. Um speziell Screenshots zu retten, ist die bessere Antwort aber meist, WordPress gar nicht erst ein JPEG zu übergeben.

Woher die Zahl 82 tatsächlich kommt

WordPress hat seine JPEG-Voreinstellung mit Version 4.5 (2016) von 90 auf 82 gesenkt, als Optimierung des Seitengewichts. Der Wert wird von get_default_quality() in wp-includes/class-wp-image-editor.php zurückgegeben und ausgelesen, sobald der aktive Editor — WP_Image_Editor_Imagick, falls Ihr Host Imagick hat, andernfalls WP_Image_Editor_GD — eine verkleinerte Datei schreibt.

Das entscheidende Detail: 82 wird pro Ableitungsgröße angewendet, nicht einmalig. Laden Sie ein Bild hoch, jagt WordPress es mehrfach durch den Encoder und quantisiert es bei jedem Durchgang erneut mit Qualität 82. Die ursprünglich hochgeladene Datei selbst bleibt unangetastet — sofern sie unter dem Big-Image-Schwellenwert liegt (2560 px an der langen Kante). Überschreitet sie diesen Schwellenwert, erzeugt WordPress eine neu kodierte -scaled.jpg mit Qualität 82 und liefert diese als „full”-Größe aus. „Mein Bild in voller Auflösung sieht gut aus, aber die Version auf der Seite ist verschmiert” bedeutet also fast immer, dass srcset eine Untergröße mit Qualität 82 oder die -scaled-Datei auswählt.

So ändern Sie die Qualität

Es gibt einen Filter, in den Sie sich einklinken. wp_editor_set_quality ist der moderne, kanonische — er greift für JPEG und WebP und erhält den MIME-Typ, sodass Sie verzweigen können:

add_filter( 'wp_editor_set_quality', function ( $quality, $mime_type ) {
    if ( 'image/jpeg' === $mime_type ) {
        return 92; // up from 82
    }
    return $quality;
}, 10, 2 );

Packen Sie das in ein kleines mu-plugin (wp-content/mu-plugins/) oder ein site-spezifisches Plugin. functions.php funktioniert auch, aber Sie verlieren die Einstellung in dem Moment, in dem Sie das Theme wechseln.

Sie werden auch den älteren Filter jpeg_quality empfohlen sehen. Er greift weiterhin (WordPress wendet ihn direkt nach wp_editor_set_quality an, nur für JPEG), aber es gibt keinen Grund, beide zu verwenden — wp_editor_set_quality deckt alles ab, was der alte tat, und mehr.

Eine Sache vergessen alle: Dieser Filter wirkt nur auf Bilder, die kodiert werden, nachdem er aktiv ist. Jedes Vorschaubild, das bereits in wp-content/uploads liegt, wurde mit 82 geschrieben und bleibt bei 82. Regenerieren Sie sie:

wp media regenerate --yes

Wenn Sie nicht mit WP-CLI arbeiten, erledigt das Plugin Regenerate Thumbnails dasselbe über das Backend.

Bevor Sie sich auf eine Zahl festlegen, lohnt es sich zu sehen, was eine bestimmte Qualität tatsächlich mit Ihrem Bild macht, statt zu raten. Unser WordPress JPEG Qualitäts-Tool kodiert eine Probe direkt im Browser bei jeder Qualitätsstufe neu, sodass Sie die Artefakte auftauchen sehen können — es macht den Unterschied zwischen 82, 90 und 100 an einem Screenshot so offensichtlich, wie es eine Zahl in einer Konfigurationsdatei niemals könnte.

Die bessere Lösung für Screenshots und flächige Grafiken

Die JPEG-Zahl anzuheben behandelt nur das Symptom. Das eigentliche Problem bei Screenshots ist, dass JPEG der falsche Codec dafür ist. Die DCT-Kompression von JPEG ist auf fotografische Verläufe abgestimmt; sie fällt an den harten schwarz-auf-weißen Kanten von Text und UI-Elementen auseinander — genau deshalb sieht Qualität 82 bei einem Screenshot so viel schlechter aus als bei einem Foto.

Laden Sie stattdessen ein PNG hoch. WordPress behält PNG-Untergrößen als PNG bei, und PNG ist verlustfrei — der Qualitätsfilter rührt es nicht an, es gibt also bei keiner Größe Artefakte, nur sauberes Resampling. Für einen Screenshot ist ein gut optimiertes PNG ohnehin oft kleiner als ein hochwertiges JPEG desselben Bildes, weil flächige Farben sich in PNG gut und in JPEG furchtbar komprimieren lassen.

Wenn Sie die kleineren Dateien eines verlustbehafteten Formats wollen, ohne JPEGs Kantenschäden, ist WebP der Mittelweg — aber Sie steuern dessen Qualität weiterhin über denselben Filter wp_editor_set_quality von oben, verzweigt auf image/webp.

Was Sie nicht tun sollten

Setzen Sie die Qualität nicht global auf 100. Das ist die meistgevotete Antwort in der Hälfte aller Forenthreads, und sie ist falsch. JPEG mit Qualität 100 ist nicht verlustfrei — es quantisiert weiterhin —, bläht aber jedes Foto auf Ihrer Website erheblich auf, ohne sichtbaren Gewinn, und drückt so LCP und Core Web Vitals nach unten. Heben Sie die Zahl für das Format an, das es braucht, oder wechseln Sie das Format für Grafiken; sprengen Sie nicht die Kompression auf der ganzen Website.

Bearbeiten Sie nicht class-wp-image-editor.php. Den Rückgabewert von get_default_quality() im Core zu ändern funktioniert, bis das nächste wp core update es stillschweigend überschreibt. Nutzen Sie den Filter.

Deaktivieren Sie keine Bildgrößen, um „die Kompression zu vermeiden”. Die Vorschaubild-Generierung abzuschalten stoppt das Neukodieren nicht — es zerstört das responsive srcset, sodass Browser Ihr Bild in voller Größe auf Smartphones herunterladen. Anderes Problem, schlechteres Ergebnis.

Gehen Sie nicht davon aus, dass ein erneuter Upload bestehende Bilder repariert. Wenn Sie den Filter setzen, aber den Regenerierungsschritt überspringen, hat jede alte Ableitung weiterhin Qualität 82. Der Filter wirkt ausschließlich nach vorn.

Machen Sie nicht die -scaled-Datei verantwortlich, wenn Ihre Bilder unter 2560 px liegen — dieser Pfad läuft für sie nie. Wenn Sie doch darauf stoßen und das unangetastete Original ausgeliefert haben möchten, ist das eine separate Einstellung; siehe Skalierte Bilder deaktivieren.

Immer noch festgefahren?

Wenn eine bestimmte Größe nach dem Regenerieren immer noch falsch aussieht, prüfen Sie, welche Datei die Seite tatsächlich ausliefert — öffnen Sie das Bild in einem neuen Tab und schauen Sie, ob der Dateiname auf ein Maß-Suffix (-1024x768.jpg) oder -scaled.jpg endet. Der Bildgrößen-Inspektor zeigt jede Ableitung, die WordPress aus einem Upload generiert, sodass Sie genau sehen, welche Größe Ihr srcset dem Browser übergibt, und aufhören, an der falschen Datei zu debuggen.