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

  1. #1
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    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
    Avatar de Spartacusply
    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
    Points : 3 274
    Points
    3 274
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    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
    Avatar de Spartacusply
    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
    Points : 3 274
    Points
    3 274
    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.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  5. #5
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    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 : 872
Taille : 616 octets en cliquant quelque part dans la forme.

  6. #6
    Membre expert
    Avatar de Spartacusply
    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
    Points : 3 274
    Points
    3 274
    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 ^^
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  7. #7
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    Par défaut
    Alors si une image n'est qu'une suite de 1 et de 0 comment se fait-il que dans un logiciel de dessin, en cliquant sur l'outil remplissage et en cliquant sur une zone, la couleur la rempli dans la limite déterminée par des pixel d'une autre couleur ?

    PHP ayant des fonctions presque équivalente au C je suis sûr qu'un algorithme de remplissage doit exister quelque part. La manipulation de JPEG existe bel et bien, pour preuve, j'ai une application WEB qui dessine les plans de toitures en fonction des relevés pratiqués par des professionnels, change le dessin du toit en fonction du type de matériaux et ajoute tout obstacle (lucarne, cheminé, croupes, chien-assis, etc ...) aux dimensions et positions précisées.

    Et non je ne veux plus être tributaire d'API de qui que ce soit : en 2004, j'ai développé un site ASP 3.0 faisant à API de messagerie Microsoft qui est devenue payante. Donc j'ai recodé pour une autre API gratuite (plus légère) et qui a été abandonné 2 ans après sans alternative. Donc je suis passé à PHP avec la promesse de jamais être tributaire d'une application tierce.

  8. #8
    Membre expert
    Avatar de Spartacusply
    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
    Points : 3 274
    Points
    3 274
    Par défaut
    Ces logiciels ne travaillent pas avec des jpeg, ils travaillent avec des types de fichiers qui leurs sont propres, toujours avec des 0 et des 1 certes, mais qui représentent des traits, des cercles, des formes, qui ne sont pas uniquement des points de couleurs.
    Pour l'application que tu décris, c'est très bien certes, mais celle-ci possédait des chiffres, des coordonnées en entrée, que ne contient pas un Jpeg, ce qui fait que ce n'est absolument pas comparable ! Extraire quelque chose de "visible" en jpeg c'est facile, l'inverse es hautement plus compliqué.

    En gros tu souhaites la fonction "baguette magique" de photoshop (qui elle déjà n'assure pas forcément un résultat fiable) en PHP...

    Je n'ai qu'une chose à te dire : bon courage !
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  9. #9
    Membre éprouvé 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 : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    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 : 1145
Taille : 7,2 Ko
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  10. #10
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    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 !!!

  11. #11
    Membre éprouvé 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 : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    Content que tu soit content, :-)
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/10/2012, 14h51
  2. Comment savoir si une couleur est foncée ?
    Par Alec6 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 07/09/2007, 11h09
  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, 15h14
  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, 15h26
  5. Réponses: 9
    Dernier message: 15/05/2006, 17h23

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