Invertierte Farben in CSS via shell-script?

kazcor

Reigstreed Usre
Nabend,

ich bastel gerade an einer neuen Seite und hab da ein CSS, von welchem ich gern alle Farben invertiert hätte - und zwar nach deren Farbwert. Das kann man natürlich per Hand machen, indem man z.B. in Gimp eine Selektion mit der Farbe fülllt, dann via (in der 2.4er GUI) Colors->Invert o. ValueInvert das ganze umsetzt und mit dem ColorPicker den Farbwert erhält. Ist aber etwas zu umständlich, da es doch eigentlich eine einfache Rechenaufgabe ist ;) Also warum nicht ein kleines Shellscript schreiben, welches die Aufgabe erledigt? Die Farbwerte rausfiltern, invertieren und z.B. per sed ändern. Der mittlere Teil ist allerdings problematisch, bzw. (beim ersten Mal) zeitlich genauso umständlich umzusetzen, als wenn ich das ganze per Hand/Gimp mache. Kennt jemand also einen console basierten HEX Taschenrechner oder etwas ähnliches?

Das CSS ist relativ groß, daher kam ich auf die Idee. Zusammen mit ImageMagick könnte man auf diese Weise ganze Templates umcolorieren oder farblich rotieren, ohne viel Arbeit reinzustecken ...

baba,
kaz
 
Ich will dich da nicht abhalten, aber das Resultat wird entweder ein Zufallstreffer oder, aus Benutzersicht, katastrophal ausfallen. Lesbarkeit und gute Kontraste ueberleben so eine Invertierung nunmal nicht.

Ansonsten kann ich dir da von sh(1) nur abraten, mit dem Parsen wirst du mehr als bekloppt. Es gibt gute HTML Parser fuer perl (HTML::Parse::Tree ?? oder so aehnlich) und da kannst du auch das umrechnen [1] bequem mit Boardmitteln erledigen.

[1]: Ein Algorithmus zur Invertierung von RGB-Werten ist mir nicht gelaeufig.
 
Das kommt auf die Farbenvielfalt der Seite an. Solang sich alles mehr oder weniger in Graustufen abspielt, ist es durchaus möglich auch ohne grosse Verluste in Sachen Kontrast ordentliche Resultate zu erzielen - schätze ich :)
Naja, wenn ich jetzt anfange perl zu daddeln, kann ich auch gleich Java verwenden - das kann ich wenigstens und es soll ja kein Projekt werden, sondern es sieht momentan eher nach einer einmaligen Aktion aus.
 
Algorithmus zum Invertieren:
(R,G,B) -> (255-R,255-G,255-B)

Ergänzung:
rgb hat 3 bytes. man nehme jedes einzelne byte manipuliere es mit einem Exklusiv-Oder gegen 255 (binär: 11111111).

Code:
ein farbwert FA ist in dezimal 250 und in binär 11111010
11111010 ^ 11111111 = 00000101
00000101 entspricht dezimal 5 und in hex 05. fertig
 
Zuletzt bearbeitet:
So dachte ich mir das auch. Das Problem wäre jetzt, das als Shell-Script umzusetzen. Aber wahrscheinlich reichen dafür auch noch meine eingerosteten C-Kenntnisse ;)

Ich glaube beim Value Invert (von Gimp) wird der absolute Wert genommen und nicht jede einzelne Farbe - aber da hilft nur RTFM.

Danke soweit :)
kaz
 
In C kannst du mit dem ~ Operator eine einfache Bitweise-Negation durchführen. Das Umwandeln in einen Integer und Rückwandeln ist die eigentliche Arbeit.
 
Zurück
Oben