Comment recupérer la valeur du code couleur d'une <area> en PHP

Petit nouveau ! | 8 Messages

05 avr. 2009, 17:18

Voilà mon petit souci,

Dans une page HTML, sur une image j'ai des balises de type <area shape="poly" coords="...">. Ces zones, de type polygone, sont remplies uniformément d'une couleur verte ou d'une couleur rouge.

Problème : Récupérer la valeur de la couleur de la zone area.
Difficulté : Je pense utiliser la fonction imagecolorat() de PHP pour récupérer l'index de la couleur du pixel situé aux coordonnées (x , y ) de la zone area. Mais la zone définie n'étant pas un rectangle (je ne ne peux donc pas calculer son centre (x , y ) j'ai des difficultés pour avoir le code couleur de cette zone a coup sur.

Auriez vous une petite idée pour récupérer, sans erreur, la valeur de la couleur de remplissage d'un polygone ?
(Rem : je code en PHP)

Merci de votre aide.

Mammouth du PHP | 693 Messages

05 avr. 2009, 17:34

Si la couleur est uniforme, pas besoin de calculer le centre, dans le case ou ta forme est convexe (c'est à dire que toutes tes cordes sont contenues dans ton polygone. Un carré, un triangle est convexe, mais pas une étoile ou un sablier). Tu prends deux sommets de ton polygone non successif et tu obtiens forcément un point à l'interieur de ton plygone. Si tu polygone n'est pas convexe, ca pose plus de difficulté.

Cependant, je n'ai pas trop bien compris comment ton script fonctionnait. Tu clique sure une aera, mais ensuite, ca fait quoi ? Ca déclanche une action javascript, ca envoit une requète AJAX, ca ouvre un lien ? Car je suis sur que ca serait plus simple d'indiquer la couleur directement dans ton code HTML. Par exemple, si tu appelle un lien, faire quelque chose dans ce style

Code : Tout sélectionner

href="tonlien?couleur=Tacouleur"

Petit nouveau ! | 8 Messages

05 avr. 2009, 17:55

1) Mon polygone n'est pas convexe, car comme tu le dit cela serait trop simple :wink:
2) Non je ne clique pas. Je m'explique plus en détail ...

J'ai une page HTML dans laquelle il ya une image sur laquelle est définie des zones area.
Donc je charge la page HTML (DOMDocument::loadHTMLFile) contenant l'image (imagecreatefromgif) puis je recherche tous les zones area (getElementsByTagName('area')) et je récupére les coordonnées du polygone (getAttribute('coords')).

Et maintenant que j'ai les coordonnées du polygone il faut que je détermine la couleur de remplissage.
Et c'est là que je coince :?
Météo Scope Prévisions météo gratuite pour tous les départements de France.
Venez faire un tour sur l’insolite du Geek, vous ne serez pas déçu !

Mammouth du PHP | 693 Messages

05 avr. 2009, 18:03

Si tu as la main sur le code HTML, tu pourrais t'en tirer en ajouter un attribue class aux area, que tu pourrais recupérer lorsque tu parse ton HTML.

D'autre part, si tu as tout le temps ton centre dans ta forme, tu peux le calculer en faisant la somme des coordonées et en divisant par le nombre de sommet. Mais si c'est pas le cas, il faudrait voir si tu n'arrive pas à déterminer une certaine unité dans tes polygones pour pouvoir déterminer une propriété commune à exploiter. Mais la, il faudrait avoir la liste pour pouvoir voir...

Petit nouveau ! | 8 Messages

05 avr. 2009, 18:34

Je n'ai pas la la main sur le code HTML.

Voilà des exemples de polygone :
<area alt="Alerte1" shape="poly" coords="469,38,479,36,518,64,534,70,533,82,504,83,498,80,504,76,498,70,498,60,493,58,484,58,470,39" </area>
<area alt="Alerte2" shape="poly" coords="505,74,500,79,450,70,450,43,470,38,485,59,494,58,499,62,497,67,504,74" </area>

Par contre je ne te suis pas quand tu indique :
tu peux le calculer en faisant la somme des coordonées et en divisant par le nombre de sommet.
cela donne pour Alerte1 => (469+38+479+....) / 26 et Alerte2 => (505+74+500+....) / 20
mais on obtient un nombre pas les coordonnées (x,y) d'un point
Météo Scope Prévisions météo gratuite pour tous les départements de France.
Venez faire un tour sur l’insolite du Geek, vous ne serez pas déçu !

Mammouth du PHP | 693 Messages

05 avr. 2009, 19:20

tu découpe tes coordonnées en une liste de points, et tu fais la moyenne des x et la moyenne des y. En gros, ca donne ca

Code : Tout sélectionner

505,74,500,79,450,70,450,43,470,38,485,59,494,58,499,62,497,67,504,74 (505,74),(500,79),(450,70),(450,43),(470,38),(485,59),(494,58),(499,62),(497,67),(504,74) x=(505+500+450+450+470+485+494+499+497+504)/10 y=(74+79+70+43+38+59+58+62+67+74)/10

Petit nouveau ! | 8 Messages

05 avr. 2009, 20:02

Super 8-)

Merci à toi orgeris (et petite Pub pour PHPFrance sur Oseox:wink:)
Météo Scope Prévisions météo gratuite pour tous les départements de France.
Venez faire un tour sur l’insolite du Geek, vous ne serez pas déçu !