Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

NodeBB

  1. Home
  2. Programmation
  3. Développement web
  4. PHP
  5. Gestion d'image

Gestion d'image

Scheduled Pinned Locked Moved PHP
2 Posts 2 Posters 3.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • mars073M
    mars073M
    mars073
    wrote on last edited by
    #1

    <p>Bonjour all,<br/>
    Je vais vous expliquer comment générer une image en php.<br/>
    je vais partir directement sur un exemple assez complexe 😄 <br/><br/>
    vous allons nous baser sur l'image suivante (j'avais bien commencé mais bon j'avais la flemme donc j'ai fais un arbre vite fait avec un quadrillage dégeu au dessus trop chiant dessiner à la souris rip mon stylet 😞 <br/><img alt="island_air-44f87bd.png" src="<base_url>/applications/sslimageproxy/interface/image.php?url=http://img102.xooimage.com/files/1/6/a/island_air-44f87bd.png"/><br/>
    et un petit personnage très mystérieux<br/><img alt="char-44f8849.png" src="<base_url>/applications/sslimageproxy/interface/image.php?url=http://img107.xooimage.com/files/1/b/a/char-44f8849.png"/><br/><br/><br/>
    et donc dans cet exemple nous allons positionner un personnage sur le quadrillage le coté le plus à gauche est le point d'origine (0, 0).<br/><br/>
    contexte: vous avez votre bonhomme à déplacer sur le quadrillage grace à une variable $x et $y que l'on dans l'url ($_GET) et vous devez conserver la transparence des 2 images.<br/>
     </p>
    <pre class="ipsCode prettyprint lang-auto">
    <?php
    $x = $y = 0; // on initialise la variable $x et $y à zéro

    // on test l'existant de ?x et ?y dans l'url et si ils sont compris entre 0 et 6
    if (isset($_GET['x'])&amp;&amp;is_numeric($_GET['x'])&amp;&amp;
    	$_GET['x']&gt;=0&amp;&amp;$_GET['x']&lt;=6) $x = $_GET['x'];
    if (isset($_GET['y'])&amp;&amp;is_numeric($_GET['y'])&amp;&amp;
    	$_GET['y']&gt;=0&amp;&amp;$_GET['y']&lt;=6) $y = $_GET['y'];
    
    // on spécifie le type MIME, c'est à dire que le script php va se faire passer pour un autre type de fichier si vous ne mettez pas ça en accédant à la page vous aurez exactement le même résultat que lorsque voys ouvrez l'image avec bloc note
    header('Content-Type: image/png');
    
    $map = imagecreatefrompng("island_air.png");	// on charge l'île volante 
    $char = imagecreatefrompng("char.png");		// on charge le bonhomme mystèrieux
    // on copie l'image du petit bonhomme et on la colle sur le terrain avec la position relative
    imagecopy($map, $char, (210 + ($x * 12) + ($y * 13)), 140 + ($y * 14) - ($x * 10), 0, 0, 23, 43);
    // on conserve le canal alpha, c'est à dire la transparence
    imagealphablending($map, false);
    imagesavealpha($map, true);
    
    // on fait le rendu de l'image dans le format MIME
    imagepng($map);
    
    // on supprime les calques que l'on a fait (pour vider la mémoire)
    imagedestroy($map);
    imagedestroy($char);
    ?&gt;
    

    </pre>
    <p>donc en récapitulatif vous devez:<br/>
    -choisir le type MIME (format de rendu) <a href="http://reference.sitepoint.com/html/mime-types-full" rel="external nofollow">[liste utile]</a><br/>
    -créer à calque à partir d'une image même si elle est distante (ex: imagecreatefromjpeg("<a href="http://picture.com/A0001.jpg" rel="external nofollow">http://picture.com/A0001.jpg</a>")) ou vous pouvez créer un calque vide aux dimensions désirées (exemple: imagecreate(600, 400), pour créer une image de 600px de large et 400px de haut).<br/>
    -faire un rendu dans le format que vous aviez choisis (ex: imagejpeg($image))<br/><br/>
    si vous désirez enregistrer votre rendu vous pouvez le faire directement par exemple en rendu jpg ou jpeg vous ajoutez simplement un paramètre avec le nom de destination exemple:</p>
    <pre class="ipsCode prettyprint lang-auto">
    <?php
    imagejpeg($image, "rendu.jpg");
    // vous pouvez aussi choisir la qualité en ajoutant un troisième paramètre de 0 à 100 ou de 0 à 75 selon le format
    imagejpeg($image, "rendu.jpg", 45);
    // vous pouvez aussi choisir le rendu sans enregistrer en remplacant la destination par NULL:
    imagejpeg($image, NULL, 45);
    ?>
    </pre>
    <p><a href="http://be2.php.net/manual/fr/ref.image.php" rel="external nofollow">> documentation php</a><br/><br/>
    si vous avez eu du mal à comprendre la syntaxe de image copie de vous invite à <a href="http://be2.php.net/manual/fr/function.imagecopy.php" rel="external nofollow">Cliquer ici</a>.<br/><br/>
    Si vous desiez vous pouvez rendre moins mystérieux le bonhomme on lui mettant un nom au dessus de sa tête avec la fonction <a href="http://be2.php.net/manual/fr/function.imagestring.php" rel="external nofollow">imagestring();</a> ça vous fera un petit exercice 😛 <br/><br/>
    Bonne programmation à tous!<br/>
    Cordialement,<br/>
    Mars073</p>

    Aide à l'apprentissage et la réalisation pour des graphismes, des programmes, des sites ou autres.Signature aléatoire, proposez vous aussi une signature ici!

    1 Reply Last reply
    1
    • AzadA
      AzadA
      Azad
      wrote on last edited by
      #2

      <p>J'avais raté ce tutoriel, puis je l'ai vu en lisant ton tutoriel sur le captcha.<br/>
      J'ai bien aimé la précision sur le bonhomme "très mystérieux", bon boulot sinon. La génération d'image en PHP est très pratique pour effectuer des modélisations de courbes (même si le C++ le gère mieux, c'est à mon sens plus simple -et bordélique- en PHP). 🙂 <br/><br/>
      +1 Rep.</p>

      Administrateur du forum.
      Contactez-moi par message privé ou par mail.

      1 Reply Last reply
      0

      Hello! It looks like you're interested in this conversation, but you don't have an account yet.

      Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

      With your input, this post could be even better 💗

      Register Login
      Reply
      • Reply as topic
      Log in to reply
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes


      • Login

      • Login or register to search.
      Powered by NodeBB Contributors
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • World
      • Users
      • Groups