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).

0voto

Dany Maor Punkte 2303

Sie können eine der Funktionen von jFunc verwenden - verwenden Sie die Funktion "jFunc_CanvasFilterGrayscale". http://jfunc.com/jFunc-functions.aspx

0voto

Nicholas TJ Punkte 1502

Probieren Sie dieses Jquery-Plugin aus. Es handelt sich zwar nicht um eine reine HTML- und CSS-Lösung, aber es ist ein bequemer Weg, um zu erreichen, was Sie wollen. Sie können Ihre Graustufen an Ihre Bedürfnisse anpassen. Verwenden Sie es wie folgt:

$("#myImageID").tancolor();

Es gibt ein interaktives Demo . Sie können damit herumspielen.

Schauen Sie sich die Dokumentation über die Verwendung an, es ist ziemlich einfach. docs

0voto

dval Punkte 372

Für Graustufen in Prozent in Firefox, verwenden Sie Sättigungsfilter stattdessen: (Suche nach 'sättigen')

filter: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg'><filter id='saturate'><feColorMatrix in='SourceGraphic' type='saturate' values='0.2' /></filter></svg>#saturate"

0voto

richardtallent Punkte 33425

Eine schreckliche, aber praktikable Lösung: Rendern Sie das Bild mit einem Flash-Objekt, das Ihnen dann alle in Flash möglichen Transformationen bietet.

Wenn Ihre Nutzer verwenden hochmoderne Browser und wenn Firefox 3.5 und Safari 4 unterstützen es (ich weiß nicht, ob sie es unterstützen werden), können Sie die CSS Farbprofil Attribut des Bildes und setzt es auf eine Graustufen-ICC-Profil-URL. Aber das sind eine Menge Wenns!

-1voto

Trufa Punkte 37746

Wenn Sie oder jemand anderes, der ein ähnliches Problem hat, in Zukunft offen für PHP sind. (Ich weiß, Sie sagten HTML/CSS, aber vielleicht verwenden Sie bereits PHP im Backend) Hier ist eine PHP-Lösung:

Ich habe es aus der PHP GD-Bibliothek und habe einige Variablen hinzugefügt, um den Prozess zu automatisieren...

<?php
$img = @imagecreatefromgif("php.gif");

if ($img) $img_height = imagesy($img);
if ($img) $img_width = imagesx($img);

// Create image instances
$dest = imagecreatefromgif('php.gif');
$src = imagecreatefromgif('php.gif');

// Copy and merge - Gray = 20%
imagecopymergegray($dest, $src, 0, 0, 0, 0, $img_width, $img_height, 20);

// Output and free from memory
header('Content-Type: image/gif');
imagegif($dest);

imagedestroy($dest);
imagedestroy($src);

?>

4 Stimmen

@Tom, den Stimmen und Favoriten auf die ursprüngliche Frage nach zu urteilen, ist der Auftraggeber nicht der einzige, der sich fragt, ob dies möglich ist. Sicher, diese Antwort könnte die Regeln verletzen, aber ich sehe keinen Grund, eine Antwort, die für viele Leute nützlich sein könnte, herabzustufen.

1 Stimmen

@Tom, ich obwohl es vielleicht nicht eine genaue Antwort auf die Frage, könnte es in praktisch kommen, wie es tatsächlich "löst" das Problem der Graustufen ohne die "Mühe" von javascript, vielleicht hat er nicht einmal in Betracht ziehen oder wusste über PHP GD, nichts Böses beabsichtigt. @mlms13 das war genau der Punkt, danke :)

0 Stimmen

Das ist mein Fehler, "dachte" über dass andere Nutzer von diesem Beitrag profitieren können ist mir entfallen.. Entschuldigung @Trufa.

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