Watermark à la volée en php

Tous les benchmarks, vos résultats, vos tests.
Vos programmes, vos conseils logiciel
Votre matos, vos problèmes

Modérateur: Team Azerty

Watermark à la volée en php

Messagepar Aurelienazerty sur Mar 19 Déc 2006, 20:09:35

Après la solution de david pour convertir en masse des images, voici un petit script qui permet de mettre des watermark sur des images à la volée.
Il faut tout d'abord un script php:
Code: Tout sélectionner
<?php
include ('config.lib.php');
if (isset($_GET["img"])) $img = REALPATH.$_GET["img"];
else $img = REALPATH."images/articles/15/Dscn8700.jpg";

//On tente de l'ouvrir
//Si ça ne marche pas, on vire le "wk_"
if (!@fopen($img, 'r'))
   $img = str_replace("wk_", "", $img);
   
//die($img);

mettre_watermark($img, REALPATH."images/lan/watermark.png");

function mettre_watermark($img, $watermark) {

   //on demande les dimension de l'image $img:
   $size = @getimagesize($img);   
   //largeur
   $largeur=$size[0];
   //longeur
   $longeur=$size[1];
   
   //on regarde si c'est png jpg gif
   $type=$size[2];
   //on charge l'image $img dans $img_big:
   switch($type)
   {
      case 2: $img_big = imagecreatefromjpeg($img); break;
      case 3:
         $img_big = imagecreatefrompng($img);
         imagesavealpha($img_big,TRUE);
         break;
      case 1: $img_big = imagecreatefromgif($img);break;
   }
   imagealphablending($img_big,TRUE);
   
   $destImage=imagecreatetruecolor($largeur,$longeur);
   imagecopyresampled($destImage,$img_big,0,0,0,0,$largeur,$longeur,$largeur,$longeur);
   
   //Copie du watermark
   //die($watermark);
   $size_water = getimagesize($watermark);   
   //largeur
   $largeur_water=$size_water[0];
   //longeur
   $longeur_water=$size_water[1];
   //on regarde si c'est png jpg gif
   $type_water=$size_water[2];
   
   switch($type_water)
   {
      case 2: $img_water = imagecreatefromjpeg($watermark); break;
      case 3:
         $img_water = imagecreatefrompng($watermark);
         imagesavealpha($img_water,TRUE);
         break;
      case 1: $img_water = imagecreatefromgif($watermark);break;
   }
   imagealphablending($img_water,TRUE);
   
   $img_water2 = @imagecreatetruecolor($largeur_water, $longeur_water);
   $bgc = imagecolorallocate($img_water2, 255, 255, 255 );
   ////Couleur de fond
   $c_fond = imagecolorallocate($img_water2, 255, 255, 255);//Rouge
   imagefilledrectangle($img_water2, 0,0, $largeur_water, $longeur_water, $c_fond);
   // on change les occurences $c_fond en transparent
   $trans=imagecolortransparent($img_water2, $c_fond);
   imagealphablending($img_water2,FALSE);
   imagesavealpha($img_water2,TRUE);
   imagecopyresampled($img_water2,$img_water,0,0,0,0,$largeur_water,$longeur_water,$largeur_water,$longeur_water);
   imagepng($img_water2,$img_water2);
   
   
   //Positionnement en bas à droite
   $position_y = $longeur - $longeur_water;
   $position_x = $largeur - $largeur_water;
   imagecopy($destImage, $img_water2, $position_x,$position_y,0,0,$largeur_water,$longeur_water);
   //on envoie l'image au navigateur:
   
   switch($type)
      {

         case 2:
         //on enverra au navigateur un fichier de type image au format jpeg:
         header("Content-type: image/jpeg");
         //on envoie l'image reduire au navigateur:
         @imagejpeg($destImage);
         break;

         case 3://on enverra au navigateur un fichier de type image au format jpeg:
         header("Content-type: image/png");
         //on envoie l'image reduire au navigateur:
         @imagepng($destImage);
         break;

         case 1: //on enverra au navigateur un fichier de type image au format jpeg:
         header("Content-type: image/gif");
         //on envoie l'image reduire au navigateur:
         @imagegif($destImage);
         break;

         default: false ;

   }
   imagedestroy($destImage);
   imagedestroy($img_water);
   imagedestroy($img_water2);
   imagedestroy($img_big);
}
?>
Ensuite, il faut modifier le fichier .htaccess de la manière suivante:
Code: Tout sélectionner
RewriteRule (.*)images/(.*)/wk_(.*) /include/watermark.php?img=/images/$2/wk_$3 [L]
Dans mon cas, toutes les images préfixées par un "wk_" seront "wartermarkées"

Exemple:
Avatar de l’utilisateur
Aurelienazerty
Webmaster / Président
 
Messages: 10014
Inscrit le: Ven 27 Sep 2002, 20:41:26
Localisation: Vienne (Capitale du monde)

Retourner vers Software / Hardware

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 0 invités