Fonction PHP pour ajouter un filigrane sur une image Par JarodxXx
le vendredi 4 juillet 2008, 10:54
Une fonction plutôt longue mais pas compliquée ..
Elle permet tout simplement d'ajouter un filigrane sur une image avec un pourcentage d'opacité, et de redimensionner cette image. Finalement ça revient à superposer 2 images puis à redimensionner le tout .. rien de bien exceptionnel mais ça peut servir ...
Voici donc cette fonction :
//Adresse de l'image source
// $img_finale ==> Adresse et nom de l'image finale
// $filigrane ==> Adresse du filigrane au format .gif
// Pour utiliser un format .jpeg
// modifier $image_c=imagecreatefromgif($filigrane);
// par $image_c=imagecreatefromjpeg($filigrane);
//
//$taillelarg ==> Largeur maximum de l'image après redimensionnement
// Il ne se passe rien si l'image est inférieure
//$taillehaut ==> Hauteur maximum de l'image après redimensionnement
// Il ne se passe rien si l'image est inférieure
//
//$opacity = 80 par defaut
function filigrane($img_src,$img_finale,$filigrane,$taillelarg,$taillehaut, $opacity = 80){
//largueur de l'affichage
$taille_larg=$taillelarg;
//hauteur de l'affichage
$taille_haut=$taillehaut;
//récuperation de l'extension
$extension = strrchr($img_src,'.');
switch($extension){
case ".gif":
$image_s=imagecreatefromgif($img_src) or die("Erreur à l'ouverture");break;
case".png":
$image_s=imagecreatefrompng($img_src) or die("Erreur à l'ouverture");break;
case ".jpg"||".jpeg"||".jpe"||".JPG"||".JPEG":
$image_s=imagecreatefromjpeg($img_src) or die("Erreur à l'ouverture");break;
}
//récupération des dimensions de l'image principale
$width=imagesx($image_s);
$height=imagesy($image_s);
//redimention de l'image source
if($width<=$height) //visuel horizontal
{
$ratio=max($width/$taille_larg, $height/$taille_haut);
$new_width=$taille_larg;
$new_height=$height/$ratio;
}
else //visuel vertical
{
$ratio=max($width/$taille_larg, $height/$taille_haut);
$new_width=$width/$ratio;
$new_height=$taille_haut;
}
//création de l'image source redimensionnée
$thumb=imagecreatetruecolor($new_width,$new_height);
imagecopyresized($thumb,$image_s,0,0,0,0,$new_width,$new_height,$width,$height);
//dimensions de l'image principale redimensionnée
$width_thumb=imagesx($thumb);
$height_thumb=imagesy($thumb);
//création de l'image copyright
$image_c=imagecreatefromgif($filigrane);
//récupération des dimensions de l'image du copyright
$larg_cop=imagesx($image_c);
$long_cop=imagesy($image_c);
//calcule la position du copyright sur l'axe des abscisses
$x=($width_thumb-$larg_cop)-10;
//calcule la position du copyright sur l'axe des ordonnées
$y=($height_thumb-$long_cop)-10;
//réalisation de la superposition
imagecopymerge($thumb,$image_c, $x, $y, 0, 0, $larg_cop, $long_cop, $opacity);
//sauvegarde de l'image
switch($extension){
case ".gif":
imagegif($thumb,$img_finale) or die ("Erreur de création gif");
break;
case".png":
imagepng($thumb,$img_finale) or die ("Erreur de création png");
break;
case ".jpg"||".jpeg"||".jpe"||".JPG"||".JPEG":
imagejpeg($thumb,$img_finale) or die ("Erreur de création jpeg");
break;
}
//libération de la mémoire
imagedestroy($image_s);
}
?>


















Ziki
Dailymotion
Flickr
Technorati
Twitter
1. Le vendredi 4 juillet 2008, 11:53 par Ice-Cream
Je t'aiiiiime, je cherchais justement ça !
2. Le vendredi 4 juillet 2008, 11:58 par jarodxxx
Je t'aime aussi .. tu es célibataire ?
arf n'importe quoi , je voulais dire .. de rien !
3. Le samedi 5 juillet 2008, 11:37 par Palleas
1) Plutôt utiliser getimagesize() pour récupèrer l'extention, c'est fait pour ça (se baser sur l'extention c'est pas secure du tout !)
2) Plutôt que des or die(), préferer un trigger_error(), plus simple de centraliser les erreurs je trouve
3) sinon j'ai pas compris le :
//largueur de l'affichage
$taille_larg=$taillelarg;
//hauteur de l'affichage
$taille_haut=$taillehaut;
Pourquoi tu copies des variables ?
4. Le samedi 5 juillet 2008, 12:17 par GeekFG
En fait j'allais faire les 2 mêmes premières remarques que Palleas !
Donc je dis "bis"
5. Le samedi 5 juillet 2008, 21:53 par Romain
Tous les jours je suis épaté par les possibilités qu'offres php !!
merci pour le code