Tableau de couleur php

Tableau de couleur php - PHP - Programmation

Marsh Posté le 31-10-2016 à 12:03:45    

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

Reply

Marsh Posté le 31-10-2016 à 12:03:45   

Reply

Marsh Posté le 01-11-2016 à 22:49:24    

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


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 02-11-2016 à 08:33:41    

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

Reply

Marsh Posté le 02-11-2016 à 10:44:50    

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


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 02-11-2016 à 11:08:38    

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

Reply

Marsh Posté le 02-11-2016 à 11:40:17    

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


Reply

Marsh Posté le 02-11-2016 à 22:00:55    

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


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 02-11-2016 à 22:26:06    

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

Reply

Marsh Posté le 02-11-2016 à 22:28:08    

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


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 02-11-2016 à 22:29:17    

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

Reply

Marsh Posté le 02-11-2016 à 22:29:17   

Reply

Marsh Posté le 02-11-2016 à 22:40:28    

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


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 02-11-2016 à 22:41:33    

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

Reply

Marsh Posté le 02-11-2016 à 22:48:32    

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é ?


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 02-11-2016 à 22:51:29    

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

Reply

Marsh Posté le 03-11-2016 à 10:00:31    

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 ? :)

Reply

Marsh Posté le 03-11-2016 à 11:47:56    

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

---------------
We deserve everything that's coming...
Reply

Marsh Posté le 03-11-2016 à 14:20:45    

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

Reply

Marsh Posté le 03-11-2016 à 16:56:40    

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)


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 07-11-2016 à 21:01:30    

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

Reply

Marsh Posté le 14-11-2016 à 19:32:37    

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

Reply

Marsh Posté le 15-11-2016 à 23:08:43    

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

---------------
We deserve everything that's coming...
Reply

Marsh Posté le 16-11-2016 à 10:21:56    

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

Reply

Marsh Posté le 16-11-2016 à 11:36:36    

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

Reply

Marsh Posté le 16-11-2016 à 12:00:53    

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

Reply

Marsh Posté le 16-11-2016 à 21:53:55    

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


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 23-12-2016 à 14:50:45    

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/
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed