8796 sujets

Développement web côté serveur, CMS

Bonjour, j'ai trouvé sur le site du zero un petit code php qui permet grâce à la librairie GD et à la fonction "imagecopymerge" de faire fusionné deux images.

 
<?php
header ("Content-type: image/jpeg"); // L'image que l'on va créer est un jpeg

// On charge d'abord les images
$source = imagecreatefrompng("logosdz.png"); // Le logo est la source
$destination = imagecreatefromjpeg("couchersoleil.jpg"); // La photo est 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($destination);
$hauteur_destination = imagesy($destination);

// 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 (la photo)
imagecopymerge($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 60);

// On affiche l'image de destination qui a été fusionnée avec le logo
imagejpeg($destination);
?>



Mon but serait d'automatiser cette script, mais je ne sais pas trop comment m'y prendre :s

je voudrais que lors de l'affichage de toutes mes photos sur mon site

le script colle automatiquement mon copyright sur toutes les images de la galerie.

Est-ce que vous pourriez m'aider, me donner des pistes ou m'indiquer un script qui serait semblable à ma demande?

merci d'avance et bonne journée Smiley ravi
Modifié par foxprox (24 Mar 2009 - 19:25)
foxprox a écrit :
Bonjour, j'ai trouvé sur le site du zero un petit code php qui permet grâce à la librairie GD et à la fonction "imagecopymerge" de faire fusionné deux images.

 
<?php
header ("Content-type: image/jpeg"); // L'image que l'on va créer est un jpeg

// On charge d'abord les images
$source = imagecreatefrompng("logosdz.png"); // Le logo est la source
$destination = imagecreatefromjpeg("couchersoleil.jpg"); // La photo est 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($destination);
$hauteur_destination = imagesy($destination);

// 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 (la photo)
imagecopymerge($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 60);

// On affiche l'image de destination qui a été fusionnée avec le logo
imagejpeg($destination);
?>



Mon but serait d'automatiser ce script, mais je ne sais pas trop comment m'y prendre :s

je voudrais que lors de l'affichage de toutes mes photos sur mon site

le script colle automatiquement mon copyright sur toutes les images de la galerie.

Est-ce que vous pourriez m'aider, me donner des pistes ou m'indiquer un script qui serait semblable à ma demande?

merci d'avance et bonne journée Smiley ravi
foxprox a écrit :
Mon but serait d'automatiser cette script, mais je ne sais pas trop comment m'y prendre :s
je voudrais que lors de l'affichage de toutes mes photos sur mon site le script colle automatiquement mon copyright sur toutes les images de la galerie.

Bonjour,
Le mieux a mon avis serait de faire ça lors de l'upload des photos en questions pour que ce soit fait qu'une seule fois.

foxprox a écrit :
Est-ce que vous pourriez m'aider, me donner des pistes ou m'indiquer un script qui serait semblable à ma demande?

Le script est bon, enfin je rien de particulier à modifier.

Là on prend un logo (en png, "logodz.png") pour le copier sur une image (en jpg, "coucherdesoleil.jpg").
Pour faire ça à chaque upload de photo, tu n'as qu'à remplacer coucherdesoleil.jpg par la variable contenant le chemin+nom de la photo uploadée.
le problème est que j'utilise une script d'upload assez complexe qui permet le recadrage de photo grâce au jquery [il y a y une démo du script en fin de page,]--->voir ici

et je cale complètement pour y intégrer la fonction "imagecopymerge"
c'est pour ça que j'avais l'idée de lancer la fusion d'image lors de l'affichage en ligne dans ma galerie...
Pour modifier l'image il faut modifier le script vers la ligne 120, l'image originale est $uploaded.


$scale = 1;
if ($width > $max_width){
	$scale = $max_width/$width;
}
$uploaded = resizeImage($large_image_location,$width,$height,$scale);
taFonctionMergeLogo($uploaded);


Pour modifier le thumbnail il faut modifier le code vers la ligne 145/148, le thumbnail est $cropped

$cropped = resizeThumbnailImage($thumb_image_location, $large_image_location,$w,$h,$x1,$y1,$scale);
taFonctionMergeLogo($cropped);
j'ai essayé d'intégrer ça, mais pour le moment ça ne fonctionne pas, mes photos sont bien uploadées, mais la fonction de fusion d'image de fonctionne pas.
J'ai essayé d'intégrer dans "$destination" le nom de fichier créer au départ par le script,
mais ça n'as pas l'air de fonctionner... Smiley rolleyes

//Scale the image to the thumb_width set above
	$scale = $thumb_width/$w;
	$cropped = resizeThumbnailImage($thumb_image_location, $large_image_location,$w,$h,$x1,$y1,$scale);
	
	// On charge d'abord les images
$source = imagecreatefromgif("media/fond_triangle.gif"); // Le logo est la source
$destination = imagecreatefromjpeg("upload_pic/".$thumb_image_prefix.$_SESSION['random_key'].".jpg"); // La photo est 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($destination);
$hauteur_destination = imagesy($destination);

// 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 (la photo)
imagecopymerge($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 100);

	
	//Reload the page again to view the thumbnail
	header("location:".$_SERVER["PHP_SELF"]);
	exit();
}
Je regarderai ça de plus près ce soir (ou dans la nuit) mais c'est plus facile si tu prends $cropped pour l'image, à la place de "upload_pic/...".

Ce que retourne resizeImage et resizeThumbnailImage est l'image modifiée et enrigistrée si j'ai bien compris
Après imagecopymerge() il faut ajouter
imagejpeg($destination, "dossier/fichierASauvegarder");


Et ça devrait bien fonctionner.
bonjour, merci pour tes réponses, ça fait plaisir! Voilà j'ai essayé d'appliquer tes conseils, mais je dois encore me tromper pcq ça ne fonctionne pas Smiley sweatdrop
J'ai essayé ce code [upload_pic, c'est mon dossier de destination]


	//Scale the image to the thumb_width set above
	$scale = $thumb_width/$w;
	$cropped = resizeThumbnailImage($thumb_image_location, $large_image_location,$w,$h,$x1,$y1,$scale);
	
	// On charge d'abord les images
$source = imagecreatefromgif("media/fond_triangle.gif"); // Le logo est la source


// 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($destination);
$hauteur_destination = imagesy($destination);

// 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 (la photo)
imagecopymerge($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 100);
imagecreatefromjpeg($destination, "upload_pic/".$cropped.".jpg");

	
	//Reload the page again to view the thumbnail
	header("location:".$_SERVER["PHP_SELF"]);
	exit();
}



si tu sais encore m'aider, merci d'avance!
kurt11 a écrit :
Après imagecopymerge() il faut ajouter
imagejpeg($destination, "dossier/fichierASauvegarder");


Et ça devrait bien fonctionner.


imagejpeg

Et pour le fichier de sauvegarde, $cropped suffit. C'est ce que renvoie resizeThumbnailImage() et normalement c'est déjà de la forme "dossier/fichierASauvegarder".
Du coup ça donne : imagejpeg($destination, $cropped);

foxprox a écrit :
si tu sais encore m'aider, merci d'avance!

Pas de souci, je sais ce que c'est que de bloquer sur un code.
voici mon intégration, mais ça ne fonctionne pas, le script d'upload et redimension fonctionne bien, mais l'intégration de mon logo ne fait pas Smiley biggol

	//Scale the image to the thumb_width set above
	$scale = $thumb_width/$w;
	$cropped = resizeThumbnailImage($thumb_image_location, $large_image_location,$w,$h,$x1,$y1,$scale);
	
	// On charge d'abord les images

$source = imagecreatefromgif("media/fond_triangle.gif"); // Le logo est la source

// 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($destination);
$hauteur_destination = imagesy($destination);

// 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 (la photo)
imagecopymerge($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 100);
imagejpeg($destination, $cropped);


	
	//Reload the page again to view the thumbnail
	header("location:".$_SERVER["PHP_SELF"]);
	exit();
}


ça me rend fou ce truc Smiley rolleyes
Voila il faut que tu ajoutes
$destination = imagecreatefromjpeg("$cropped"); // La photo est la destination


Le truc c'est que sans ça, $destination n'existe pas et même si on lui donnait $cropped ça ne fonctionnerai pas; $cropped est juste un string contenant "dossier/thumbnail.jpg" et non une ressource image.

Ce qui donne.


  $source = imagecreatefromgif("wm.gif"); // Le logo est la source
  $destination = imagecreatefromjpeg("$cropped"); // La photo est 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($destination);
  $hauteur_destination = imagesy($destination);

  // 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 (la photo)
  imagecopymerge($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 100);
  imagejpeg($destination, $cropped);

Modifié par kurt11 (24 Mar 2009 - 14:19)
J'arrive un peu tard, mais ce que tu fais à faire est un watermark, il existe de nombreuses ressources si tu désires aller plus loin.
Bref, juste pour préciser ^^
Oui en effet, après quelques recherches c'est dans la même logique que ce que je cherchais à faire! Si j'avais su le nom avant Smiley rolleyes lol

mais ce qui est bien ici c'est que grâce à Kurt j'ai réussi à tout intégrer à l'upload et franchement c'est chouette à manipuler comme script.
Merci php Smiley winner
Modifié par foxprox (24 Mar 2009 - 19:25)