Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Colori alterni e casualità.

    Ho un'immagine con uno sfondo colorato e ho bisogno di generare delle scritte che abbiano un colore diverso dallo sfondo.
    Inizialmente utilizzavo uno script che generava colori "opposti": dato un colore in formato $r $b $g, e una "soglia" di distanza $s, lo script è:
    Codice PHP:
    $s 50;

    if (
    $r $s$r rand($r+$s255);
    elseif (
    $r 255-$s$r rand (0$r-$s);
    elseif (
    rand(0,1)) $r rand(0,$r-$s);
    else 
    $r rand($r+$s,255);

    if (
    $g $s$g rand($g+$s255);
    elseif (
    $g 255-$s$g rand (0$g-$s);
    elseif (
    rand(0,1)) $g rand(0,$g-$s);
    else 
    $g rand($g+$s,255);

    if (
    $b $s$b rand($b+$s255);
    elseif (
    $b 255-$s$b rand (0$b-$s);
    elseif (
    rand(0,1)) $b rand(0,$b-$s);
    else 
    $b rand($b+$s,255); 
    Inizialmente sembrava funzionare bene, ma se lo sfondo è un colore primario, cominciano ad esserci problemi!
    Ad esempio, se lo sfondo è nero (0, 0, 0) colori come rosso (255, 0, 0), verde (0, 255, 0), giallo (255, 255, 0)... non usciranno mai, perché hanno una coordinata che è zero!

    Qualcuno ha qualche idea migliore?

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    209
    Dunque, per calcolare il colore complementare ti basta prendere ciascuna delle componenti $r $g $b e sottrarla a 256

    $rc=256-$r;
    $gc=256-$g;
    $bc=256-$b;

  3. #3
    Sì ma non mi basta che sia complementare, deve anche essere casuale
    Comunque per il momento sto provando quest'altro:
    Codice PHP:
    function opposto($n$s) {
        if (
    $n $s$n rand($n+$s255);
        elseif (
    $n 255-$s$n rand (0$n-$s);
        elseif (
    $n >= 128$n rand(0,$n-$s);
        else 
    $n rand($n+$s,255);
        return 
    $n;
    }

    switch (
    $c rand(0,2)) {
        case 
    $c 0:
            
    $r opposto($r80);
            
    $g rand(0255);
            
    $b rand(0255);
            break;
        case 
    $c 1:
            
    $g opposto($g80);
            
    $r rand(0255);
            
    $b rand(0255);
            break;
        case 
    $c 2:
            
    $b opposto($b80);
            
    $g rand(0255);
            
    $r rand(0255);
            break;

    Dato un colore, restituisce una coordinata qualsiasi opposta, e randomizza le rimanenti. Sembrerebbe funzionare...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.