Thumbnails

  1. <?php
  2.     /*******************************************************************************
  3.     *
  4.     *Thumb.php
  5.     *Fonction :
  6.     *    Propose la g\u00e9n\u00e9ration \u00e0 la vol\u00e9e d'une vignette \u00e0 partir d'un jpeg
  7.     *    La vignette est sauvegard\u00e9e dans un sous repertoire de l'image source.
  8.     *Necessite :
  9.     *    GD 2
  10.     *
  11.     *Adapt\u00e9 de :
  12.     *  Thumb.php de Chris Tomlinson. ctomlinson@westnet.com.au
  13.     *    http://mightystuff.net
  14.     *
  15.     *Version :
  16.     *  0.1 : 2006/06/04 -  Mise en place du code
  17.     *  0.2 : 2006/06/05 -  Contr\u00f4le l'existence du repertoire cible
  18.     *
  19.     *Attributs :
  20.     *$_GET['file'] = Chemin de l'image \u00c3  r\u00e9duire
  21.     *$_GET['largeur'] = largeur maximale de l'image
  22.     *$_GET['hauteur'] = largeur maximale de l'image
  23.     *$_GET['nochache'] = supprime la vignette
  24.     *  (0 = sauvergarder, 1=supprimer)
  25.  
  26.     *  -- bogue --
  27.     *$_GET['alt'] = un filigramme
  28.     *  -- \u00c3  developper --
  29.  
  30.     *$_GET['type'] = le type d'image cible
  31.     *  (1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP,
  32.     *  7 = TIFF (Ordre des octets Intel), 8 = TIFF (Ordre des octets Motorola),
  33.     * 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF)
  34.     ******************************************************************************/
  35.  
  36.     // configuration
  37.     $thumb['dir'] ='thumbs/';
  38.  
  39.     if (empty($_GET['largeur']) && empty($_GET['hauteur'])) {
  40.         $thumb['destination']['largeur'] = 200;
  41.     } else {
  42.         $thumb['destination']['largeur'] = $_GET['largeur'];
  43.         $thumb['destination']['hauteur'] = $_GET['hauteur'];
  44.     }
  45.  
  46.     if (empty($_GET["quality"])) {
  47.         $thumb['quality'] = 80;
  48.     } else {
  49.         $thumb['quality'] = $_GET["quality"];
  50.     }
  51.  
  52.     if (empty($_GET["type"])) {
  53.         $thumb['destination']['type'] = 2;
  54.     } else {
  55.         $thumb['destination']['type'] = $_GET["type"];
  56.     }
  57.  
  58.     if (empty($_GET['alt'])) {
  59.         $thumb['alt']="filigramme";
  60.     } else {
  61.         $thumb['alt'] = $_GET['alt'];
  62.     }
  63.  
  64.     if ($_GET['nocache'] == 1) {
  65.         $thumb['nocache'] = 1;
  66.     } else {
  67.         $thumb['nocache'] = 0;
  68.     }
  69.  
  70.     //determine le chemin complet du serveur
  71.     $document_root = str_replace($_SERVER["PHP_SELF"],"",__FILE__)."/";
  72.  
  73.     //determine le nom du fichier
  74.     $thumb['source']['file'] = substr(strrchr ($_GET['file'],'/'),1);
  75.     $thumb['destination']['file'] = $thumb['source']['file'];
  76.  
  77.     //determine le chemin source et cible de sauvegarde
  78.     if (substr_count($_GET['file'], "http://",0)) {
  79.         $thumb['source']['dir'] = str_replace($thumb['source']['file'],'',$_GET['file']);
  80.         $thumb['destination']['dir'] = $document_root.$thumb['dir'];
  81.     } else {
  82.         $thumb['source']['dir'] = $document_root.str_replace($thumb['source']['file'],'',$_GET['file']);
  83.         $thumb['destination']['dir'] = $thumb['source']['dir'].$thumb['dir'];
  84.     }
  85.  
  86.     //memorise le chemin complet
  87.     $thumb['source']['full_name'] = $thumb['source']['dir'].$thumb['source']['file'];
  88.     $thumb['destination']['full_name'] = $thumb['destination']['dir'].$thumb['destination']['file'];
  89.  
  90.     //echo "<strong>".$thumb['source']['full_name']."</strong>";
  91.  
  92.  
  93.     //teste l'existence du fichier source
  94.     if (!file_exists($thumb['source']['full_name'])) {
  95.         echo $thumb['source']['full_name'];
  96.         echo "Le fichier source n'existe pas";
  97.         exit;
  98.     }
  99.     //teste l'existence du chemin cible
  100.     if (!is_dir($thumb['destination']['dir'])) {
  101.         @mkdir($thumb['destination']['dir']);
  102.     }
  103.  
  104.     //affiche directement la vignette si elle existe
  105.     if (file_exists($thumb['destination']['full_name'])) {
  106.         Header('Content-type: image/jpeg');
  107.         Header("Expires: Mon, 26 Jul 2030 05:00:00 GMT");
  108.         Header('Content-Disposition: inline; filename='.$thumb['destination']['full_name']);
  109.         echo (join('', file($thumb['destination']['full_name'])));
  110.         //supprime la vignette si necessaire
  111.         if ($thumb['nocache']==1) {
  112.             @unlink($thumb['destination']['full_name']);
  113.         }
  114.         exit;
  115.     }
  116.  
  117.     //determine le type d'image source
  118.     $info_source = getimagesize($thumb['source']['dir'].$thumb['source']['file']);
  119.     $thumb['source']['largeur'] = $info_source[0];
  120.     $thumb['source']['hauteur'] = $info_source[1];
  121.     $thumb['source']['type'] = $info_source[2];
  122.  
  123. /*
  124.     echo $thumb['destination']['full_name']."<br/>";
  125.     echo $thumb['source']['full_name']."<br/>";
  126.     echo $thumb['source']['type']."<br/>";
  127.     echo "++".$thumb['source']['largeur']."--".$thumb['source']['hauteur']."<br/>";
  128.     echo "--".$thumb['destination']['largeur']."--".$thumb['destination']['hauteur']."<br/>";
  129. */
  130.  
  131.  
  132.     //g\u00c3\u00a9n\u00c3\u00a9re la vignette
  133.     switch ($thumb['source']['type']) {
  134.         case 2:        // JPG
  135.             $thumb['source']['image'] = ImageCreateFromJPEG($thumb['source']['full_name']);
  136.             break;
  137.  
  138.         case 3:        // Png
  139.             $thumb['source']['image'] = ImageCreateFromPng($thumb['source']['full_name']);
  140.             break;
  141.  
  142.  
  143.  
  144.         default :
  145.             echo "Le fichier cible ne peut \u00eare cr\u00e9er";
  146.             exit;
  147.             break;
  148.     }
  149.  
  150.     //d\u00c3\u00a9fini les dimension de la vignette
  151.     if (empty($thumb['destination']['hauteur'])){
  152.         $thumb['destination']['hauteur'] = $thumb['destination']['largeur'] /$thumb['source']['largeur'] * $thumb['source']['hauteur'];
  153.     }
  154.  
  155.     //retaille l'image
  156.  
  157.     if ($thumb['source']['largeur']<2000) {
  158.         $thumb['destination']['image'] = ImageCreateTrueColor($thumb['destination']['largeur'], $thumb['destination']['hauteur']);
  159.         /*
  160.         imagecopyresized(
  161.             $thumb['destination']['image'], $thumb['source']['image'],
  162.             0, 0, 0, 0,
  163.             $thumb['destination']['largeur'], $thumb['destination']['hauteur'], $thumb['source']['largeur'], $thumb['source']['hauteur']
  164.         );
  165.         */
  166.         imagecopyresampled(
  167.             $thumb['destination']['image'], $thumb['source']['image'],
  168.             0, 0, 0, 0,
  169.             $thumb['destination']['largeur'], $thumb['destination']['hauteur'], $thumb['source']['largeur'], $thumb['source']['hauteur']
  170.         );
  171.     } else {
  172.         $thumb['destination']['image'] = ImageCreateTrueColor($thumb['destination']['largeur'], $thumb['destination']['hauteur']);
  173.         imagecopyresized(
  174.             $thumb['destination']['image'],
  175.             $thumb['source']['image'],
  176.             0, 0, 0, 0,
  177.             $thumb['destination']['largeur'],
  178.             $thumb['destination']['hauteur'],
  179.             $thumb['source']['largeur'],
  180.             $thumb['source']['hauteur']
  181.         );
  182.     }
  183.  
  184.     //ajoute un commentaire sur la vignette
  185.     if (!empty($thumb['alt']))  {
  186.         $font=51;
  187.         $string= $thumb['alt'];
  188.         $white = imagecolorallocate ($thumb['destination']['image'], 255, 255, 255);
  189.         $black = imagecolorallocate ($thumb['destination']['image'], 0, 0, 0);
  190.         imagestring ($thumb['destination']['image'], $font, 3, $thumb['destination']['hauteur']-9, $string, $black);
  191.         imagestring ($thumb['destination']['image'], $font, 2, $thumb['destination']['hauteur']-10, $string, $white);
  192.     }
  193.  
  194.     //g\u00c3\u00a9n\u00c3\u00a9re l'entete de fichier
  195.     Header('Content-type: image/jpeg');
  196.     Header("Expires: Mon, 26 Jul 2030 05:00:00 GMT");
  197.     Header('Content-Disposition: inline; filename='.$thumb['destination']['full_name']);
  198.  
  199.     if ($thumb['destination']['type']==2){
  200.         if ($thumb['nocache']== 0) {
  201.             //sauvegarde l'image
  202.             imagejpeg($thumb['destination']['image'],$thumb['destination']['full_name'],$thumb['quality']);
  203.         }
  204.         //retourne l'image sur la sortie standard
  205.         imagejpeg($thumb['destination']['image'],'',$thumb['quality']);
  206.     }
  207.  
  208.     //vide la m\u00e9oire
  209.     imagedestroy ($thumb['source']['image']);
  210.     imagedestroy ($thumb['destination']['image']);
  211.  
  212. ?>

Télécharger

Un message, un commentaire ?

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.