1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
| function fctredimimage($W_max, $H_max, $rep_Dst, $img_Dst, $rep_Src, $img_Src, $extension_Src)
{
//Suppose une image valide. Si l'image n'est pas redimensionnée, elle est simplement optimisée pour le web avec une qualité de 90
$condition = 0;
// Si certains paramètres ont pour valeur '' :
if ($rep_Dst=='') { $rep_Dst = $rep_Src; } // (même répertoire)
if ($img_Dst=='') { $img_Dst = $img_Src; } // (même nom)
$ext_redim = array('jpg','jpeg','png','gif');
if(!in_array($extension_Src,$ext_redim)) return false;
// ---------------------
// récupération des dimensions de l'image Src
$img_size = @getimagesize($rep_Src.$img_Src);
$W_Src = $img_size[0]; // largeur
$H_Src = $img_size[1]; // hauteur
if(empty($W_Src) || empty($H_Src)) return false;
// ------------------------
// condition de redimensionnement et dimensions de l'image finale
// ------------------------
// A- LARGEUR ET HAUTEUR maxi fixes
if ($W_max!=0 && $H_max!=0)
{
$ratiox = $W_Src / $W_max; // ratio en largeur
$ratioy = $H_Src / $H_max; // ratio en hauteur
$ratio = max($ratiox,$ratioy); // le plus grand
$W = $W_Src/$ratio;
$H = $H_Src/$ratio;
$condition = ($W_Src > $W) || ($H_Src > $H); // 1 si vrai (true)
}
else // B- HAUTEUR maxi fixe
if ($W_max==0 && $H_max!=0)
{
$H = $H_max;
$W = $H * ($W_Src / $H_Src);
$condition = ($H_Src > $H_max); // 1 si vrai (true)
}
else // C- LARGEUR maxi fixe
if ($W_max!=0 && $H_max==0)
{
$W = $W_max;
$H = $W * ($H_Src / $W_Src);
$condition = ($W_Src > $W_max); // 1 si vrai (true)
}
switch($extension_Src)
{
case 'jpg':
case 'jpeg': $Ress_Src = @imagecreatefromjpeg($rep_Src.$img_Src); break;
case 'png': $Ress_Src = @imagecreatefrompng($rep_Src.$img_Src); break;
case 'gif': $Ress_Src = @imagecreatefromgif($rep_Src.$img_Src); break;
default : $Ress_Src = null;
}
if(!is_resource($Ress_Src)) return false;
// ---------------------------------------------
// REDIMENSIONNEMENT si la condition est vraie
// ---------------------------------------------
// - Si l'image Source est plus petite que les dimensions indiquées :
// Par defaut : PAS de redimensionnement mais optimisation pour le web
// On peut "forcer" le redimensionnement pour agrandissement en ajoutant ici :
// $condition = 1; (risque de perte de qualité)
// creation de la ressource-image "Src" en fonction de l extension
if ($condition == 1)
{
// creation d une ressource-image "Dst" aux dimensions finales
// fond noir (par defaut)
switch($extension_Src)
{
case 'gif':
case 'jpg':
case 'jpeg': $Ress_Dst = @imagecreatetruecolor(round($W),round($H));
if(!is_resource($Ress_Dst)) return false;
break;
case 'png': $Ress_Dst = @imagecreatetruecolor(round($W),round($H));
if(!is_resource($Ress_Dst)) return false;
// fond transparent (pour les png avec transparence)
imagealphablending($Ress_Dst, false);
imagesavealpha($Ress_Dst, true);
$trans_color = @imagecolorallocatealpha($Ress_Dst, 0, 0, 0, 127);
@imagefill($Ress_Dst, 0, 0, $trans_color);
break;
default : $Ress_Dst = null;
}
// REDIMENSIONNEMENT (copie, redimensionne, re-echantillonne)
$redim = @imagecopyresampled($Ress_Dst, $Ress_Src, 0, 0, 0, 0, round($W), round($H), round($W_Src), round($H_Src));
if ($redim == false) return false;
}
else
{
$Ress_Dst = $Ress_Src;
}
// ENREGISTREMENT dans le repertoire (avec la fonction appropriee)
switch ($extension_Src)
{
case 'jpg':
case 'jpeg': $image = @imagejpeg ($Ress_Dst, $rep_Dst.$img_Dst, 90); break;
case 'png': $image = @imagepng ($Ress_Dst, $rep_Dst.$img_Dst,1); break;
case "gif" : $image = @imagegif($Ress_Dst, $rep_Dst.$img_Dst); break;
default : $image = false;
}
if ($image == false) return false;
// ------------------------
// liberation des ressources-image
@imagedestroy ($Ress_Src);
@imagedestroy ($Ress_Dst);
return true;
} |
Partager