Traitement image Php (redim + ajout logo)

Eléphant du PHP | 58 Messages

16 juil. 2011, 18:42

Bonjour,

Je suis actuellement en train de tester la gestion des images avec PHP.
La GD est installée pas de souci.

en fait j'essaye de melanger 2 scripts afin d'obtenir une image recadrée et avec un logo dessus.

la premiere etape est de recadrer mon image source, c'est a dire prendre une partie de l'image source (en l'occurence une partie de 100x100). ca j'y arrive.
mais apres, je n'arrive pas a y intégrer un logo.

si je ne recadre pas l'image, le script d'intégration logo marche. mais des que je melange le tout, la sauce ne prends plus !

où d'apres vous est l'erreur ??

voici le code
//creation mini 
$sourceMini=imagecreatefromjpeg('imgsource.jpg'); 
  
// On charge d'abord les images 
$sourceIco = imagecreatefrompng('logo-a-incorporer.png'); // Le logo est la source 
  
// Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image 
$largeur_sourceIco = imagesx($sourceIco); 
$hauteur_sourceIco = imagesy($sourceIco); 
$largeur_destination = imagesx($sourceMini); 
$hauteur_destination = imagesy($sourceMini); 

// On veut placer le logo au centre, on calcule les coordonnées où on doit placer le logo sur la photo 
$destination_x = ($largeur_destination/2) - ($largeur_sourceIco/2); 
$destination_y =  ($hauteur_destination/2) - ($hauteur_sourceIco/2); 

//Création de l'image de destination 
$DestinationMini=imagecreatetruecolor(100,100); 

//copy de la source vers destination imagecopyresampled($DestinationMini,$sourceMini,0,0,150,100,100,100,100,100);    
// On met le logo (source) dans l'image de destination (la photo) 
imagecopymerge($DestinationMini, $sourceIco, $destination_x, $destination_y, 0, 0, $largeur_sourceIco, $hauteur_sourceIco, 100); 
    
// Affichage 
imagejpeg($DestinationMini, NULL, 80); 


merci de bien vouloir m'aider, je coince ! surement dans l'ordre de traitement, mais pourtant j'y suis allé a la logique...

merci encore !!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

16 juil. 2011, 22:09

Salut,

Tu calcul les coordonees final a partir de l'image source or rien ne dit (du moins d'apres ton code) que la taille de l'image source soit la meme que celle de destination ;)

La marche a suivre
- creation d'une ressource a partir de l'image source
- creation d'une ressource "vierge"
- réduction de l'image source dans la ressource "vierge"
- creation d'une ressource a partir du logo
- copy merge entre la ressource avec l'image retaillée et le logo
- sauvegarde du tout ;)

Dans ce sens tu devrais moins te mélanger les pinceaux ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 58 Messages

16 juil. 2011, 22:14

ahh ok ok !!!

merci beaucoup, je vais voir ca, et je reviens dire ce qu'il en est :)

merci pour ton aide !

Eléphant du PHP | 58 Messages

16 juil. 2011, 23:12

Je suis désolé mais ca ne marche toujours pas !
je sais pas d'ou ca vient !? j'ai beau regarder et comparant en fonctions des scripts ou des tutoriels, et ca me parait logique, mais mon logo n'apparait pas...
je precise que la source du logo est bonne (qd j'enleve le redimentionnement, ca marche...)

voilà le nouveau code en suivant les etapes que tu as bien voulu me donner :
	//- creation d'une ressource a partir de l'image source
	$sourceMini=imagecreatefromjpeg('ImageSource.jpg');
	
	//- creation d'une ressource "vierge"
	$DestinationMini = imagecreatetruecolor(100,100);
	
	//- réduction de l'image source dans la ressource "vierge"
	$largeur_sourceMini = imagesx($sourceMini);
	$hauteur_sourceMini = imagesy($sourceMini);
	$largeur_destination = imagesx($DestinationMini);
	$hauteur_destination = imagesy($DestinationMini);
	
	imagecopyresampled($DestinationMini,$sourceMini,0,0,150,150,$largeur_destination,$hauteur_destination,100,100);
	
	//- creation d'une ressource a partir du logo
	$sourceIco = imagecreatefrompng(htmlentities('logo-a-incorporer.png');
	$largeur_sourceIco = imagesx($sourceIco);
	$hauteur_sourceIco = imagesy($sourceIco);
	
		// On veut placer le logo au centre, on calcule les coordonnées où on doit placer le logo sur la photo
		$destination_x = ($largeur_sourceMini/2) - ($largeur_sourceIco/2);
		$destination_y =  ($hauteur_sourceMini/2) - ($hauteur_sourceIco/2);
	
	//- copy merge entre la ressource avec l'image retaillée et le logo
	imagecopymerge($DestinationMini, $sourceIco, $destination_x, $destination_y, 0, 0, $largeur_sourceIco, $hauteur_sourceIco, 100);
	
	//- sauvegarde du tout 
	imagejpeg($DestinationMini);
ou est-ce que je fais une erreur ???
merci d'avance :)

Eléphant du PHP | 58 Messages

17 juil. 2011, 13:11

quelqu'un aurait une petite reponse en ce dimanche ??
J'arrive pas a trouver malgres mes eniemes essais !

merci d'avance :) pleaseeee ?!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 juil. 2011, 14:53

Je ne sais pas si ton problème vient de là, mais je pense que tu t'est trompé dans les deux derniers paramètres passés à imagecopyresampled...
// au lieu de :
imagecopyresampled($DestinationMini,$sourceMini,0,0,150,150,$largeur_destination,$hauteur_destination,100,100);
// est-ce que ça ne serait pas plutôt 
imagecopyresampled($DestinationMini,$sourceMini,0,0,150,150,100,100,$largeur_sourceMini,$hauteur_sourceMini);
// ou même
imagecopyresampled($DestinationMini,$sourceMini,0,0,150,150,$largeur_destination,$hauteur_destination,$largeur_sourceMini,$hauteur_sourceMini);
Et es-tu sur que l'image source est toujours bien supérieure à 150*150 px ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 58 Messages

17 juil. 2011, 22:26

merci beaucoup pour ton message Ryle :)

malheureusement, j'ai essayé tes solutions et ca ne resoud pas mon probleme de imagecopymerge... mon logo n'apparait toujours pas sur mon image retaillée...
je vais me remettre dessus, tout retriturer, et je vasi bien reussir a trouver !!! si y'a d'autres inspirés??!

merci encore a toi,
bonne soirée !