Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
455 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Tableau de couleur php

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tableau de couleur php

n°2290958
chachoumie
Posté le 31-10-2016 à 12:03:45  profilanswer
 

Bonjour à tous,
 
J'aimerais afficher dans un tableau html toutes les couleurs comprises entre #000 et #FFF par pas de trois avec la valeur hexadécimale correspondante (#000, #003 ...).
 
Etant novice en php j'ai commencé par réaliser un tableau qui serait sur 4 colonnes et x lignes.  Pour l'instant mon tableau affiche des nombre entiers qui s'incrémentent 3 par 3.
 
Mon problème est que maintenant j'essaye d'afficher mes valeurs en #000, #003 .. J'ai essayé d'utiliser la fonction dechex mais cela m'affiche mes valeurs en hexadécimal.
 
Comment faire pour afficher ce type de valeur dans mon tableau ?
 
Voici mon code php :  
 

Code :
  1. <?php
  2. function generer_tableau ($limite) {
  3.  $tableau = "<table>"; /* Création d'un tableau */
  4.  $tableau .= "<table border = 1 align = center>";
  5.  for($i=0; $i<$limite; $i++) {
  6.   $tableau .= "<tr>";
  7.   for($j=0; $j<10; $j++) {
  8.    if($i%3 == 0) { /* Si i est un multiple de 3 */
  9.     $tableau .= "<td>".dechex($i)."</td>";
  10.    }
  11.   $i++;
  12.   }
  13.   $tableau .= "</tr>";
  14.  }
  15.  $tableau .= "</table>";
  16.  return $tableau;
  17. }
  18. ?>

 
 
Merci d'avance pour vos réponses :)

mood
Publicité
Posté le 31-10-2016 à 12:03:45  profilanswer
 

n°2290986
SICKofitAL​L
Razoreater
Posté le 01-11-2016 à 22:49:24  profilanswer
 

Résumons :  
tu veux faire un tableau qui affiche ttes les couleurs entre 0 et #FFF ?
Alors plusieurs questions :
1) #FFF c'est quoi pour toi ? #0F0F0F, #F0F0F0 ou #FFFFFF ?
2) pourquoi faire un modulo de $i alors qu'il te suffit de compter par pas de 3 : for ($i = 0; $i < $limite; $i += 3) ? Là, 66% de ta boucle sert à rien.
3) pourquoi ne pas concatener des chaines pour representer tes couleurs ?
Un $R, un $G et un $B que tu ferais évoluer par pas de 3. Et du coup "dechex" sera plus utile ;)


---------------
"And at the end it is only YOU, ME AND THE VIOLENCE !"
n°2290990
chachoumie
Posté le 02-11-2016 à 08:33:41  profilanswer
 

Bonjour,
 
1) Pour moi #FFF signifie que l'on va jusqu'à 4095 (FFF en hexadécimal).
2) C'est vrai que je n'avais pas pensé à cette solution, j'ai modifier ma boucle et cela fonctionne également.
3) Je n'ai pas vraiment compris mais avec ma dernière modification mon tableau affiche les valeurs de #0 à #ffc en une seule colonne. Je ne comprends pas comment je peux lui dire d'afficher trois chiffres à chaque fois (#000, #003 ...). De plus mon tableau ne contient qu'une seule colonne alors que j'aimerais qu'il y en ai plusieurs.
 
Pour information le contenu de mes cellules me permettra d'afficher la couleur correspondante (ex : #000 correspond à la couleur noire)
 
Voici mon code modifié :
 

Code :
  1. <?php
  2. function generer_tableau ($limite) {
  3. $tableau = "<table>"; /* Création d'un tableau */
  4. $tableau .= "<table border = 1 align = center>";
  5. for($i=0; $i<4095; $i+= 3) {
  6.  $tableau .= "<tr>";
  7.  $tableau .= "<td>"."#".dechex($i)."</td>";
  8.  $tableau .= "</tr>";
  9. }
  10. $tableau .= "</table>";
  11. return $tableau;
  12. }
  13. ?>

n°2290995
SICKofitAL​L
Razoreater
Posté le 02-11-2016 à 10:44:50  profilanswer
 

1) ok, mais attention, 0xfff correspond à rgb(0,15,255), soit pas de rouge, un peu de vert et un max de bleu
 
2) ok
 
3) en conservant ton idée, tu peux tout simplement faire des masques binaires pour récuperer les composantes de tes couleurs (et donc on en revient à l'histoire avec le point 1) :

Code :
  1. $hex = dechex($i);
  2. $r = $hex & 0xFF0000;
  3. $g = $hex & 0xFF00;
  4. $b = $hex & 0xFF;


 
Sinon tu peux aussi te servir directement des composantes couleurs séparées, en les incrémentant au fur et à mesure, et en utilisant des décalages logiques :

Code :
  1. $r = 0;
  2. $g = 0;
  3. $b = 0;
  4. while ($r << 16 + $g << 8 + $g < 0xfff)
  5. {
  6. $tableau .= "<tr>";
  7. $tableau .= "<td>#$r$g$b</td>";
  8. $tableau .= "</tr>";
  9. $b += 3;
  10. if ($b > 255)
  11. {
  12.     $b = 0;
  13.     $g += 3;
  14.     if ($g > 255)
  15.     {
  16.       $r += 3;
  17.       if ($g > 255)
  18.       {
  19.          $r = 0;
  20.       }
  21.     }
  22. }
  23. }


 
Il y a surement moyen de faire bcp plus simple :)


---------------
"And at the end it is only YOU, ME AND THE VIOLENCE !"
n°2290996
chachoumie
Posté le 02-11-2016 à 11:08:38  profilanswer
 

Pourrais-tu m'expliquer le premier code (il à l'air plus simple à comprendre que le deuxième ^^) car je l'ai mis avant ma boucle for mais rien ne se passe ?
 
Ensuite si je prends le deuxième code le tableau est sur une colonne, comment dois-je faire pour avoir plusieurs colonne ?
 
Merci d'avance pour tes réponses :)
 

n°2290997
chachoumie
Posté le 02-11-2016 à 11:40:17  profilanswer
 

Par rapport à mon message précédent, voici mon code :
 

Code :
  1. <?php
  2. function generer_tableau ($limite) {
  3.     $tableau = "<table>"; /* Création d'un tableau */
  4.     $tableau .= "<table border = 1 align = center>";
  5.     for($i=0; $i<15; $i+=3) {
  6. $hex = dechex($i);
  7.         $r = $hex & 0xFF0000;
  8. $g = $hex & 0xFF00;
  9. $b = $hex & 0xFF;
  10. $tableau .= "<tr>";
  11. $tableau .= "<td>#".$r.$g.$b."</td>";
  12. $tableau .= "</tr>";
  13.    }
  14. $tableau .= "</table>";
  15. return $tableau;
  16. }
  17. ?>


n°2291034
SICKofitAL​L
Razoreater
Posté le 02-11-2016 à 22:00:55  profilanswer
 

J'ai pas très bien saisie le but, mais voilà un truc qui devrait fonctionner. A adapter si besoin :

Code :
  1. function table ($limite)
  2. {
  3.  echo "<table border=1>";
  4.  for ($r = 0; $r < 256; $r += 3)
  5.  {
  6.   $R = str_pad (dechex ($r), 2, "00", STR_PAD_LEFT);
  7.   for ($g = 0; $g < 256; $g += 3)
  8.   {
  9.    $G = str_pad (dechex ($g), 2, "00", STR_PAD_LEFT);
  10.    echo "<tr>";
  11.    for ($b = 0; $b < 256; $b += 3)
  12.    {
  13.     $couleur = strtoupper ($R . $G . str_pad (dechex ($b), 2, "00", STR_PAD_LEFT));
  14.     echo "<td style='color:#$couleur'>";
  15.     echo "#" , $couleur;
  16.     echo "</td>";
  17.    }
  18.    echo "</tr>";
  19.   }
  20.   if ($limite > $r << 16 | $g << 8 | $b)
  21.   {
  22.    return;
  23.   }
  24.  }
  25.  echo "</table>";
  26. }


---------------
"And at the end it is only YOU, ME AND THE VIOLENCE !"
n°2291036
chachoumie
Posté le 02-11-2016 à 22:26:06  profilanswer
 

Merci de ta réponse, je vais essayer de comprendre le code et de l'adapter car pour l'instant ça marche pas ^^'  
 
En tout cas merci du temps passé sur le sujet :)

n°2291037
SICKofitAL​L
Razoreater
Posté le 02-11-2016 à 22:28:08  profilanswer
 

càd ? ca donne pas le résultat que tu veux ou il y a une erreur ?


---------------
"And at the end it is only YOU, ME AND THE VIOLENCE !"
n°2291038
chachoumie
Posté le 02-11-2016 à 22:29:17  profilanswer
 

Ça ne m'affiche rien du tout en faite, donc je regarde où est le problème

mood
Publicité
Posté le 02-11-2016 à 22:29:17  profilanswer
 

n°2291040
SICKofitAL​L
Razoreater
Posté le 02-11-2016 à 22:40:28  profilanswer
 

tu as bien sûr appellé la fonction ?
genre :
function table ($limite)
{
// ...
}
table (4095);


---------------
"And at the end it is only YOU, ME AND THE VIOLENCE !"
n°2291041
chachoumie
Posté le 02-11-2016 à 22:41:33  profilanswer
 

Oui j'ai fais un autre fichier .php où j'appelle ma fonction ^^

n°2291042
SICKofitAL​L
Razoreater
Posté le 02-11-2016 à 22:48:32  profilanswer
 

tu as un exemple en live ?
car bon, t'imagines bien qu'avant de poster ce code, il a été testé, et ca affiche un tableau, avec des couleurs et tout ^^
Tu as une erreur ou rien du tout n'est renvoyé ?


---------------
"And at the end it is only YOU, ME AND THE VIOLENCE !"
n°2291043
chachoumie
Posté le 02-11-2016 à 22:51:29  profilanswer
 

Oui je me doute que tu as testé avant ^^
J'ai une page blanche en faite mais je verrais ça demain tête reposée :)

n°2291049
chachoumie
Posté le 03-11-2016 à 10:00:31  profilanswer
 

Bon je viens de réessayer et en faite le code fait planter mon pc ce qui n'est pas normal ^^
 
Petite question à quoi sert la boucle if et pourquoi on fait un return avant de fermer le tableau ? :)

n°2291060
SICKofitAL​L
Razoreater
Posté le 03-11-2016 à 11:47:56  profilanswer
 

il sert à quitter la fonction si la limite est atteinte. En effet il pourrait etre placé APRES la fermeture de la table.
Etant donné qu'on calcule des couleurs, je fais des boucles de 256 * 256 * 256 (16 millions ...), tu peux les remplacer par 16 pour monter jusqu'à F plutot que FF
Du coup, étant donné qu'on parle de couleurs codées sur 24 bits, la multiplication que tu vois traduit des composantes de 8 bits (256) vers 24.
Pour le plantage, c'est louche, si ca plante car la pagehtml générée est trop grande, tu as un soucis ailleurs (car php rend la main si sa mémoire allouée est dépassée).


Message édité par SICKofitALL le 03-11-2016 à 11:51:43

---------------
"And at the end it is only YOU, ME AND THE VIOLENCE !"
n°2291077
chachoumie
Posté le 03-11-2016 à 14:20:45  profilanswer
 

Bon j'ai modifié quelques trucs pour afficher la couleur dans la cellule par exemple, ça fonctionne nickel merci :)  
Dernière petite question, sais-tu comment limiter le nombre de colonnes car là ça fait vraiment un tableau immense en largeur

n°2291083
SICKofitAL​L
Razoreater
Posté le 03-11-2016 à 16:56:40  profilanswer
 

ben dans le code, tu vois qu'il compte de 0 à 255 par pas de 3, ce qui fait 85 colonnes (255 / 3).
Si tu en veux moins, tu peux augmenter le pas ou limiter la plage de couleur (16 au lieu de 255, donc F au lieu de FF)


---------------
"And at the end it is only YOU, ME AND THE VIOLENCE !"
n°2291245
chachoumie
Posté le 07-11-2016 à 21:01:30  profilanswer
 

Ok merci beaucoup de ton aide, je reviens vers toi si j'ai d'autres questions :)

n°2291792
chachoumie
Posté le 14-11-2016 à 19:32:37  profilanswer
 

Bonjour,  
 
Un petit soucis de dernière minute, j'ai modifié le code pour faire quelque chose de compréhensible de mon point de vue. Le problème est que mon tableau ne s'arrête pas à FFF, il continue de remplir la ligne.
Comment puis-je faire pour que mon tableau s'arrête à FFF et ne mette rien ou des cases vides à côté ?
 
Voici mon code :

Code :
  1. <?php
  2. function generer_tableau () {
  3.  $tableau = "<table>"; /* Création d'un tableau */
  4.  $tableau .= "<table border = 1 align = center>";
  5.  for($i=0; $i<4096; $i+=24){
  6.   $tableau .= "<tr>";
  7.   for($j=0; $j<24; $j+=3){ /* Permet de créer des cellules sur plusieurs colonnes */
  8.    $k = $j+$i;
  9.    $K = str_pad(dechex($k), 6, "000000", STR_PAD_LEFT); /* Pour afficher une couleur à 6 chiffres */
  10.    $couleur = strtoupper($K); /* Permet de mettre les lettres en majuscules */
  11.    $tableau .= "<td style='color:black'>#".$couleur."</td>"; /* Affiche la valeur de la couleur */
  12.    $tableau .= "<td width='50px' style='background-color:#$couleur'>"."</td>"; /* Modifie la couleur de fond de la cellule suivant le code couleur */
  13.   }
  14.   $tableau .= "</tr>";
  15.  }
  16.  $tableau .= "</table>";
  17.  return $tableau;
  18. }
  19. ?>

n°2291873
SICKofitAL​L
Razoreater
Posté le 15-11-2016 à 23:08:43  profilanswer
 

Ton $i va jusqu'à 4096 (0xFFF) et ensuite tu rajoutes lui ton $j, qui va lui jusqu'à 24, donc forcément tu vas dépasser.
Sans vouloir refaire ton code, tu peux faire rajouter une condition qui sort de ta boucle interne et termine le tableau "proprement" :

Code :
  1. ...
  2.   for($j=0; $j<24; $j+=3){ /* Permet de créer des cellules sur plusieurs colonnes */
  3.    $k = $j+$i;
  4.    if ($k > 4096)
  5.    {
  6.    continue;
  7.    }
  8.    $K = str_pad(dechex($k), 6, "000000", STR_PAD_LEFT); /* Pour afficher une couleur à 6 chiffres */
  9. ...


 
Au passage, tu as une variable $k et $K : confusion assurée.


Message édité par SICKofitALL le 15-11-2016 à 23:09:19

---------------
"And at the end it is only YOU, ME AND THE VIOLENCE !"
n°2291886
chachoumie
Posté le 16-11-2016 à 10:21:56  profilanswer
 

Merci beaucoup pour ta réponse, j'ai réussi en faisant un break :)

n°2291899
gatsu35
Posté le 16-11-2016 à 11:36:36  profilanswer
 

OUAIS ALORS pour les codes couleurs vous êtes dans le faux les mecs
mais #FFF c'est #FFFFFF tout comme #123 c'est #112233
Donc faudrait revoir un peu le tableau :o

n°2291904
gatsu35
Posté le 16-11-2016 à 12:00:53  profilanswer
 

Pour info moi j'ai codé ça en JS :  
 
http://codepen.io/arnogues/pen/XNjeqx
 
JE génère un tableau de nombre après pour la génération du HTML je me suis pas fait chier

n°2291982
SICKofitAL​L
Razoreater
Posté le 16-11-2016 à 21:53:55  profilanswer
 

gatsu35 a écrit :

OUAIS ALORS pour les codes couleurs vous êtes dans le faux les mecs
mais #FFF c'est #FFFFFF tout comme #123 c'est #112233
Donc faudrait revoir un peu le tableau :o


Reli depuis le début, j'avais déjà soulevé ce point.
Mais bon, il veut aller jusqu'à FFF, pas 0F0F0F, ni FFFFFF.  Nan, jusqu'à 000FFF, donc voilà [:spamafote]
 
Perso avant de me lancer la dedans j'aurais creusé pour voir comment fonctionne le système de couleur.
Ou alors partir sur du CSS à la cool avec les couleurs spécifiées sous la forme de "rgb(rrr,ggg,bbb)" par exemple.
 
Bref


---------------
"And at the end it is only YOU, ME AND THE VIOLENCE !"
n°2294010
monstermax
Posté le 23-12-2016 à 14:50:45  profilanswer
 

Attention les 2 lignes suivantes sont redondantes :  
    $tableau = "<table>"; /* Création d'un tableau */
    $tableau .= "<table border = 1 align = center>";


---------------
Création de sites Internet http://www.karma-solutions.fr/
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Tableau de couleur php

 

Sujets relatifs
couleur de lien dans un tableau en hovercouleur tableau fct result valeur colonne csv
couleur de cellule tableau automatique fichier odt phpAlterner couleur de lignes d'un tableau
tableau et couleurvba word couleur tableau
html : couleur des liens dans un tableauchanger la couleur d'une ligne d'un tableau avec les css
pb IE/FF tableau couleurMettre en couleur une ligne sur deux dans un tableau;
Plus de sujets relatifs à : Tableau de couleur php



Copyright © 1997-2016 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR