Farbwerte mit PHP automatisch dunkler berechnen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Farbwerte mit PHP automatisch dunkler berechnen

    Ich möchte mit Hilfe von PHP Hexadezimal-Farbwerte automatisch ein paar Stufen dunkler berechnen, finde aber den rechnerischen Ansatz nicht, da ich von Farbtheorie nicht genug weiß. Ich habe versucht, mich einzulesen, komme aber nicht klar. Ich vermute, ich muss die Hexadezimalwerte erst mal in irgendwelche normalen Zahlenwerte umwandeln und dann - vielleicht - prozentual verändern (?) und wieder zurück zu konvertieren.

    Die Ausgangswerte sind bereits von der Raute befreit (z.B. $text=4D08FA), wenn ich sie bearbeiten will.

    Erläuterung: Ich benötige dies, um die imitierten Ränder-Schatten (Innenschatten) eines Textfensters neu zu berechnen, wenn der User eine neue Hintergrundfarbe einstellt (http://www.burkes.de/lernkartei/inde...n=blackbox.tpl).

  • #2
    Re: Farbwerte mit PHP automatisch dunkler berechnen

    Ich vermute, ich muss die Hexadezimalwerte erst mal in irgendwelche normalen Zahlenwerte umwandeln und dann - vielleicht - prozentual verändern (?) und wieder zurück zu konvertieren.
    nein,

    es sollte reichen, den farbwert, z.b. so
    PHP-Code:
    $Color 0xA5B754;
    $darkColor $Color -  0x101010
    zu berechnen. so erhälts du zumindest ne dunklere farbe. den wert mußt du noch einstellen ...
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      Wenn du ein High Color Bild hast aber statt Imagecreatetrucolor nur Imagecreate machst, dann werden die highcolorbilder ganz dunkel, probviers mal aus, ob dir dieser Effekt gefällt...

      Habs per zufall entdeckt.


      An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

      Kommentar


      • #4
        Lösungsansatz gefunden

        Danke. Ich bin auf dem richtigen Weg. Man muss die drei RGB-Werte prozentual gleichmäßig reduzieren. Am besten scheint Faktor 0.4 bis 0.5 zu sein. Das geht auch, wenn eine der drei Farben 0 ist, nach der Multiplikation bleibt der Wert 0 und trotzdem ist die Farbe gleichmäßig dunkler geworden.

        Siehe: www.burkes.de/lernkartei/making-of/test-farbenaendern.php

        Beim Aufhellen muss ich noch experimentieren, weil ich da die 255-Grenze habe. Und wo ich nicht weiterkomme, ist das Rechnen direkt mit Hexadezimalzahlen. Erst hier bin ich darauf gestoßen, dass das funktioniert (offenbar mit 0x als Vorspann) aber ich habe in keinem HAndbuch und nirgends im Internet ein Anwendungsbeispiel für das Rechnen mit Hexadezimalzahlen gefunden. Wenn ich 0.5 mal 0x336699 rechne, kommen abenteuerliche Zahlen heraus, ebenso wenn ich 0.5 mal 0x33 eingebe, bzw., der Wert wird über echo schon verzerrt herausgegeben. Kann mir hier noch jemand einen Tipp geben?

        Kommentar


        • #5
          zeig mal etwas code, bei mir funktioniert das einwandfrei
          PHP-Code:
          $test 0x336699;
          echo 
          $test;
          echo 
          0.5 $test;
          echo 
          0.5 0x336699
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Re: Lösungsansatz gefunden

            Wenn ich 0.5 mal 0x336699 rechne, kommen abenteuerliche Zahlen heraus, ebenso wenn ich 0.5 mal 0x33 eingebe, bzw., der Wert wird über echo schon verzerrt herausgegeben. Kann mir hier noch jemand einen Tipp geben?
            das hexadezimalsystem ist wie unser dezimal-system ein stellen-wert-system (lol, heißt des so?). das bedeutet, jede stelle einer zahl hat eine bestimmte wertigkeit (entspricht der position der ziffer in der zahl, von rechts gezählt, bei 0 beginnend.

            127 = 100 + 20 + 7
            127 = 1*100 + 2*10 + 7*1
            127 = 1*10^2 +2*10^1 + 7*10^0

            dezimalsystem: basis 10
            hexadezimalsystem: basis 16, zusätzliche ziffern sind a(10), b, c, d, e, f(15)

            0x1234 = 0x1000 + 0x200 + 0x30 + 0x4
            mauschel
            0x1234 = 1*0x1000 + 2*0x100 + 3*0x10 + 4*0x1
            0x1234 = 1*0x10^3 + 2*0x10^2 + 3*0x10^1 + 4*0x10^0
            /mauschel: 0x10 ist übrigens der nachfolger von 0x0F, also ...
            0x1234 = 1*16^3 + 2*16^2 + 3*16^1 + 4*16^0
            falls du nen grundlagen-exkurs wolltest hexadezimalsystem sollte eigentlich jeder kennen.

            btw: die hälfte von 0x336699 ist 0x19B34C.
            wenn du nicht * 0,5 rechnen kannst, rechne doch *50 /100

            EDIT:
            was ich aber eigentlich sagen wollte: mir scheint, du mußt die farbwerte vorher aufsplitten, 0xB3 scheint ja eher die hälfte von 0x166 zu sein ...
            Zuletzt geändert von derHund; 29.04.2004, 06:39.
            Die Zeit hat ihre Kinder längst gefressen

            Kommentar


            • #7
              rechnen funktioniert

              mrhappiness hatte recht. Es funktioniert einwandfrei. Ich habe nur nicht gemerkt, dass bei der echo-Ausgabe der Dezimalwert erscheint, und nicht der Hex-Wert. Danke an alle.

              Kommentar

              Lädt...
              X