[ Index ] |
|
Code source de SPIP 1.9.2c |
1 <?php 2 3 /***************************************************************************\ 4 * SPIP, Systeme de publication pour l'internet * 5 * * 6 * Copyright (c) 2001-2007 * 7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * 8 * * 9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * 10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * 11 \***************************************************************************/ 12 13 if (!defined("_ECRIRE_INC_VERSION")) return; 14 15 include_spip('inc/charsets'); # pour le nom de fichier 16 include_spip('base/abstract_sql'); 17 18 // http://doc.spip.org/@action_tourner_dist 19 function action_tourner_dist() { 20 include_spip('inc/distant'); # pour copie_locale 21 22 $securiser_action = charger_fonction('securiser_action', 'inc'); 23 $arg = $securiser_action(); 24 25 if (!preg_match(",^\W*(\d+)\W?(-?\d+)$,", $arg, $r)) { 26 spip_log("action_tourner_dist $arg pas compris"); 27 } else action_tourner_post($r); 28 } 29 30 // http://doc.spip.org/@action_tourner_post 31 function action_tourner_post($r) 32 { 33 $arg = $r[1]; 34 $result = spip_query("SELECT fichier FROM spip_documents WHERE id_document=$arg"); 35 36 if (!$row = spip_fetch_array($result)) 37 return; 38 39 // Fichier destination : on essaie toujours de repartir de l'original 40 $var_rot = $r[2]; 41 $src = copie_locale($row['fichier']); 42 if (preg_match(',^(.*)-r(90|180|270)\.([^.]+)$,', $src, $match)) { 43 $effacer = $src; 44 $src = $match[1].'.'.$match[3]; 45 $var_rot += intval($match[2]); 46 } 47 $var_rot = ((360 + $var_rot) % 360); // 0, 90, 180 ou 270 48 49 if ($var_rot > 0) { 50 $dest = preg_replace(',\.[^.]+$,', '-r'.$var_rot.'$0', $src); 51 spip_log("rotation $var_rot $src : $dest"); 52 53 $process = $GLOBALS['meta']['image_process']; 54 55 // imagick (php4-imagemagick) 56 if ($process == 'imagick') { 57 $handle = imagick_readimage($src); 58 imagick_rotate($handle, $var_rot); 59 imagick_write($handle, $dest); 60 if (!@file_exists($dest)) return; // echec imagick 61 } 62 else if ($process == "gd2") { // theoriquement compatible gd1, mais trop forte degradation d'image 63 gdRotate ($src, $dest, $var_rot); 64 } 65 else if ($process = "convert") { 66 if (_CONVERT_COMMAND!='') { 67 define ('_CONVERT_COMMAND', 'convert'); 68 define ('_ROTATE_COMMAND', _CONVERT_COMMAND.' -rotate %t %src %dest'); 69 } else 70 define ('_ROTATE_COMMAND', ''); 71 if (_ROTATE_COMMAND!=='') { 72 $commande = str_replace( 73 array('%t', '%src', '%dest'), 74 array( 75 $var_rot, 76 escapeshellcmd($src), 77 escapeshellcmd($dest) 78 ), 79 _ROTATE_COMMAND); 80 spip_log($commande); 81 exec($commande); 82 } else 83 $dest = $src; 84 } 85 } 86 else 87 $dest = $src; 88 89 $size_image = @getimagesize($dest); 90 $largeur = $size_image[0]; 91 $hauteur = $size_image[1]; 92 93 // succes ! 94 if ($largeur>0 AND $hauteur>0) { 95 spip_query("UPDATE spip_documents SET fichier='".addslashes($dest)."', largeur=$largeur, hauteur=$hauteur WHERE id_document=$arg"); 96 if ($effacer) { 97 spip_log("j'efface $effacer"); 98 @unlink($effacer); 99 } 100 } 101 102 } 103 104 105 ///////////////////////////////////////////////////////////////////// 106 // 107 // Faire tourner une image 108 // 109 // http://doc.spip.org/@gdRotate 110 function gdRotate ($src, $dest, $rtt){ 111 $src_img = ''; 112 if(preg_match("/\.(png|gif|jpe?g|bmp)$/i", $src, $regs)) { 113 switch($regs[1]) { 114 case 'png': 115 if (function_exists('ImageCreateFromPNG')) { 116 $src_img=ImageCreateFromPNG($src); 117 $save = 'imagepng'; 118 } 119 break; 120 case 'gif': 121 if (function_exists('ImageCreateFromGIF')) { 122 $src_img=ImageCreateFromGIF($src); 123 $save = 'imagegif'; 124 } 125 break; 126 case 'jpeg': 127 case 'jpg': 128 if (function_exists('ImageCreateFromJPEG')) { 129 $src_img=ImageCreateFromJPEG($src); 130 $save = 'Imagejpeg'; 131 } 132 break; 133 case 'bmp': 134 if (function_exists('ImageCreateFromWBMP')) { 135 $src_img=@ImageCreateFromWBMP($src); 136 $save = 'imagewbmp'; 137 } 138 break; 139 } 140 } 141 142 if (!$src_img) { 143 spip_log("gdrotate: image non lue, $src"); 144 return false; 145 } 146 147 $size=@getimagesize($src); 148 if (!($size[0] * $size[1])) return false; 149 150 if (function_exists('imagerotate')) { 151 $dst_img = imagerotate($src_img, -$rtt, 0); 152 } else { 153 154 // Creer l'image destination (hauteur x largeur) et la parcourir 155 // pixel par pixel (un truc de fou) 156 if ($rtt == 180) 157 $size_dest = $size; 158 else 159 $size_dest = array($size[1],$size[0]); 160 161 if ($GLOBALS['meta']['image_process'] == "gd2") 162 $dst_img=ImageCreateTrueColor($size_dest[0],$size_dest[1]); 163 else 164 $dst_img=ImageCreate($size_dest[0],$size_dest[1]); 165 166 // t=top; b=bottom; r=right; l=left 167 for ($t=0;$t<=$size_dest[0]-1; $t++) { 168 $b = $size_dest[0] -1 - $t; 169 for ($l=0;$l<=$size_dest[1]-1; $l++) { 170 $r = $size_dest[1] -1 - $l; 171 switch ($rtt) { 172 case 90: 173 imagecopy($dst_img,$src_img,$t,$r,$r,$b,1,1); 174 break; 175 case 270: 176 imagecopy($dst_img,$src_img,$t,$l,$r,$t,1,1); 177 break; 178 case 180: 179 imagecopy($dst_img,$src_img,$t,$l,$b,$r,1,1); 180 break; 181 } 182 } 183 } 184 } 185 ImageDestroy($src_img); 186 ImageInterlace($dst_img,0); 187 188 // obligatoire d'enregistrer dans le meme format, puisqu'on change le doc 189 // mais pas son id_type 190 $save($dst_img,$dest); 191 } 192 193 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Wed Nov 21 10:20:27 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |