FONCTIONS
de redimensionnement d'images
tous les tutos
télécharger l'archive .ZIP
Avant-propos A l'affichage Proportionnel Non-proportionnel Crop centré Signature Avec base de données
Avant-propos
Quand on parle de "redimensionnement" d'image, il faut distinguer :

1- redimensionnement "à l'affichage" :
ou comment afficher ses images à la taille d'affichage voulue ?
L'image elle-même n'est pas modifiée, seules ses dimensions d'affichage sont "recalculées".
- fonction fctaffichimage() : redimensionner des images "à l'affichage"

2- redimensionnement "physique" :
modification du "poids" de l'image (nouvelle image aux dimensions spécifiées),
- fonction fctredimimage() : L'image finale est redimensionnée "en proportions".
- fonction fctdeformimage() : L'image finale est redimensionnée "sans proportions" (déformée).
- fonction fctcropimage() : L'image finale est "coupée" ("crop centré").

3- Signature : (un petit "plus" !)
- fonction fcttexteimage() : Ajouter un texte sur l'image

NB : On peut regrouper toutes ces fonctions dans un seul fichier (fonctionsimage.php)
Traitement d'image (PHP) : bibliothèque GD - bibliothèque ImageMagick

Les formats traités ici : .jpg , .jpeg , .png

Autres formats :
- images .gif
Il semble que GD ne traite pas les gifs animés ou à fond transparent.
- images .bmp
Une solution consiste à convertir d'abord l'image en .png (ou en .wbmp)
voir bmp2png / png2bmp - imagecreatefromwbmp
Redimensionnement "à l'affichage"
Pour changer la taille d'affichage d'une image en HTML, on utilise les options width et height de la balise <img /> :
<img alt="" src="monimage.jpg" width="120" height="100" />

Et pour redimensionner l'image en gardant les proportions de départ, il suffit de ne préciser qu'un seul des deux paramètres, le navigateur se chargeant de calculer le deuxième :
<img alt="" src="monimage.jpg" width="120" />
ou
<img alt="" src="monimage.jpg" height="100" />

Mais pour que l'image tienne au mieux dans une zone de W_max sur H_max pixels, HTML ne suffit plus ...
Il faut "calculer" les dimensions optimales.
L'image source n'est pas modifiée, seules ses dimensions d'affichage sont "recalculées".
La fonction :
fctaffichimage($img_Src, $W_max, $H_max)
La fonction affiche : src="..." width="..." height="..." pour la balise <img ... />
Les paramètres
- $img_Src : URL (chemin + NOM) de l'image Source
- $W_max : LARGEUR maxi d'affichage --> ou 0
- $H_max : HAUTEUR maxi d'affichage --> ou 0

- si l'image est plus petite que la zone --> on conserve les dimensions de l'image source
- si $W_max ET $H_max non définis --> on conserve les dimensions de l'image source
- si $W_max = 0 --> LARGEUR auto (libre)
- si $H_max = 0 --> HAUTEUR auto (libre)
- sinon : on adapte les dimensions
Utilisation : Redimensionnement "a l'affichage"
<?php
   include("fctaffichimage.php")// ("a l affichage")
// --------------------------------------------------------------------------------------
?>

<img alt="" <?php fctaffichimage('repimg/monimage.jpg', 120, 100) ?> />
case 120 x 100
case 120 x 100
Redimensionnement physique "proportionnel"
La fonction :
fctredimimage ($W_max, $H_max, $rep_Dst, $img_Dst, $rep_Src, $img_Src)
Redimensionnement physique "proportionnel"
(les proportions de l'image sont conservées)
3 options
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
- $H_max : HAUTEUR maxi finale --> ou 0
- $rep_Dst : répertoire de l'image de destination (déprotégé) --> ou ''
- $img_Dst : NOM de l'image de destination --> ou ''
- $rep_Src : répertoire de l'image source (déprotégé)
- $img_Src : NOM de l'image source
Les 3 options
A- si $W_max != 0 et $H_max != 0 --> à LARGEUR maxi ET HAUTEUR maxi fixes
B- si $H_max != 0 et $W_max == 0 --> à HAUTEUR maxi fixe (largeur auto)
C- si $W_max == 0 et $H_max != 0 --> à LARGEUR maxi fixe (hauteur auto)
NB :
$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 (même répertoire que l'image Source)
- si $img_Dst = '' --> $img_Dst = $img_Src (même nom que l'image Source)
- si $rep_Dst='' ET $img_Dst='' --> on écrase (remplace) 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) !
Pour ajouter d'autres extensions : voir bibliothèque GD - bibliothèque ImageMagick
Utilisation : Redimensionnement "physique proportionnel"
<?php
   include("fctredimimage.php");
// --------------------------------------------------------------------------------------
$redimOK = fctredimimage(120,80,'reppicto/','monpicto.jpg','repimage/','monimage.jpg');
if ($redimOK == true) { echo 'Redimensionnement OK !'; }
?>
case 120 x 80
case 120 x 80
Redimensionnement physique "non-proportionnel"
La fonction :
fctdeformimage ($W_fin, $H_fin, $rep_Dst, $img_Dst, $rep_Src, $img_Src)
Redimensionnement physique "non-proportionnel"
(les proportions de l'image NE sont PAS conservées : elle sera donc déformée)
3 options
A- "normal" : image finale à HAUTEUR ET LARGEUR fixes.
B- "hauteur" : image finale à HAUTEUR fixe (largeur de la source)
C- "largeur" : image finale à LARGEUR fixe (hauteur de la source)
NB :
Dans TOUS les cas : redimensionnement non-proportionnel de l'image.
Retourne la valeur :
- true si le redimensionnement et l enregistrement ont bien eu lieu,
- sinon false
Les paramètres :
- $W_fin : LARGEUR finale --> ou 0
- $H_fin : HAUTEUR finale --> ou 0
- $rep_Dst : répertoire de l'image de destination (déprotégé) --> ou ''
- $img_Dst : NOM de l'image de destination --> ou ''
- $rep_Src : répertoire de l'image source (déprotégé)
- $img_Src : NOM de l'image source
Les 3 options
A- si $W_fin != 0 et $H_fin != 0 --> à LARGEUR ET HAUTEUR fixes
B- si $H_fin != 0 et $W_fin == 0 --> à HAUTEUR fixe (largeur de la source)
C- si $W_fin == 0 et $H_fin != 0 --> à LARGEUR fixe (hauteur de la source)
NB :
$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 (même répertoire que l'image Source)
- si $img_Dst = '' --> $img_Dst = $img_Src (même nom que l'image Source)
- si $rep_Dst='' ET $img_Dst='' --> on écrase (remplace) 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) !
Pour ajouter d'autres extensions : voir bibliothèque GD - bibliothèque ImageMagick
Utilisation : Redimensionnement "physique non-proportionnel"
<?php
   include("fctdeformimage.php")// (redimensionnement "physique non-proportionnel")
// --------------------------------------------------------------------------------------
$deformOK = fctdeformimage(120,80,'reppicto/','monpicto.jpg','repimage/','monimage.jpg');
if ($deformOK == true) { echo 'Redimensionnement OK !'; }
?>
case 120 x 80
case 120 x 80
Redimensionnement physique "crop centré"
La fonction :
fctcropimage ($W_fin, $H_fin, $rep_Dst, $img_Dst, $rep_Src, $img_Src)
Redimensionnement physique "crop centré" (l'image est "coupée" aux dimensions voulues)
4 options
A- "normal" : crop "centré" aux dimensions indiquées
B- "hauteur" : crop "centré" de la hauteur indiquée (même largeur que la source)
C- "largeur" : crop "centré" de la largeur indiquée (même hauteur que la source)
D- "cas spécial" : crop "carré" à la plus petite dimension de l'image source
Retourne la valeur :
- true si le redimensionnement et l enregistrement ont bien eu lieu,
- sinon false
Les paramètres :
- $W_fin : LARGEUR finale --> ou 0
- $H_fin : HAUTEUR finale --> ou 0
- $rep_Dst : répertoire de l'image de destination (déprotégé) --> ou ''
- $img_Dst : NOM de l'image de destination --> ou ''
- $rep_Src : répertoire de l'image source (déprotégé)
- $img_Src : NOM de l'image source
Les 4 options
A- si $W_fin != 0 et $H_fin != 0 --> crop aux dimensions indiquées
B- si $W_fin == 0 et $H_fin != 0 --> crop en HAUTEUR (même largeur que la source)
C- si $W_fin != 0 et $H_fin == 0 --> crop en LARGEUR (même hauteur que la source)
D- si $W_fin == 0 et $H_fin == 0 --> crop "carré" à la plus petite dimension de l'image source
NB :
$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 (même répertoire)
- si $img_Dst = '' --> $img_Dst = $img_Src (même nom)
- si $rep_Dst='' ET $img_Dst='' --> on écrase (remplace) 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) !
Pour ajouter d'autres extensions : voir bibliothèque GD - bibliothèque ImageMagick
Utilisation : Redimensionnement physique "crop centré"
<?php
   include("fctcropimage.php")// ("crop centre")
// ---------------------------------------------------------------------------------------
$cropOK = fctcropimage(120,80,'reppicto/','monpicto.jpg','repimage/','monimage.jpg');
if ($cropOK == true) { echo 'Crop centré OK !'; }
?>
crop 120 x 80
crop 120 x 80
ASTUCE : Picto toujours bien carré
(ex. 100 x 100 pixels) --> Crop "carré", puis "proportionnel"
<?php
   include("fctcropimage.php")// ("crop centre")
   include("fctredimimage.php")// ("proportionnel")
// ---------------------------------------------------------------------------------------
// (crop "carré" à la plus petite dimension de l'image source, puis redimensionnement proportionnel)
$redim = fctcropimage(0,0,$repDest,$imageDest,$repSource,$imageSource);
$redim = fctredimimage(100,0,'','',$repDest,$imageDest);
if ($redim == true) { echo 'picto carré créé !'; }
?>
Signature de l'image
La fonction :
fcttexteimage ($chaine, $rep_Dst, $img_Dst, $rep_Src, $img_Src, $position)
"Signature" de l'image (ajout d'un texte à l'image : copyright, date, ou légende de l'image)
Un petit "plus" !
Retourne la valeur :
- true si le texte a bien été ajouté,
- sinon false
Les paramètres :
- $chaine : TEXTE à ajouter
- $rep_Dst : répertoire de l'image de Destination (deprotégé) --> ou '' (même répertoire)
- $img_Dst : NOM de l image de Destination --> ou '' (même nom que l'image Source)
- $rep_Src : répertoire de l'image Source (déprotégé)
- $img_Src : NOM de l'image Source
- $position : position du texte sur l'image
NB :
ATTENTION : si le texte est TROP long, il risque d'être tronqué !
(Privilégiez donc les textes courts)
Positionnement du texte sur l'image (valeurs possibles) :
- $position = 'HG' --> en Haut à Gauche (valeur par défaut)
- $position = 'HD' --> en Hautà à Droite
- $position = 'HC' --> en Haut au Centre
- $position = 'BG' --> en Bas à Gauche
- $position = 'BD' --> en Bas à Droite
- $position = 'BC' --> en Bas au Centre
NB :
$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 (même répertoire)
- si $img_Dst = '' --> $img_Dst = $img_Src (même nom)
- si $rep_Dst='' ET $img_Dst='' --> on écrase (remplace) 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) !
Pour ajouter d'autres extensions : voir bibliothèque GD - bibliothèque ImageMagick
Utilisation (copyright, date, ou légende de l'image) :
<?php
   include("fcttexteimage.php")// ("signature")
// ---------------------------------------------------------------------------------------
   $texteOK = fcttexteimage('copyright : MOI','reppicto/','monpicto.jpg','repimage/','monimage.jpg','BG');
   if ($texteOK == true) { echo 'Ajout du texte OK !';  }
?>
HG : en Haut à Gauche
HD : en Haut à Droite
BG : en Bas à Gauche
BD : en Bas à Droite
HC : en Haut au Centre
BC : en Bas au Centre
Avant-propos A l'affichage Proportionnel Non-proportionnel Crop centré Signature Avec base de données
2009 - Jérôme Réaux - open source