Passer l'image en niveaux de gris // Syntaxe d'appel : "&grayscale" $grayscale = 0; if ( isset($_GET["grayscale"]) ) $grayscale = 1; // WATERMARK => Mettre un texte en travers // Syntaxe d'appel : "&watermark=watermark.jpg|watermark_dissolve|watermark_gravity|watermark_tile", exemple : "&watermark=watermark.jpg|25|center|0" ou "&watermark=watermark.jpg" // watermark_file : fichiers PNG utilisé comme filigranne, doit être en noir ou foncé, en PNG transparent, à mettre dans le dossier /library/image/ // watermark_dissolve : % de transparence de 0 à 100 // watermark_gravity : centrage du watermark, "center" par défaut, valeurs autorisées : NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast // watermark_tile : repeat du motif, 0 par défaut, valeurs autorisées : 0 ou 1 $watermark = 0; if ( isset($_GET['watermark']) ) { // Watermark $watermark = 1; // Valeurs par défaut $watermark_dissolve=25; $watermark_gravity="center"; $watermark_tile=0; // Remplacement des valeurs par défaut $arr=explode('|',$_GET["watermark"]); if ($arr[0]!="") $watermark_file = $arr[0]; if ($arr[1]!="") $watermark_dissolve = $arr[1]; if ($arr[2]!="") $watermark_gravity = $arr[2]; if ($arr[3] == 1 ) { $watermark_tile = 1; $watermark_gravity = NULL; } if ($arr[4]==1) $watermark_fit = 1; } // ROUNDED CORNER => Coins arrondis // Syntaxe d'appel : "&rounded=rX|rY", exemple : "&rounded=50|50" $rounded = 0; if ( isset($_GET["rounded"]) ) { $rounded = 1; $arr=explode('|',$_GET["rounded"]); $hR = $arr[0]; // Rayon suivant l'axe X $vR = $arr[1]; // Rayon suivant l'axe Y $_GET["f"] = "png"; // On force le PNG pour avoir de la transparence } // ********************************************************************************************************* $src = $_GET['src']; if ( !preg_match('/http:\/\//',$src) ) { $src = $_SERVER["DOCUMENT_ROOT"]."/".preg_replace('/^\//','',$src); // Si c'est une photo locale, on essaie de charger la vignette si elle existe if ( file_exists( str_replace('.jpg','-thumb.jpg',$src) ) && $rW <= 320 && $rH <= 240 ) $src=str_replace('.jpg/','-thumb.jpg',$src); } else { // Si c'est une photo distante, on peut interdire l'utilisation du php -> décommenter la ligne suivante // if (!preg_match('/'.$_SERVER['HTTP_HOST'].'/',$src)) exit; } if ( !isset($_GET['f']) ) { $imgsize=getimagesize($src); $type=$imgsize[2]; switch ($imgsize[2]) { case "1": $_GET['f'] = "gif"; break; case "2": $_GET['f'] = "jpg"; break; case "3": $_GET['f'] = "png"; break; case "6": $_GET['f'] = "bmp"; break; default: $_GET['f'] = "png"; break; } } // GESTION DU CACHE - La photo demandée existe-t-elle en cache ? $new=md5($_SERVER["QUERY_STRING"]).".".strtolower($_GET["f"]); $temp=$dossier_cache."/".$new; // Adresse du fichier dans le cache if ( $cache != 0 ) { if ( file_exists($temp) ) { $nb_jours = 30; // On utilise les images de - de $nb_jours jours if ( filectime($temp) > ( time() - $nb_jours*3600*24 ) ) { switch ( $_GET['f'] ) { case 'gif' : header("Content-type: image/gif"); break; case 'png' : header("Content-type: image/png"); break; default: header("Content-type: image/jpeg"); break; } // Gérer la durée du cache // header("Content-type: image/png"); readfile($temp); exit; } } } // On fait le traitement sur l'image et on calcule la taille de l'image finale if ( !$imgsize = @getimagesize($src) ) { exit; } else { $fW = $imgsize[0]; $fH = $imgsize[1]; $fType = $imgsize[2]; // Type de l'image : 1 = GIF , 2 = JPG , 3 = PNG , 4 = SWF , 5 = PSD , 6 = BMP , 7 = TIFF (Ordre des octets Intel), 8 = TIFF (Ordre des octets Motorola), 9 = JPC , 10 = JP2 , 11 = JPX , 12 = JB2 , 13 = SWC , 14 = IFF $ratio = $fW/$fH; } // print_r($imgsize); if ( $zc == 1) { // CROP $nH = $rH; $nW = floor( $nH * $fW / $fH ); if ( $nW < $rW) { $nW = $rW; $nH = floor( $nW * $fH / $fW ); } } else { // Pas de CROP if ( $rW == "auto" && $rH == "auto" ) { $nW = $fW; $nH = $fH; } else { // Calcul de la nouvelle taille if ($rW == "auto") { // On se base sur la hauteur $nH = $rH; $nW = floor( $nH * $fW / $fH ); } if ($rH == "auto") { // On se base sur la largeur $nW = $rW; $nH = floor( $nW * $fH / $fW ); } if ($rW != "auto" && $rH != "auto") { // On commence par se baser sur la largeur $nW = $rW; $nH = floor( $nW * $fH / $fW ); if ( $nH > $rH) { $nH = $rH; $nW = floor( $nH * $fW / $fH ); } } } // Allow enlargment if ( $aoe != 1 ) { if ( $nW > $fW ) { // Pas de modification $nW = $fW; $nH = floor( $nW * $fH / $fW ); } if ( $nH > $fH ) { // Pas de modification $nH = $fH; $nW = floor( $nH * $fW / $fH ); } } } // Déclaration du type MIME pour la sortie switch ( $_GET['f'] ) { case 'gif' : header("Content-type: image/gif"); break; case 'png' : header("Content-type: image/png"); break; default: header("Content-type: image/jpeg"); break; } // Redimensionnement des images $commande = "/usr/bin/convert ".$src." -alpha set -resize ".$nW."x".$nH; if ( $zc == 1 ) $commande .= " -gravity center -crop ".$rW."x".$rH."+0+0"; $commande .= " ".$temp; exec($commande); // FILTRES ********************************************************************************* // WATERMARK => Marque en filigranne if ( $watermark == 1 ) { $commande="/usr/bin/convert ".$watermark_file." miff:- | composite -dissolve ".$watermark_dissolve."%"; if ($watermark_fit==1) { $commande="/usr/bin/convert ".$watermark_file." -resize ".($nW-10)."x".($nH-10)." miff:- | composite -dissolve ".$watermark_dissolve."%"; } if ($watermark_tile==1) $commande.=" -tile "; if ($watermark_gravity!="") $commande.=" -gravity ".$watermark_gravity; $commande.=" - ".$temp." ".$temp; exec($commande); } // GRAYSCALE => Passer l'image en niveaux de gris if ( $grayscale == 1 ) { $commande="/usr/bin/convert ".$temp." -colorspace Gray ".$temp; exec($commande); } // ROUNDED CORNER => Coins arrondis if ( $rounded == 1 ) { $mask=$dossier_cache."/mask-".$new; @unlink($mask); if ( $zc == 1 ) { // Masque $commande="/usr/bin/convert -size ".$rW."x".$rH." xc:none -draw 'fill black ellipse ".$hR.",".$vR." ".$hR.",".$vR." 0,360' -draw 'fill black ellipse ".($rW-$hR-1).",".$vR." ".$hR.",".$vR." 0,360' -draw 'fill black ellipse ".$hR.",".($rH-$vR-1)." ".$hR.",".$vR." 0,360' -draw 'fill black ellipse ".($rW-$hR-1).",".($rH-$vR-1)." ".$hR.",".$vR." 0,360' -draw 'fill black rectangle ".$hR.",0 ".($rW-$hR-1).",".($rH-1)."' -draw 'fill black rectangle 0,".$vR." ".$rW.",".($rH-$vR-1)."' ".$mask; // Cas d'un cercle if ($hR==floor($rW/2) && $vR==floor($rH/2)) { $commande="/usr/bin/convert -size ".$rW."x".$rH." xc:none -draw 'fill black circle ".($hR-1).",".($vR-1)." 0,".$vR."' ".$mask; } exec($commande); // Fusion pour obtenir l'image temp $commande="/usr/bin/convert ".$temp." -alpha set -resize ".$nW."x".$nH." -gravity center -crop ".$rW."x".$rH."+0+0 ".$mask." -compose dst-in -composite ".$temp; $commande="/usr/bin/convert ".$temp." -alpha set -resize ".$nW."x".$nH." -gravity center ".$mask." -compose dst-in -composite ".$temp; exec($commande); } else { // Masque $commande="/usr/bin/convert -size ".$nW."x".$nH." xc:none -draw 'fill black ellipse ".$hR.",".$vR." ".$hR.",".$vR." 0,360' -draw 'fill black ellipse ".($nW-$hR-1).",".$vR." ".$hR.",".$vR." 0,360' -draw 'fill black ellipse ".$hR.",".($nH-$vR-1)." ".$hR.",".$vR." 0,360' -draw 'fill black ellipse ".($nW-$hR-1).",".($nH-$vR-1)." ".$hR.",".$vR." 0,360' -draw 'fill black rectangle ".$hR.",0 ".($nW-$hR-1).",".($nH-1)."' -draw 'fill black rectangle 0,".$vR." ".$nW.",".($nH-$vR-1)."' ".$mask; // die($commande); if ($nW==floor($rW/2) && $nH==floor($rH/2)) { $commande="/usr/bin/convert -size ".$nW."x".$nH." xc:none -draw 'fill black circle ".($hR-1).",".($vR-1)." 0,".$vR."' ".$mask; } exec($commande); // Fusion pour obtenir l'image temp $commande="/usr/bin/convert ".$temp." -alpha set -resize ".$nW."x".$nH." ".$mask." -compose dst-in -composite ".$temp; exec($commande); } @unlink($mask); } // Affichage readfile($temp); exit; } ?>