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
|
<?php
// -----------------------------------------------------------------------------------------------------
// fonction de REDIMENSIONNEMENT physique "NON-PROPORTIONNEL" et Enregistrement
// -----------------------------------------------------------------------------------------------------
// retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false)
// -----------------------------------------------------------------------------------------------------
// La FONCTION : fctdeformimage ($W_fin, $H_fin, $rep_Dst, $img_Dst, $rep_Src, $img_Src)
// Les parametres :
// - $W_fin : LARGEUR finale --> ou 0
// - $H_fin : HAUTEUR finale --> ou 0
// - $rep_Dst : repertoire de l image de Destination (deprotégé) --> ou '' (meme repertoire)
// - $img_Dst : NOM de l image de Destination --> ou '' (meme nom que l image Source)
// - $rep_Src : repertoire de l image Source (deprotégé)
// - $img_Src : NOM de l image Source
// -----------------------------------------------------------------------------------------------------
// 3 options :
// A- si $W_fin != 0 et $H_fin != 0 : image finale a LARGEUR ET HAUTEUR fixes
// B- si $H_fin != 0 et $W_fin == 0 : image finale a HAUTEUR fixe (largeur auto)
// C- si $W_fin == 0 et $H_fin != 0 : image finale a LARGEUR fixe (hauteur auto)
// Dans TOUS les cas : redimensionnement non-proportionnel
// -----------------------------------------------------------------------------------------------------
// $rep_Dst : il faut s'assurer que les droits en écriture ont été donnés au dossier (chmod)
// - si $rep_Dst = '' : $rep_Dst = $rep_Src (meme repertoire que l image 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 !
// -----------------------------------------------------------------------------------------------------
// 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) :
// $deformOK = fctredimimage(120,80,'reppicto/','monpicto.jpg','repimage/','monimage.jpg');
// if ($deformOK == 1) { echo 'Redimensionnement OK !'; }
// -----------------------------------------------------------------------------------------------------
function fctdeformimage($W_fin, $H_fin, $rep_Dst, $img_Dst, $rep_Src, $img_Src) {
// ------------------------------------------------------------------
// Si certains parametres ont pour valeur '' :
if ($rep_Dst == '') { $rep_Dst = $rep_Src; } // (meme repertoire)
if ($img_Dst == '') { $img_Dst = $img_Src; } // (meme nom)
// ------------------------------------------------------------------
// si le fichier existe dans le répertoire, on continue...
if (file_exists($rep_Src.$img_Src) && ($W_fin!=0 || $H_fin!=0)) {
// ----------------------------------------------------------------
// extensions acceptees :
$ExtfichierOK = '" jpg jpeg png JPEG"'; // (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) != '') {
// -------------------------------------------------------------
// recuperation 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
// -------------------------------------------------------------
// condition de redimensionnement et dimensions de l image finale
// Dans TOUS les cas : redimensionnement non-proportionnel
// -------------------------------------------------------------
// A- LARGEUR ET HAUTEUR fixes
if ($W_fin != 0 && $H_fin != 0) {
$W = $W_Src;
$H = $H_Src;
}
// -------------------------------------------------------------
// B- HAUTEUR fixe
if ($W_fin == 0 && $H_fin != 0) {
$W = $W_Src;
$H = $H_fin;
}
// -------------------------------------------------------------
// C- LARGEUR fixe
if ($W_fin != 0 && $H_fin == 0) {
$W = $W_fin;
$H = $H_Src;
}
// -------------------------------------------------------------
// REDIMENSIONNEMENT
// ----------------------------------------------------------
// creation de la ressource-image "Src" en fonction de l extension
switch($extension) {
case 'jpg':
case 'JPEG':
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':
case 'jpeg':
$Ress_Dst = imagecreatetruecolor($W,$H);
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;
}
// ----------------------------------------------------------
// REDIMENSIONNEMENT (copie, redimensionne, re-echantillonne)
imagecopyresampled($Ress_Dst, $Ress_Src, 0, 0, 0, 0, $W, $H, $W_Src, $H_Src);
// ----------------------------------------------------------
// ENREGISTREMENT dans le repertoire (avec la fonction appropriee)
switch ($extension) {
case 'jpg':
case 'JPEG':
case 'jpeg':
imagejpeg ($Ress_Dst, $rep_Dst.$img_Dst);
break;
case 'png':
imagepng ($Ress_Dst, $rep_Dst.$img_Dst);
break;
}
// ----------------------------------------------------------
// liberation des ressources-image
imagedestroy ($Ress_Src);
imagedestroy ($Ress_Dst);
}
// -------------------------------------------------------------
}
// -----------------------------------------------------------------------------------------------------
// si le fichier a bien ete cree
if (file_exists($rep_Dst.$img_Dst)) { return true; }
else { return false; }
}
// retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false)
// -----------------------------------------------------------------------------------------------------
?> |
Partager