Navigation

Toutes les catégories

Voir les derniers articles

PHP – Fonction de redimensionnement d’images

La fonction ci-après permet de redimensionner correctement une image (les proportions de l’image sont conservées), en lui précisant la hauteur ou largeur max et les...

La fonction ci-après permet de redimensionner correctement une image (les proportions de l’image sont conservées), en lui précisant la hauteur ou largeur max et les répertoires de destination.

fctredimimage ($W_max, $H_max, $rep_Dst, $img_Dst, $rep_Src, $img_Src) ;

3 cas d’utilisations possibles :

A- « normal » : image finale à HAUTEUR ET LARGEUR maxi fixes.
B- « hauteur » : image finale à HAUTEUR maxi fixe (largeur auto)
C- « largeur » : image finale à LARGEUR maxi fixe (hauteur auto)
NB :
Si l’image Source est plus petite que les dimensions indiquées : PAS de redimensionnement.
Mais on peut « forcer » le redimensionnement en ajoutant : $condition = 1 ; (voir le code)

Retourne la valeur :
true si le redimensionnement et l enregistrement ont bien eu lieu,
– sinon false

Les paramètres :
$W_max : LARGEUR maxi finale –> ou 0 (zero) si libre
$H_max : HAUTEUR maxi finale –> ou 0 (zero) si libre
$rep_Dst : répertoire de l’image de destination (déprotégé) –> ou  » (double quote vide)
$img_Dst : NOM de l’image de destination –> ou  » (double quote vide)
$rep_Src : répertoire de l’image source (déprotégé)
$img_Src : NOM de l’image source

Extensions :
– acceptées (traitées ici) : .jpg , .jpeg , .png
– $img_Dst et $img_Src doivent avoir la même extension (même type mime) !

La bête :

[php]// ————————-
// fonction de REDIMENSIONNEMENT physique "PROPORTIONNEL" et Enregistrement
// ————————
// retourne : true si le redimensionnement et l enregistrement ont bien eu lieu, sinon false
// ———————–
// La FONCTION : fctredimimage ($W_max, $H_max, $rep_Dst, $img_Dst, $rep_Src, $img_Src)
// Les parametres :
// – $W_max : LARGEUR maxi finale –&amp ;amp ;gt ; ou 0
// – $H_max : HAUTEUR maxi finale –&amp ;amp ;gt ; ou 0
// – $rep_Dst : repertoire de l image de Destination (deprotégé) –&amp ;amp ;gt ; ou  » (meme repertoire)
// – $img_Dst : NOM de l image de Destination –&amp ;amp ;gt ; 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_max != 0 et $H_max != 0 : a LARGEUR maxi ET HAUTEUR maxi fixes
// B- si $H_max != 0 et $W_max == 0 : image finale a HAUTEUR maxi fixe (largeur auto)
// C- si $W_max == 0 et $H_max != 0 : image finale a LARGEUR maxi fixe (hauteur auto)
// Si l’image Source est plus petite que les dimensions indiquees : PAS de redimensionnement.
// ———————
// $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) :
// $redimOK = fctredimimage(120,80,’reppicto/’,’monpicto.jpg’,’repimage/’
// ,’monimage.jpg’) ;
// if ($redimOK == true) { echo ‘Redimensionnement OK !’ ; }
// ——————
function fctredimimage($W_max, $H_max, $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)
// —————-
// si le fichier existe dans le répertoire, on continue…
if (file_exists($rep_Src.$img_Src) &amp ;amp ;amp ;&amp ;amp ;amp ; ($W_max !=0 || $H_max !=0)) {
// ————–
// 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) !=  ») {
// ———–
// 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
// ————–
// A- LARGEUR ET HAUTEUR maxi fixes
if ($W_max != 0 &amp ;amp ;amp ;&amp ;amp ;amp ; $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&amp ;amp ;gt ;$W) || ($W_Src&amp ;amp ;gt ;$H) ; // 1 si vrai (true)
}
// ————
// B- HAUTEUR maxi fixe
if ($W_max == 0 &amp ;amp ;amp ;&amp ;amp ;amp ; $H_max != 0) {
$H = $H_max ;
$W = $H * ($W_Src / $H_Src) ;
$condition = ($H_Src &amp ;amp ;gt ; $H_max) ; // 1 si vrai (true)
}
// ———-
// C- LARGEUR maxi fixe
if ($W_max != 0 &amp ;amp ;amp ;&amp ;amp ;amp ; $H_max == 0) {
$W = $W_max ;
$H = $W * ($H_Src / $W_Src) ;
$condition = ($W_Src &amp ;amp ;gt ; $W_max) ; // 1 si vrai (true)
}
// ————-
// REDIMENSIONNEMENT si la condition est vraie
// ————-
// Si l’image Source est plus petite que les dimensions indiquees :
// Par defaut : PAS de redimensionnement.
// Mais on peut "forcer" le redimensionnement en ajoutant ici :
// $condition = 1 ; (risque de perte de qualite)
// ————-
if ($condition == 1) {
// ———-
// 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) ;
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’ :
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 ($condition == 1 &amp ;amp ;amp ;&amp ;amp ;amp ; file_exists($rep_Dst.$img_Dst)) { return true ; }
else { return false ; }
}
// retourne : true si le redimensionnement et l enregistrement ont bien eu lieu, sinon false
// ———————–&lt ;code&gt ;[/php]

Source : ASP-PHP

Afficher les commentaires (2)

Commentaires

  • toto

    Belle source mais il faudrait mettre le liens vers la page du créateur … ça serait un minimun !

    • Romain

      Tu as raison, c’est l’époque où ce blog ne devait être que personnel et donc je ne citais aucune source. J’ai donc remédié à cela et ajouté la source de la news.

Newsletter WebActus

Abonnez-vous pour recevoir notre sélection des meilleurs articles directement dans votre boîte mail.

Nous ne partagerons pas votre adresse e-mail.

Articles similaires

Webmarketing

RGPD : Darine Fayed, Data Protection Officer, présente son rôle et ses missions

Parmi les grandes prérogatives qui accompagnent l’arrivée du RGPD, il y a la nomination du délégué à la protection des...

Publié le par Cyrielle Maurice
Webdesign

5 formations pour devenir webdesigner

Découvrez notre sélection de formations pour approfondir vos connaissances en tant que webdesigner, pour savoir comment élaborer l’identité...

Publié le par Alexandra Patard