IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[GD] Remplir une forme quelconque par une couleur est-ce possible avec GD ?


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2011
    Messages : 32
    Par défaut [GD] Remplir une forme quelconque par une couleur est-ce possible avec GD ?
    Bonjour,

    Voici un exemple illustrant mon besoin : sur un site WEB PHP, l'utilisateur renseigne des valeurs en rapport avec un pays. Depuis une carte vierge, en donnant une position X et Y de départ, avec GD2 peut-on faire un remplissage de la forme (grosso-modo un polygone) avec une couleur jusqu'à sa bordure ? un peu comme si on prenait l'image dans un logiciel de dessin, en cliquant sur l'icone du pot de peinture, en choisissant la couleur et en se positionnant dans la forme d'un clic la couleur remplit la forme jusqu'à sa bordure.

    En fait ce serait faire un peu comme Map On The World .

    L'image de base sera toujours à la même taille, de fond blancs ou transparent. Attention : dans l'exemple, il se peut qu'il y ait plusieurs pays contigus à colorier différemment donc superposer un remplissage avec la carte risque que la couleur empiète sur le pays voisin, ce que je ne veux pas.

    Donc si possible avec GD2 sinon je suis preneur quand même.

    D'avance, merci à tous.

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2011
    Messages : 32
    Par défaut
    Ben, non !
    Sinon je serais obligé de me palucher la définition de chaque point de polygone pour dessiner les frontières des pays !!!
    Pour l'Europe encore, ça passerais. Mais pour toute la terre cela me prendrais plusieurs mois.

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Ben dans ce cas là oublie GD. Tout objet/figure est défini par une liste de points dans GD. Comment est définie ta carte si ce n'est par une liste de point ?

    Pour info le site que tu cites semble utiliser la google chart api.

  5. #5
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2011
    Messages : 32
    Par défaut
    J'ai des cartes déjà dessinées au format JPEG, PNG, TIFF ... peu importe !
    Ce je veux faire c'est à partir d'un point X, Y créer du code qui puisse déterminer où se trouve la bordure (frontière ou littoral) de ce pays et colorier son contenu.
    Comme je pourrais le faire manuellement avec l'outil "remplissage" Nom : pot_de_peinture.png
Affichages : 936
Taille : 616 octets en cliquant quelque part dans la forme.

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Lol, l'informatique c'est pas automatique.

    Tu ne pourras strictement rien faire avec une image jpeg qui est un format de sortie, c'est juste une suite de 0 et de 1 qui, regrouper par paquet, déterminent chaque couleur de chaque pixel. Rien de plus.

    A partir de ça, bon courage pour déterminer informatiquement les limites d'un pays ^^

  7. #7
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    tu peu utiliser "imagefilltoborder" the GD
    mais c'est plus facile de travailler avec des images en png

    voici un petit exemple (simplifié) que j'ai fait pour toi visualiser la chose
    http://baras.alotspace.com/map_color/

    le code de l'index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?php
    if(!isset($_GET['X'])){$_GET['X']=0;};
    if(!isset($_GET['Y'])){$_GET['Y']=0;};
    if(!isset($_GET['COLOR'])){$_GET['COLOR']="255,255,255";};
    ?>
    <h1>Test Color Map</h1>
    <a href="#" onClick="getImgX(event); return false">
    	<img src="color_map.php?X=<?php echo $_GET['X'];?>&Y=<?php echo $_GET['Y'];?>&COLOR=<?php echo $_GET['COLOR'];?>" border='1'>
    </a>
    <form id='form1' action="?" method="get">
    <input type='hidden' name='X' id='coordX'/>
    <input type='hidden' name='Y' id='coordY'/>
    color:
    <select name='COLOR' id='valCOLOR'>
    	<option value='255,0,0'>RED</option>
    	<option value='0,255,0'>VERT</option>
    	<option value='0,0,255'>BLEU</option>
    </select>		
    	<br/>
    </form>
    <script>
    function getImgX (evt) {
    	var img_x;
    	var img_y;
     
    	img_x = evt.clientX;
    	img_y = evt.clientY;
    	for (var offMark = evt.target; offMark; offMark = offMark.offsetParent) {
    		img_x -= offMark.offsetLeft;
    	}
    	for (var offMark = evt.target; offMark;	offMark = offMark.offsetParent) {
    		img_y -= offMark.offsetTop;
    	}
     
    	//var coordinates = 'x: ' + img_x + ', y: ' + img_y;
    	//alert (coordinates);
    	document.getElementById('coordX').value=img_x;
    	document.getElementById('coordY').value=img_y;
    	document.getElementById('form1').submit();
     
    }
    </script>
    le code qui génére l'image colorée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
     
    $imgname='test.png';
    //$im1 = imagecreatefrompng($imgname);
    $img = imagecreatefrompng($imgname);
     
     
    $col_ellipse = imagecolorallocate($img, 255, 0, 0);
    $border = imagecolorallocate($img, 0, 0, 0);
    $textcolor = imagecolorallocate($img, 0, 255, 255);
     
    if(isset($_GET['X'])&&isset($_GET['Y'])&&isset($_GET['COLOR'])){
    	$x=$_GET['X'];
    	$y=$_GET['Y'];
    	$color=explode(",",$_GET['COLOR']);
    	$fill = imagecolorallocate($img, $color[0], $color[1],$color[2]);
    	imagefilltoborder($img, $x, $y,  $border, $fill);
    }
     
    header('Content-Type: image/png');
    imagepng($img);
    ?>
    l'image png:
    Nom : test.png
Affichages : 1211
Taille : 7,2 Ko

  8. #8
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2011
    Messages : 32
    Par défaut
    Bonjour,

    Un grand merci Patrick, c'est exactement pile-poil ce que je cherchais !!!
    Tu as même été un peu plus loin que ce à quoi je dois aboutir, mais cela va m'ouvrir quelques autres perspectives. Donc je vais conserver précieusement l'ensemble ce code sous la main.

    Discussion Résolue avec brio !!!

  9. #9
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    Content que tu soit content, :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/10/2012, 13h51
  2. Comment savoir si une couleur est foncée ?
    Par Alec6 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 07/09/2007, 10h09
  3. voir si une couleur est foncièrement différente d'une autre [php]
    Par bubuche87 dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 27/06/2007, 14h14
  4. Remplir une zone de liste Excel avec une requête Access (problème)
    Par Tontorise dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 30/05/2007, 14h26
  5. Réponses: 9
    Dernier message: 15/05/2006, 16h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo