matique
Messages postés18Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention12 avril 2006
-
4 févr. 2006 à 14:17
MonkeyIsBack
Messages postés9Date d'inscriptionvendredi 13 novembre 2009StatutMembreDernière intervention27 juin 2011
-
13 nov. 2009 à 07:16
Bonjour,
Je souhaiterais calculer la couleur dominante d'une image jpg en php.
Pour cela j'ai pensé a deux solutions :
La premiere serait de parcourir l'image pixel par pixel de maniere à ranger dans un tableau chacune de ses couleurs. Mais est ce possible en php.
La seconde serait de redimentionner l'imaga en 1 pixel de maniere à récuperer sa couleur. Dans ce cas la je ne suis pas sur que cela corresponde a la couleur dominante.
Merci pour ton aide le parcours est maintenant possible.
Toutefois j'aimerais savoir s'il y a moyen de récuperer directement le tableau des couleurs plutot que de le construire car ca surchargerait moins le serveur je pense. Le temps d'execution est super important dans le cadre de mon projet !
Merci pour ton aide le parcours est maintenant possible.
Toutefois j'aimerais savoir s'il y a moyen de récuperer directement le tableau des couleurs plutot que de le construire car ca surchargerait moins le serveur je pense. Le temps d'execution est super important dans le cadre de mon projet !
matique
Messages postés18Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention12 avril 2006 5 févr. 2006 à 10:51
Bonjour,
Merci pour votre aide !
C'est quand meme vraiment dommage d'opter pour une solution aussi gourmande !
J'ai effectivement du faire un tableau de stat avec deux for imbriqués et finir par un max du tableau pour récuperer la couleur dominante !
Enfin bon ca me permet de traiter en même temps si l'image est en niveau de gris ou noir et blanc ou couleur !
matique
Messages postés18Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention12 avril 2006 6 févr. 2006 à 18:37
Me revoila !
En fait, je compte opter pour un traitement a partir d'une miniature non reechantillonnée pour ne pas fausser les couleurs.
Mon probleme actuel est que si je veux trouver une couleur dominante significative d'une image, je dois regrouper les nuances.
En effet, une image peut être a dominante verte avec plein de nuance et peut contenir une toute petite surface de #0000FF ! Et ben avec mon algo la couleur dominante sera #0000FF !
Quels conseils me donneriez vous a ce sujet ?
Quelle fonction permet de dire quel est la couleur la plus proche d'un pixel donné parmit une liste de couleurs ?
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 6 févr. 2006 à 19:10
oulà, tu m'en demandes trop là, PHP n'étant pas fait pour faire du graphisme, c'est déjà pas mal, mais bon tout est affaire de maths après, tu n'as qu'à découper ton image en carrés (plus les carrés sont petits et plus ça sera précis jusqu'à une certaine limite) puis ensuite en carrés plus grands en prenant la couleur dominante de chaque carré pour en calculer ensuite la couleur dominante générale, mais bon ...
MonkeyIsBack
Messages postés9Date d'inscriptionvendredi 13 novembre 2009StatutMembreDernière intervention27 juin 2011 13 nov. 2009 à 07:16
Coucou !
Je sais, je vais up un topic sur trois ans, j'ai honte :P
Mais au moins ça peut créer une indication pour les visiteurs suivants ^^...
Mes connaissances en PHP sont sommaires mais j'ai une petite idée sur la chose.
Déjà tu redimensionnes ton image en 100*100, comme ça tu conserves la rapidité du calcul (ton array ne fera "que" (XDD) 10 000 entrées), ensuite tu crées trois autres tableaux, qui enregistrent
hexdec(substr($valeurarray[x], 0, 2));
hexdec(substr($valeurarray[x], 2, 2));
hexdec(substr($valeurarray[x], 4, 2));
(où valeurarray[x] est ton premier tableau)
Comme ça tu obtiens la liste de chaque type de couleur en RGB
Il ne te reste plus qu'à créer trois variables qui feront la somme de chacunes des entrées de tes trois nouveaux arrays, tu divises par 10 000 (nombre d'entrées) comme ça tu obtiens la moyenne de chaque couleur dans l'image, et il te suffit donc de remettre tes données en hexadécimal, créer une nouvelle variable qui contient la moyenne de chaque type de couleur (si tu comprends ><) et tu as ta couleur dominante.
Exemple avec une image en 2x2 => couleurs : #11aaff, #88ddee, #995511, #aaeecc
tu vires les dièses avec un simple if (substr($couleur,0,1)=="#") $couleur=substr($color,1,6);
Tu crées un premier tableau, qui contient en [0] = 11aaff, [1]88ddee etc etc
Tu convertis tes couleurs en RGB (plus facile pour le traîtement des données), via des fonctions qu'on trouve un peu partout sur le net (tape PHP convertir HEX RGB)
Ensuite avec ce que j'ai écrit au dessus, tu crées trois nouveaux tableaux qui contiennent les valeurs R, G et B
couleurR
couleurG
couleurB
tu fais la somme des couleurR[x], la somme des couleurs couleurG[x], et des couleurC[x]
tu les enregistres dans des simples variables numériques
Tu divises tes variables par le nombre d'entrées dans le tableau (ici ça serait 4)
Et tu obtiens la valeur moyenne de R, de G et de B de ton image
Tu crées donc une nouvelle variable avec "$MoyenneCouleurR$MoyenneCouleurB$MoyenneCouleurB" => ta couleur dominante ^^...