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 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
| // --------------------------------------------------------------------------------------------------
// fonction de REDIMENSIONNEMENT physique "CROP CENTRE" et Enregistrement
// --------------------------------------------------------------------------------------------------
// retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false)
// --------------------------------------------------------------------------------------------------
// La FONCTION : fct_crop_image($Wfin, $Hfin, $rep_Dst, $img_Dst, $rep_Src, $img_Src)
// Les parametres :
// - $Wfin : LARGEUR finale --> ou 0
// - $Hfin : HAUTEUR finale --> ou 0
// - $rep_Dst : repertoire de l image de Destination (deprotégé) --> ou ''
// il faut s'assurer que les droits en écriture ont été donnés au dossier (chmod ou via logiciel FTP)
// - $img_Dst : NOM de l image de Destination ----> ou ''
// - $rep_Src : repertoire de l image Source (deprotégé)
// - $img_Src : NOM de l image Source
// --------------------------------------------------------------------------------------------------
// 4 options :
// A- si $Wfin != 0 et $Hfin != 0 : crop aux dimensions indiquees
// B- si $Wfin = 0 et $Hfin != 0 : crop en HAUTEUR (meme largeur que la source)
// C- si $Wfin != 0 et $Hfin = 0 : crop en LARGEUR (meme hauteur que la source)
// D- si $Wfin = 0 et $Hfin = 0 : (cas special) crop "carre" a la plus petite dimension de l image source
// --------------------------------------------------------------------------------------------------
// - si $rep_Dst = '' : $rep_Dst=$rep_Src (meme repertoire que le repertoire Source)
// - si $img_Dst = '' : $img_Dst=$img_Src (meme nom que l image Source)
// - si $rep_Dst='' ET $img_Dst='' : on ecrase (remplace) l image source ($img_Src) !
// --------------------------------------------------------------------------------------------------
// NB : $img_Dst et $img_Src doivent avoir la meme extension (meme type mime) !
// Extensions acceptees (traitees ici) : .jpg , .jpeg , .png
// Pour ajouter d autres extensions : voir la bibliotheque GD ou ImageMagick
// (GD) NE FONCTIONNE PAS avec les GIF ANIMES ou a fond transparent !
// --------------------------------------------------------------------------------------------------
// UTILISATION (exemple) :
// $cropOK = fct_crop_image(120,80,'reppicto/','monpicto.jpg','repimage/','monimage.jpg');
// if ($cropOK == 1) { echo 'Crop centré OK !'; }
// --------------------------------------------------------------------------------------------------
function fct_crop_image($Wfin, $Hfin, $rep_Dst, $img_Dst, $rep_Src, $img_Src) {
// ------------------------------------------------------------------
$condition = 0;
// Si certains parametres ont pour valeur '' :
if ($rep_Dst == '') { $rep_Dst = $rep_Src; } // (meme repertoire)
if ($img_Dst == '') { $img_Dst = $img_Src; } // (meme nom)
if ($Wfin == '') { $Wfin = 0; }
if ($Hfin == '') { $Hfin = 0; }
// ------------------------------------------------------------------
// si le fichier existe dans le répertoire, on continue...
if (file_exists($rep_Src.$img_Src)) {
// ----------------------------------------------------------------
// extensions acceptees :
$ExtfichierOK = '" jpg jpeg png"'; // (l espace avant jpg est important)
// extension fichier Source
$tabimage = explode('.',$img_Src);
$extension = $tabimage[sizeof($tabimage)-1]; // dernier element
$extension = strtolower($extension); // on met en minuscule
// ----------------------------------------------------------------
// extension OK ? on continue ...
if (strpos($ExtfichierOK,$extension) != '') {
// -------------------------------------------------------------
$condition = 1;
// -------------------------------------------------------------
// recuperation des dimensions de l image Source
$size = getimagesize($rep_Src.$img_Src);
$W_Src = $size[0]; // largeur
$H_Src = $size[1]; // hauteur
// -------------------------------------------------------------
// condition de crop et dimensions de l image finale
// -------------------------------------------------------------
// A- crop aux dimensions indiquees
if ($Wfin != 0 && $Hfin != 0) {
$W = $Wfin;
$H = $Hfin;
}
// -------------------------------------------------------------
// B- crop en HAUTEUR (meme largeur que la source)
if ($Wfin == 0 && $Hfin != 0) {
$H = $Hfin;
$W = $W_Src;
}
// -------------------------------------------------------------
// C- crop en LARGEUR (meme hauteur que la source)
if ($Wfin != 0 && $Hfin == 0) {
$W = $Wfin;
$H = $H_Src;
}
// D- (cas special) crop "carre" a la plus petite dimension de l image source
if ($Wfin == 0 && $Hfin == 0) {
if ($W_Src >= $H_Src) {
$W = $H_Src;
$H = $H_Src;
} else {
$W = $W_Src;
$H = $W_Src;
}
}
// -------------------------------------------------------------
// creation de la ressource-image"Src" en fonction de l extension
switch($extension) {
case 'jpg':
case 'jpeg':
$Ress_Src = imagecreatefromjpeg($rep_Src.$img_Src);
break;
case 'png':
$Ress_Src = imagecreatefrompng($rep_Src.$img_Src);
break;
}
// ----------------------------------------------------------
// creation d une ressource-image"Dst" aux dimensions finales
// fond noir (par defaut)
switch($extension) {
case 'jpg':
case 'jpeg':
$Ress_Dst = ImageCreateTrueColor($W,$H);
// fond blanc
$blanc = imagecolorallocate ($Ress_Dst, 255, 255, 255);
imagefill ($Ress_Dst, 0, 0, $blanc);
break;
case 'png':
$Ress_Dst = ImageCreateTrueColor($W,$H);
// fond transparent (pour les png avec transparence)
imagesavealpha($Ress_Dst, true);
$trans_color = imagecolorallocatealpha($Ress_Dst, 0, 0, 0, 127);
imagefill($Ress_Dst, 0, 0, $trans_color);
break;
}
// -------------------------------------------------------------
// CENTRAGE du crop
// coordonnees du point d origine Scr : $X_Src, $Y_Src
// coordonnees du point d origine Dst : $X_Dst, $Y_Dst
// dimensions de la portion copiee : $W_copy, $H_copy
// -------------------------------------------------------------
// CENTRAGE en largeur
if ($Wfin == 0) {
if ($Hfin == 0 && $W_Src<$H_Src) {
$X_Src = 0;
$X_Dst = 0;
$W_copy = $W_Src;
} else {
$X_Src = 0;
$X_Dst = ($W - $W_Src) /2;
$W_copy = $W_Src;
}
} else {
if ($W_Src > $W) {
$X_Src = ($W_Src - $W) /2;
$X_Dst = 0;
$W_copy = $W;
} else {
$X_Src = 0;
$X_Dst = ($W - $W_Src) /2;
$W_copy = $W_Src;
}
}
// -------------------------------------------------------------
// CENTRAGE en hauteur
if ($Hfin == 0) {
if ($Wfin == 0 && $H_Src<$W_Src) {
$Y_Src = 0;
$Y_Dst = 0;
$H_copy = $H_Src;
} else {
$Y_Src = 0;
$Y_Dst = ($H - $H_Src) /2;
$H_copy = $H_Src;
}
} else {
if ($H_Src > $H) {
$Y_Src = ($H_Src - $H) /2;
$Y_Dst = 0;
$H_copy = $H;
} else {
$Y_Src = 0;
$Y_Dst = ($H - $H_Src) /2;
$H_copy = $H_Src;
}
}
// -------------------------------------------------------------
// CROP par copie de la portion d image selectionnee
imagecopyresampled
($Ress_Dst, $Ress_Src, $X_Dst, $Y_Dst, $X_Src, $Y_Src, $W_copy, $H_copy, $W_copy, $H_copy);
// ----------------------------------------------------------
// ENREGISTREMENT dans le repertoire (avec la fonction appropriee)
switch ($extension) {
case 'jpg':
case 'jpeg':
ImageJpeg ($Ress_Dst, $rep_Dst.$img_Dst,100);
break;
case 'png':
imagepng ($Ress_Dst, $rep_Dst.$img_Dst);
break;
}
// ----------------------------------------------------------
// liberation des ressources-image
imagedestroy ($Ress_Src);
imagedestroy ($Ress_Dst);
}
// -------------------------------------------------------------
}
// --------------------------------------------------------------------------------------------------
// retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false)
// si le fichier a bien ete cree
if ($condition == 1 && file_exists($rep_Dst.$img_Dst)) { return true; }
else { return false; }
} |
Partager