667 Stimmen

Ein Bild in HTML/CSS in Graustufen umwandeln

Gibt es eine einfache Möglichkeit, eine farbige Bitmap in Graustufen darzustellen, indem man nur HTML/CSS ?

Es muss nicht IE-kompatibel sein (und ich nehme an, dass es das auch nicht sein wird) - wenn es in FF3 und/oder Sf3 funktioniert, ist das gut genug für mich.

Ich weiß, dass ich es mit beidem kann SVG und Canvas, aber das scheint im Moment eine Menge Arbeit zu sein.

Gibt es eine wirklich faule Methode, dies zu tun?

14 Stimmen

"Es muss nicht IE-kompatibel sein (und ich nehme an, dass es das auch nicht sein wird)" ?? IE bietet eine Reihe von DX-Filter seit 1997 (IE4), die diese Aufgabe nur mit CSS und vielem mehr erledigt. Jetzt haben sie weggefallene DX-Filter im IE10 und halten sich strikt an die standardmäßigen SVG-basierten Filter. Vielleicht möchten Sie einen Blick werfen auf ce y diese Demo .

8 Stimmen

@vulcanraven Es ist nicht wirklich "nur CSS" - wenn Sie Active Scripting im IE deaktivieren, funktionieren die Filter nicht mehr.

3 Stimmen

@robertc, das ist genau richtig. Wenn Sie dagegen Javascript in einem beliebigen Browser deaktivieren, funktioniert fast jede RIA, einschließlich Stackoverflow, nicht mehr (es sei denn, die Webentwickler haben die HTML-only-Version als Fallback implementiert).

7voto

brillout Punkte 8542

Im Internet Explorer verwenden Sie die Filtereigenschaft.

In Webkit und Firefox gibt es derzeit keine Möglichkeit, ein Bild ausschließlich mit CSS zu desatuieren. Sie müssen also entweder Canvas oder SVG für eine clientseitige Lösung verwenden.

Ich denke aber, dass die Verwendung von SVG eleganter ist. In meinem Blogbeitrag finden Sie die SVG-Lösung, die sowohl für Firefox als auch für Webkit funktioniert: http://webdev.brillout.com/2010/10/desaturate-image-without-javascript.html

Und da SVG streng genommen HTML ist, ist die Lösung rein html+css :-)

0 Stimmen

Hallo Brillout. Mir ist aufgefallen, dass deine Graustufen bei Safari tatsächlich versagen. Irgendwelche Folgemaßnahmen? Danke

1 Stimmen

SVG ist no HTML. Das ist eine ganz andere Spezifikation.

0 Stimmen

4voto

YuZA Punkte 105

Vielleicht hilft Ihnen dieser Weg

img {
    -webkit-filter: grayscale(100%); /* Chrome, Safari, Opera */
    filter: grayscale(100%);
}

w3schools.org

3voto

alex Punkte 457905

Wenn ich mich recht erinnere, ist es mit dem IE sogar einfacher, wenn man eine proprietäre CSS-Eigenschaft verwendet. Versuchen Sie dies FILTER: Gray de http://www.ssi-developer.net/css/visual-filters.shtml

Die Methode der Ax macht das Bild einfach transparent und hinterlegt es mit einem schwarzen Hintergrund. Ich bin sicher, man könnte argumentieren, dass dies Graustufen sind.

Obwohl Sie kein Javascript verwenden wollten, werden Sie es wohl verwenden müssen. Sie könnten auch eine serverseitige Sprache dafür verwenden.

0 Stimmen

Ich habe nicht einmal eine Windows-Box, also danke, aber das nützt mir wenig.

0 Stimmen

In diesem Fall können Sie es mit einer Virtual Machine mit IE betrachten, ax's Methode implementieren oder Canvas verwenden... beachten Sie, dass Grauskalierung auf große Bilder mit Canvas ziemlich anstrengend für die Javascript-Engine sein kann.

7 Stimmen

filter: gray ist im Internet Explorer vorhanden seit Version 4 . Sie haben viel Kritik für ihr Produkt einstecken müssen - zu Recht! - aber sie waren ihrer Zeit mit diesem Zeug wirklich voraus

2voto

Kajiyama Punkte 3283

Basierend auf robertc's Antwort :

Um die richtig Umwandlung von Farbbildern in Graustufenbilder anstelle der Verwendung einer Matrix wie hier:

0.3333 0.3333 0.3333 0 0
0.3333 0.3333 0.3333 0 0
0.3333 0.3333 0.3333 0 0
0      0      0      1 0

Sie sollten die Umrechnungsmatrix wie folgt verwenden:

0.299 0.299 0.299 0
0.587 0.587 0.587 0
0.112 0.112 0.112 0
0     0     0     1

Dies sollte für alle Arten von Bildern, die auf dem RGBA-Modell (Rot-Grün-Blau-Alpha) basieren, gut funktionieren.

Weitere Informationen darüber, warum Sie die von mir gepostete Matrix eher verwenden sollten als die von Robertc, finden Sie unter den folgenden Links:

0 Stimmen

Ich stimme zu, dass 0,3333 falsch ist; 0.2126 0.7152 0.0722 0 0 scheint das Äquivalent zu sein zu <fecolormatrix type="saturate" values="0">

0 Stimmen

Der Link zu "The luminance and colour difference signals" ist ebenfalls defekt. Ich konnte keinen Ersatz finden.

2voto

maťo Punkte 1142

Sie brauchen nicht so viele Präfixe zu verwenden, denn wenn Sie ein Präfix für den alten Firefox wählen, müssen Sie kein Präfix für den neuen Firefox verwenden.

Für eine vollständige Nutzung reicht es also, diesen Code zu verwenden:

img.grayscale {
    filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /* Firefox 10+, Firefox on Android */
    filter: gray; /* IE6-9 */
    -webkit-filter: grayscale(100%); /* Chrome 19+, Safari 6+, Safari 6+ iOS */
}

img.grayscale.disabled {
    filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'1 0 0 0 0, 0 1 0 0 0, 0 0 1 0 0, 0 0 0 1 0\'/></filter></svg>#grayscale");
    filter: none;
    -webkit-filter: grayscale(0%);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X