Aller au contenu

Gestion d'image


mars073
 Share

Recommended Posts

Bonjour all,
Je vais vous expliquer comment générer une image en php.
je vais partir directement sur un exemple assez complexe :D

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 :(
island_air-44f87bd.png
et un petit personnage très mystérieux
char-44f8849.png


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).

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.
 

<?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'])&&is_numeric($_GET['x'])&&
		$_GET['x']>=0&&$_GET['x']<=6) $x = $_GET['x'];
	if (isset($_GET['y'])&&is_numeric($_GET['y'])&&
		$_GET['y']>=0&&$_GET['y']<=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);
	?>

donc en récapitulatif vous devez:
-choisir le type MIME (format de rendu) [liste utile]
-créer à calque à partir d'une image même si elle est distante (ex: imagecreatefromjpeg("http://picture.com/A0001.jpg")) 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).
-faire un rendu dans le format que vous aviez choisis (ex: imagejpeg($image))

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:

<?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);
	?>

> documentation php

si vous avez eu du mal à comprendre la syntaxe de image copie de vous invite à Cliquer ici.

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 imagestring(); ça vous fera un petit exercice :P

Bonne programmation à tous!
Cordialement,
Mars073

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

J'avais raté ce tutoriel, puis je l'ai vu en lisant ton tutoriel sur le captcha.
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). :)

+1 Rep.

Lien vers le commentaire
Partager sur d’autres sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invité
Répondre à ce sujet…

×   Vous avez collé du contenu avec mise en forme.   Supprimer la mise en forme

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Chargement
 Share

×
×
  • Créer...