Page 1 sur 1

[RÉSOLU] Fusion de 2 images PHP (lib GD)

Posté : 13 janv. 2012, 12:41
par Ez3kiel
Bonjour,

Je requiert un peu d'aide, je suis en train de créer un générateur d'image via un formulaire, formulaire qui envoi basique-ment nom et prenom dans une page traitement.php.
Traitement.php récupère les données, crée une image .png et y intègre nom et prénom, jusque là mon code fonctionne (j'ai testé également l'enregistrement sur ftp et ça marche), mais ensuite je souhaiterais intégrer à cette image un logo.jpg, et c'est là que ça ne fonctionne plus. :mrgreen:
Dans ma logique de débutant, je pense que mon code est censé marché, mais dans la pratique ... Hum. :non:
Si vous voyiez le petit défaut de mon code ça m'arrangerait grandement.

Traitement.php
<?php 
	
header('Content-type: image/png');  


	
     $image = imagecreate(300, 150); //Crée une image de300 pixels de large et 150 pixels de haut 
			 
		$orange = imagecolorallocate($image, 255, 128, 0);
		$bleu = imagecolorallocate($image, 0, 0, 255);
		$bleuclair = imagecolorallocate($image, 156, 227, 254);
		$noir = imagecolorallocate($image, 0, 0, 0);
		$blanc = imagecolorallocate($image, 255, 255, 255);

	
		$nom = $_POST['nom'];
		$prenom = $_POST['prenom'];
	
		
		$string = $nom.'   '.$prenom;
		imagestring($image, 5, 15, 15,$string, $noir);
 	
		
		$source = imagecreatefromjpg('logo.jpg'); // Le logo est la source et $image la destination

	

		// Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image
		$largeur_source = imagesx($source);
		$hauteur_source = imagesy($source);
		$largeur_destination = imagesx($image);
		$hauteur_destination = imagesy($image);

		// On veut placer le logo en bas à droite, on calcule les coordonnées où on doit placer le logo sur la photo
		$destination_x = $largeur_destination - $largeur_source;
		$destination_y =  $hauteur_destination - $hauteur_source;

		// On met le logo (source) dans l'image de destination 
		imagecopymerge($image, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 100);
 
		$file = 'final.png';
		imagepng($image,$file);


	 ?>
	
	

Merci d'avance !

Re: Fusion de 2 images PHP (lib GD)

Posté : 13 janv. 2012, 12:56
par Mazarini
qu'est ce qui ne te convient pas ?

un readfile($file) en fin de traitement devrait faire l'affaire pour voir le dessin.

Remarques :
- Il te restera le problème de plusieurs utilisateurs qui écrasent le fichier à tour de rôle.
- Pourquoi ne pas ouvrir l'image directement et ajouter le texte. Ca me semble plus simple que le merge.

Re: Fusion de 2 images PHP (lib GD)

Posté : 13 janv. 2012, 13:08
par Ez3kiel
Inutile de faire readfile($file) parce que il ne trouvera pas $file, il n'est pas enregistré dans le FTP. Enfin pas après la fusion du logo et de l'image créée. Il peut enregistrer l'image avant sa fusion, avec juste le texte et la couleur de fond.

Pour ce qui est de l'écrasement je m'en occuperais après, l'image devra être envoyé par mail puis supprimé du serveur.
Et je ne comprend pas très bien ta 2eme remarque ...
Pourquoi ne pas ouvrir l'image directement
Quelle image ? Celle créée avec juste la couleur ? Celle une fois le texte ajoutée ? Celle qui sera créée avec la fusion ? Celle du logo ? #-o

Re: Fusion de 2 images PHP (lib GD)

Posté : 13 janv. 2012, 15:21
par Ez3kiel
Problème résolu !

Étourdi que je suis, je n'avais pas remarqué que imagecreatefromjpg('logo.jpg'); s'écrivait plutôt imagecreatefromjpeg('logo.jpg');

Navré pour l'embêtement et merci Mazarini de t'être penché sur le problème !

Re: [RÉSOLU] Fusion de 2 images PHP (lib GD)

Posté : 13 janv. 2012, 16:00
par Mazarini
Tu as un header qui indique que tu envoies une image avec ce script.
$file = 'final.png';
imagepng($image,$file);
Crée le fichier $file mais n'envoies pas l'image, d'ou ma proposition de faire un readfile().

@Ez3kiel : J'ai compris le script comme la création d'une image en mémoire dans laquelle on met le nom puis le merge avec une autre image créer à partir de logo.jpg pour faire final.png.
Si on créait directement avec l'image mergée et que l'on écrivait le nom, pas besoin de merge après.

Re: [RÉSOLU] Fusion de 2 images PHP (lib GD)

Posté : 13 janv. 2012, 17:48
par Ez3kiel
Je vais préciser un peu plus ce que je voulais faire au final.

Le header était là surtout pour avoir un visu de l'image créée, pour les positionnements x et y du texte ainsi que du logo. Le code que j'ai posté n'était pas représentatif de mon objectif final.

Nb: si je fais imagepng($image) au lieu de imagepng($image,$file); , ça m'affiche directement l'image directement dans traitement.php aussi, comme readfile($file), si j'ai compris ?

Une page avec un formulaire simple, qui envoi des données, sur une page traitement.php, sur cette page, on récupère les infos, on crée une image blanche simple, on y intègre les infos, ainsi qu'un logo, on enregistre l'image, ce qui nous enregistre une "carte" en png avec nom, prenom, mail, etc, et le logo sur le server, et toujours sur traitement.php, on envoi la carte.png par pièce jointe au mail précisé dans le formulaire, et ensuite on supprime l'image du serveur. C'est une sorte de générateur de carte en png qui nous l'envoi par mail après. :mrgreen:

Voilà, voilà.