km.azerttyu.net

Accueil > Du km au texte > Thumbnails

Thumbnails

jeudi 15 février 2007, par km

  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. }
  98. //teste l'existence du chemin cible
  99. if (!is_dir($thumb['destination']['dir'])) {
  100. @mkdir($thumb['destination']['dir']);
  101. }
  102.  
  103. //affiche directement la vignette si elle existe
  104. if (file_exists($thumb['destination']['full_name'])) {
  105. Header('Content-type: image/jpeg');
  106. Header("Expires: Mon, 26 Jul 2030 05:00:00 GMT");
  107. Header('Content-Disposition: inline; filename='.$thumb['destination']['full_name']);
  108. echo (join('', file($thumb['destination']['full_name'])));
  109. //supprime la vignette si necessaire
  110. if ($thumb['nocache']==1) {
  111. @unlink($thumb['destination']['full_name']);
  112. }
  113. }
  114.  
  115. //determine le type d'image source
  116. $info_source = getimagesize($thumb['source']['dir'].$thumb['source']['file']);
  117. $thumb['source']['largeur'] = $info_source[0];
  118. $thumb['source']['hauteur'] = $info_source[1];
  119. $thumb['source']['type'] = $info_source[2];
  120.  
  121. /*
  122.   echo $thumb['destination']['full_name']."<br/>";
  123.   echo $thumb['source']['full_name']."<br/>";
  124.   echo $thumb['source']['type']."<br/>";
  125.   echo "++".$thumb['source']['largeur']."--".$thumb['source']['hauteur']."<br/>";
  126.   echo "--".$thumb['destination']['largeur']."--".$thumb['destination']['hauteur']."<br/>";
  127. */
  128.  
  129.  
  130. //g\u00c3\u00a9n\u00c3\u00a9re la vignette
  131. switch ($thumb['source']['type']) {
  132. case 2: // JPG
  133. $thumb['source']['image'] = ImageCreateFromJPEG($thumb['source']['full_name']);
  134. break;
  135.  
  136. case 3: // Png
  137. $thumb['source']['image'] = ImageCreateFromPng($thumb['source']['full_name']);
  138. break;
  139.  
  140.  
  141.  
  142. default :
  143. echo "Le fichier cible ne peut \u00eare cr\u00e9er";
  144. break;
  145. }
  146.  
  147. //d\u00c3\u00a9fini les dimension de la vignette
  148. if (empty($thumb['destination']['hauteur'])){
  149. $thumb['destination']['hauteur'] = $thumb['destination']['largeur'] /$thumb['source']['largeur'] * $thumb['source']['hauteur'];
  150. }
  151.  
  152. //retaille l'image
  153.  
  154. if ($thumb['source']['largeur']<2000) {
  155. $thumb['destination']['image'] = ImageCreateTrueColor($thumb['destination']['largeur'], $thumb['destination']['hauteur']);
  156. /*
  157.   imagecopyresized(
  158.   $thumb['destination']['image'], $thumb['source']['image'],
  159.   0, 0, 0, 0,
  160.   $thumb['destination']['largeur'], $thumb['destination']['hauteur'], $thumb['source']['largeur'], $thumb['source']['hauteur']
  161.   );
  162.   */
  163. $thumb['destination']['image'], $thumb['source']['image'],
  164. 0, 0, 0, 0,
  165. $thumb['destination']['largeur'], $thumb['destination']['hauteur'], $thumb['source']['largeur'], $thumb['source']['hauteur']
  166. );
  167. } else {
  168. $thumb['destination']['image'] = ImageCreateTrueColor($thumb['destination']['largeur'], $thumb['destination']['hauteur']);
  169. $thumb['destination']['image'],
  170. $thumb['source']['image'],
  171. 0, 0, 0, 0,
  172. $thumb['destination']['largeur'],
  173. $thumb['destination']['hauteur'],
  174. $thumb['source']['largeur'],
  175. $thumb['source']['hauteur']
  176. );
  177. }
  178.  
  179. //ajoute un commentaire sur la vignette
  180. if (!empty($thumb['alt'])) {
  181. $font=51;
  182. $string= $thumb['alt'];
  183. $white = imagecolorallocate ($thumb['destination']['image'], 255, 255, 255);
  184. $black = imagecolorallocate ($thumb['destination']['image'], 0, 0, 0);
  185. imagestring ($thumb['destination']['image'], $font, 3, $thumb['destination']['hauteur']-9, $string, $black);
  186. imagestring ($thumb['destination']['image'], $font, 2, $thumb['destination']['hauteur']-10, $string, $white);
  187. }
  188.  
  189. //g\u00c3\u00a9n\u00c3\u00a9re l'entete de fichier
  190. Header('Content-type: image/jpeg');
  191. Header("Expires: Mon, 26 Jul 2030 05:00:00 GMT");
  192. Header('Content-Disposition: inline; filename='.$thumb['destination']['full_name']);
  193.  
  194. if ($thumb['destination']['type']==2){
  195. if ($thumb['nocache']== 0) {
  196. //sauvegarde l'image
  197. imagejpeg($thumb['destination']['image'],$thumb['destination']['full_name'],$thumb['quality']);
  198. }
  199. //retourne l'image sur la sortie standard
  200. imagejpeg($thumb['destination']['image'],'',$thumb['quality']);
  201. }
  202.  
  203. //vide la m\u00e9oire
  204. imagedestroy ($thumb['source']['image']);
  205. imagedestroy ($thumb['destination']['image']);
  206.  
  207. ?>

Télécharger

Un message, un commentaire ?

Qui êtes-vous ?
Votre message
  • Pour créer des paragraphes, laissez simplement des lignes vides.