Die Kontrasttausch-Technik: Verbesserte Bildleistung mit CSS Filtern

Avatar of Una Kravets
Una Kravets am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Mit CSS-Filtereffekten und Mischmodi können wir jetzt verschiedene Techniken zur Gestaltung von Bildern direkt im Browser nutzen. Die Erstellung ästhetischer Thematiken ist jedoch nicht alles, wofür Filtereffekte gut sind. Sie können Filter verwenden, um den Hover-Zustand anzuzeigen, Passwörter zu verbergen und jetzt – für die Web-Performance.

Beim Ausprobieren von Leistungsgewinnen durch die Verwendung von Mischmodi für Duoton-Bildeffekte (ich werde bald einen Artikel darüber schreiben) entdeckte ich etwas noch Aufregenderes. Ein großer Gewinn bei der Bildoptimierung! Die Idee ist, den Kontrast im Quellbild zu reduzieren, dadurch die Dateigröße zu verringern und dann den Kontrast mit CSS-Filtern wieder zu erhöhen!

Beginnen Sie mit Ihrem Bild, entfernen Sie dann den Kontrast und wenden Sie ihn dann mit CSS-Filtern wieder an.

So funktioniert es

Lassen Sie uns genau aufschlüsseln, wie das funktioniert

  1. Reduzieren Sie den Bildkontrast mithilfe einer linearen Transformationsfunktion (Photoshop kann das)
  2. Wenden Sie einen Kontrast-Filter in CSS auf das Bild an, um die Kontrastreduzierung auszugleichen

Schritt eins beinhaltet das Öffnen Ihres Bildes in einem Programm, das es Ihnen ermöglicht, den Kontrast linear zu reduzieren. Der Legacy-Modus von Photoshop leistet hier gute Arbeit (Bild > Korrekturen > Helligkeit/Kontrast)

Sie gelangen über Bild > Korrekturen > Helligkeit/Kontrast in Photoshop CC zu diesem Bildschirm.

Nicht alle Programme verwenden die gleichen Funktionen zur Anwendung von Bildtransformationen (zum Beispiel würde dies mit dem Standard-Bildbearbeitungsprogramm von macOS nicht funktionieren, da es eine andere Technik zur Kontrastreduzierung verwendet). Ein Großteil der Arbeit zur Integration von Bildeffekten in den Browser wurde ursprünglich von Adobe geleistet, daher ist es logisch, dass der Legacy-Modus von Photoshop mit den Bildeffekten im Browser übereinstimmt.

Dann wenden wir einige CSS-Filter auf unser Bild an. Die Filter, die wir verwenden werden, sind contrast und (ein wenig) brightness. Bei der 50%igen Reduzierung im Legacy-Modus von Photoshop habe ich auf jedes Bild filter: contrast(1.75) brightness(1.2); angewendet.

Große Einsparungen

Diese Technik ist sehr effektiv zur Reduzierung der Bildgröße und damit des Gesamtgewichts Ihrer Seite. In der folgenden Studie habe ich 4 lebendige, mit einem iPhone aufgenommene Fotos verwendet, eine Kontrastreduzierung um 50 % im Legacy-Modus von Photoshop angewendet, jedes Foto mit maximaler Qualität (10) gespeichert und dann filter: contrast(1.75) brightness(1.2); auf jedes Bild angewendet. Dies sind die Ergebnisse

Sie können die Live-Demo hier ausprobieren und sich selbst davon überzeugen!

In jedem der oben genannten Fälle haben wir zwischen 23 % und 28 % Bildgröße eingespart, indem wir den Kontrast mit CSS-Filtern reduziert und wieder angewendet haben. Dies geschah *mit* dem Speichern jedes Bildes in maximaler Qualität.

Wenn Sie genau hinschauen, können Sie einige legitime Qualitätsverluste im Bild erkennen. Dies gilt insbesondere für überwiegend dunkle Bilder. Diese Technik ist also nicht perfekt, aber sie beweist definitiv auf interessante Weise Bildersparnisse.

Überlegungen zur Browserunterstützung

Seien Sie sich bewusst, dass die Browserunterstützung für CSS-Filter "ziemlich gut" ist.

Diese Browser-Supportdaten stammen von Caniuse, das weitere Details enthält. Eine Zahl gibt an, dass der Browser die Funktion ab dieser Version unterstützt.

Desktop

ChromeFirefoxIEEdgeSafari
18*35Nein796*

Mobil / Tablet

Android ChromeAndroid FirefoxAndroidiOS Safari
1271274.4*6.0-6.1*

Wie Sie sehen, fehlen Internet Explorer und Opera Mini die Unterstützung. Edge 16 (die aktuelle neueste Version) unterstützt CSS-Filter und diese Technik funktioniert einwandfrei. Sie müssen entscheiden, ob ein Bild mit reduziertem Kontrast als Fallback akzeptabel ist oder nicht.

Was ist mit Neuanstrich?

Sie denken vielleicht: *„Aber während wir Bildgröße sparen, belasten wir den Browser mehr, würde sich das nicht auf die Leistung auswirken?“* Das ist eine tolle Frage! CSS-Filter lösen einen Neuanstrich aus, da sie window.getComputedStyle() auslösen. Lassen Sie uns unser Beispiel profilieren.

Ich habe ein Inkognito-Fenster in Chrome geöffnet, JavaScript deaktiviert (nur um sicher zu sein, wegen der Erweiterungen, die ich habe), das Netzwerk auf "Slow 3G" und die CPU auf 6-fache Verlangsamung eingestellt.

Bei 6-facher CPU-Verlangsamung dauerte der längste Paint Raster 0,27 ms, also 0,00027 Sekunden.

Während die Bilder eine Weile zum Laden brauchten, war der eigentliche Neuanstrich ziemlich schnell. Bei 6-facher CPU-Verlangsamung dauerte der längste einzelne Rasterize Paint 0,27 ms, also 0,00027 Sekunden.

CSS-Filter stammen ursprünglich von SVG-Filtern und sind relativ browseroptimierte Versionen der beliebtesten SVG-Filtereffekttransformationen. Daher halte ich es für ziemlich sicher, sie zu diesem Zeitpunkt als progressive Verbesserung zu verwenden (wobei IE-Benutzer und Opera-Mini-Benutzer zu berücksichtigen sind!).

Fazit und Zukunft

Es gibt immer noch erhebliche Einsparungen bei der Reduzierung der Bildqualität (in dieser kleinen Studie wurden die Bilder mit hoher Qualität gespeichert, um ein ausgewogeneres Ergebnis zu erzielen). Das Durchlaufen von Bildern durch Optimierer wie ImageOptim und das Senden kleinerer Bilddateigrößen basierend auf der Bildschirmgröße (wie bei responsiven Bildern in HTML oder CSS) führt zu noch größeren Einsparungen.

In der Welt der Web-Performance-Optimierung halte ich die Bildleistung für das effektivste Mittel, um Web-Schrott und Daten für unsere Benutzer zu reduzieren, da Bilder mit Abstand den größten Teil dessen ausmachen, was wir im Web versenden. Wenn wir moderne CSS nutzen können, um einige der Lasten unserer Bilder zu reduzieren, können wir eine ganz neue Welt von Optimierungslösungen erschließen.

Beispielsweise könnte dies potenziell noch weiter ausgebaut werden, indem man mit anderen CSS-Filtern wie saturate und brightness experimentiert. Wir könnten Automatisierungstools wie Gulp und Webpack nutzen, um die Effekte auf die Bilder anzuwenden, so wie wir Automatisierungstools verwenden, um unsere Bilder durch Optimierer zu jagen. Die Kombination dieser Technik mit anderen Best Practices für die Bildoptimierung kann zu erheblichen Einsparungen bei den pixelbasierten Assets führen, die wir an unsere Nutzer senden.