par
Cyrano » 15 janv. 2006, 12:51
Bon, un code vite fait et non testé, l'important, c'est que vous en suiviez le fonctionnement pour savoir quoi placer et où. Adaptez à votre propre code:
<?php
/**
* Traitement du chargement et du redimensionnement d'une image via un formulaire
*/
/* On commence par définir des paramètres */
/**
* On définit un répertoire de stockage temporaire de l'image envoyée (à créer)
*/
define("REP_TMP", "./images/tmp/");
/**
* Répertoire de destination
*/
define("REPERTOIRE_IMAGES", "./images/");
/**
* Hauteur maximum de la miniature
*/
define("HAUTEUR_MAXI", 200);
/**
* Largeur maximum de la miniature
*/
define("LARGEUR_MAXI", 175);
/**
* Taille maximum du fichier qu'un internaute peut envoyer (Exemple ici, 400Ko)
*/
define("TAILLE_MAX_IMG", 409600);
/* On définit ensuite des fonctions de traitement qui seront appelées par notre script */
/**
* Fonction de creation de vignette
*
* Cette fonction détermine le format de l'image originale pour créer une miniature pour la galerie.
*
* @return Boolean Vrai en cas de succès, Faux dans le cas contraire.
*/
function vignette($fichier)
{
/**************************************************************/
/* Création de la vignette pour affichage de plusieurs images */
/**************************************************************/
$image = $fichier['tmp_name'];
$info = pathinfo($image);
$extension = strtolower($info['extension']);
switch ($extension)
{
case "jpg": $imgSrc = imagecreatefromjpeg($image); break;
case "png": $imgSrc = imagecreatefrompng($image); break;
case "gif": $imgSrc = imagecreatefromgif($image); break;
default : $imgSrc = null; break;
}
if(isset($imgSrc))
{
/* Création de l'image miniature puis de l'image agrandie */
miniature($imgSrc, $extension);
$resultat = true;
}
else
{
/* Sinon, il ne s'agit pas d'un type d'image supporté par notre application */
$resultat = false;
}
return $resultat;
}
/**
* Fonction miniature()
*
* Cette fonction ré-échantillone l'image originale
* et définit des dimensions acceptables pour una page web
* par rapport à la hauteur et la largeur maxi fixées en paramètres.
*
* @param Array $imgSrc Tableau basé sur $_FILES['nom_champ_fichier']
* @param String $typeImage Chaîne de caractère, type de fichier image.
* @return Boolean Si la création de l'image s'est correctement déroulée, la fonction retourn TRUE, FALSE dans le cas contraire.
*/
function miniature($imgSrc, $typeImage)
{
$nomImage = $imgSrc['name'];
/* Quelle taille fait notre image ? */
$fichier = getimagesize($imgSrc['tmp_name']);
$largeurSrc = $fichier[0];
$hauteurSrc = $fichier[1];
/* Réduction proportionnelle à l'originale : on définit dans quel sens on devra réduire le plus */
if(($largeurSrc > LARGEUR_MAXI) && ($hauteurSrc > HAUTEUR_MAXI))
{
if(($largeurSrc - LARGEUR_MAXI) > ($hauteurSrc - HAUTEUR_MAXI))
{
$dimensions = reduc_L($largeurSrc, $hauteurSrc);
}
else
{
if(($largeurSrc - LARGEUR_MAXI) < ($hauteurSrc - HAUTEUR_MAXI))
{
$dimensions = reduc_H($largeurSrc, $hauteurSrc);
}
else
{
if($largeurSrc > $hauteurSrc)
{
$dimensions = reduc_L($largeurSrc, $hauteurSrc);
}
else
{
$dimensions = reduc_H($largeurSrc, $hauteurSrc);
}
}
}
/* On arrondit les chiffres en entiers */
$largeur = ceil($dimensions[0]);
$hauteur = ceil($dimensions[1]);
}
elseif(($largeurSrc > LARGEUR_MAXI) && ($hauteurSrc <= HAUTEUR_MAXI))
{
$dimensions = reduc_L($largeurSrc, $hauteurSrc);
/* On arrondit les chiffres en entiers */
$largeur = ceil($dimensions[0]);
$hauteur = ceil($dimensions[1]);
}
elseif(($largeurSrc <= LARGEUR_MAXI) && ($hauteurSrc > HAUTEUR_MAXI))
{
$dimensions = reduc_H($largeurSrc, $hauteurSrc);
/* On arrondit les chiffres en entiers */
$largeur = ceil($dimensions[0]);
$hauteur = ceil($dimensions[1]);
}
else
{
$largeur = $largeurSrc;
$hauteur = $hauteurSrc;
}
/* Création de l'image */
$reduite = imagecreatetruecolor($largeur, $hauteur);
/* On ré-échantillone l'image originale pour en créer une copie aux nouvelles dimensions */
imagecopyresampled($reduite, $imgSrc, 0, 0, 0, 0, $largeur, $hauteur, $largeurSrc, $hauteurSrc);
/* On enregistre l'image dans le répertoire des miniatures */
switch ($typeImage)
{
case "jpg" : imagejpeg($reduite, REPERTOIRE_IMAGES.$nomImage); break;
case "gif" : imagegif($reduite, REPERTOIRE_IMAGES.$nomImage); break;
case "png" : imagepng($reduite, REPERTOIRE_IMAGES.$nomImage); break;
}
return $nomImage;
}
/**
* Fonction reduc_H()
*
* Fonction de réduction proportionnelle des dimensions de l'image originale
*
* @var int
* @param int $lSrc Largeur de l'image originale
* @param int $hSrc Hauteur de l'image originale
* @return array
* @access private
*/
function reduc_H($lSrc, $hSrc)
{
$hauteur = HAUTEUR_MAXI;
$coef_h = $hSrc/HAUTEUR_MAXI;
$largeur = $lSrc/$coef_h;
$dimension[0] = $largeur;
$dimension[1] = $hauteur;
return $dimension;
}
/**
* Fonction reduc_L()
*
* Fonction de réduction proportionnelle des dimensions de l'image originale
*
* @var int
* @param int $lSrc Largeur de l'image originale
* @param int $hSrc Hauteur de l'image originale
* @return array
* @access private
*/
function reduc_L($lSrc, $hSrc)
{
$largeur = LARGEUR_MAXI;
$coef_l = $lSrc/LARGEUR_MAXI;
$hauteur = $hSrc/$coef_l;
$dimension[0] = $largeur;
$dimension[1] = $hauteur;
return $dimension;
}
/* Traitement de l'image s'il y a lieu */
if(isset($_FILES['photo']) && !empty($_FILES['photo']['name']))
{
if($_FILES['photo']['size'] <= TAILLE_MAX_IMG)
{
if (move_uploaded_file($_FILES['photo']['tmp_name'], (REP_TMP . $_FILES['photo']['name'])))
{
$fichier = $_FILES['photo'];
/* Génération de la maniature */
$creation = vignette($fichier);
if($creation)
{
$nom_fichier = $adr_vignette->getNomFichier();
$type_img = substr($nom_fichier, -3, 3);
/* Récupération des informations de taille de dimension des images */
$rep_l = getimagesize(REPERTOIRE_IMAGES.$nom_fichier);
$largeur_l = $rep_l[0];
$hauteur_l = $rep_l[1];
/* Insertion des informations sur l'image dans la base de données */
//.. ici votre code SQL d'insertion des information sur l'image
}
else
{
$msg_img = "Erreur lors du traitement de redimension de l'image.<br />\nContactez le webmestre si un nouvel essai se révèle encore infructueux. (Erreur 01)";
}
}
else
{
$msg_img = "Un incident technique s'est produit, l'image n'a pas été correctement traitée.<br />\nContactez le webmestre si un nouvel essai se révèle encore infructueux. (Erreur 02)";
}
}
else
{
$msg_img = "Le poids du fichier image est trop important (Maximum ". TAILLE_MAX_IMG / 1024 ." Ko), choisissez un fichier moins lourd afin de mettre à jour la fiche du produit. (Erreur 03)";
}
echo("<p>". $msg_img ."</p>\n");
}
?>
Bon, un code vite fait et non testé, l'important, c'est que vous en suiviez le fonctionnement pour savoir quoi placer et où. Adaptez à votre propre code:
[php]<?php
/**
* Traitement du chargement et du redimensionnement d'une image via un formulaire
*/
/* On commence par définir des paramètres */
/**
* On définit un répertoire de stockage temporaire de l'image envoyée (à créer)
*/
define("REP_TMP", "./images/tmp/");
/**
* Répertoire de destination
*/
define("REPERTOIRE_IMAGES", "./images/");
/**
* Hauteur maximum de la miniature
*/
define("HAUTEUR_MAXI", 200);
/**
* Largeur maximum de la miniature
*/
define("LARGEUR_MAXI", 175);
/**
* Taille maximum du fichier qu'un internaute peut envoyer (Exemple ici, 400Ko)
*/
define("TAILLE_MAX_IMG", 409600);
/* On définit ensuite des fonctions de traitement qui seront appelées par notre script */
/**
* Fonction de creation de vignette
*
* Cette fonction détermine le format de l'image originale pour créer une miniature pour la galerie.
*
* @return Boolean Vrai en cas de succès, Faux dans le cas contraire.
*/
function vignette($fichier)
{
/**************************************************************/
/* Création de la vignette pour affichage de plusieurs images */
/**************************************************************/
$image = $fichier['tmp_name'];
$info = pathinfo($image);
$extension = strtolower($info['extension']);
switch ($extension)
{
case "jpg": $imgSrc = imagecreatefromjpeg($image); break;
case "png": $imgSrc = imagecreatefrompng($image); break;
case "gif": $imgSrc = imagecreatefromgif($image); break;
default : $imgSrc = null; break;
}
if(isset($imgSrc))
{
/* Création de l'image miniature puis de l'image agrandie */
miniature($imgSrc, $extension);
$resultat = true;
}
else
{
/* Sinon, il ne s'agit pas d'un type d'image supporté par notre application */
$resultat = false;
}
return $resultat;
}
/**
* Fonction miniature()
*
* Cette fonction ré-échantillone l'image originale
* et définit des dimensions acceptables pour una page web
* par rapport à la hauteur et la largeur maxi fixées en paramètres.
*
* @param Array $imgSrc Tableau basé sur $_FILES['nom_champ_fichier']
* @param String $typeImage Chaîne de caractère, type de fichier image.
* @return Boolean Si la création de l'image s'est correctement déroulée, la fonction retourn TRUE, FALSE dans le cas contraire.
*/
function miniature($imgSrc, $typeImage)
{
$nomImage = $imgSrc['name'];
/* Quelle taille fait notre image ? */
$fichier = getimagesize($imgSrc['tmp_name']);
$largeurSrc = $fichier[0];
$hauteurSrc = $fichier[1];
/* Réduction proportionnelle à l'originale : on définit dans quel sens on devra réduire le plus */
if(($largeurSrc > LARGEUR_MAXI) && ($hauteurSrc > HAUTEUR_MAXI))
{
if(($largeurSrc - LARGEUR_MAXI) > ($hauteurSrc - HAUTEUR_MAXI))
{
$dimensions = reduc_L($largeurSrc, $hauteurSrc);
}
else
{
if(($largeurSrc - LARGEUR_MAXI) < ($hauteurSrc - HAUTEUR_MAXI))
{
$dimensions = reduc_H($largeurSrc, $hauteurSrc);
}
else
{
if($largeurSrc > $hauteurSrc)
{
$dimensions = reduc_L($largeurSrc, $hauteurSrc);
}
else
{
$dimensions = reduc_H($largeurSrc, $hauteurSrc);
}
}
}
/* On arrondit les chiffres en entiers */
$largeur = ceil($dimensions[0]);
$hauteur = ceil($dimensions[1]);
}
elseif(($largeurSrc > LARGEUR_MAXI) && ($hauteurSrc <= HAUTEUR_MAXI))
{
$dimensions = reduc_L($largeurSrc, $hauteurSrc);
/* On arrondit les chiffres en entiers */
$largeur = ceil($dimensions[0]);
$hauteur = ceil($dimensions[1]);
}
elseif(($largeurSrc <= LARGEUR_MAXI) && ($hauteurSrc > HAUTEUR_MAXI))
{
$dimensions = reduc_H($largeurSrc, $hauteurSrc);
/* On arrondit les chiffres en entiers */
$largeur = ceil($dimensions[0]);
$hauteur = ceil($dimensions[1]);
}
else
{
$largeur = $largeurSrc;
$hauteur = $hauteurSrc;
}
/* Création de l'image */
$reduite = imagecreatetruecolor($largeur, $hauteur);
/* On ré-échantillone l'image originale pour en créer une copie aux nouvelles dimensions */
imagecopyresampled($reduite, $imgSrc, 0, 0, 0, 0, $largeur, $hauteur, $largeurSrc, $hauteurSrc);
/* On enregistre l'image dans le répertoire des miniatures */
switch ($typeImage)
{
case "jpg" : imagejpeg($reduite, REPERTOIRE_IMAGES.$nomImage); break;
case "gif" : imagegif($reduite, REPERTOIRE_IMAGES.$nomImage); break;
case "png" : imagepng($reduite, REPERTOIRE_IMAGES.$nomImage); break;
}
return $nomImage;
}
/**
* Fonction reduc_H()
*
* Fonction de réduction proportionnelle des dimensions de l'image originale
*
* @var int
* @param int $lSrc Largeur de l'image originale
* @param int $hSrc Hauteur de l'image originale
* @return array
* @access private
*/
function reduc_H($lSrc, $hSrc)
{
$hauteur = HAUTEUR_MAXI;
$coef_h = $hSrc/HAUTEUR_MAXI;
$largeur = $lSrc/$coef_h;
$dimension[0] = $largeur;
$dimension[1] = $hauteur;
return $dimension;
}
/**
* Fonction reduc_L()
*
* Fonction de réduction proportionnelle des dimensions de l'image originale
*
* @var int
* @param int $lSrc Largeur de l'image originale
* @param int $hSrc Hauteur de l'image originale
* @return array
* @access private
*/
function reduc_L($lSrc, $hSrc)
{
$largeur = LARGEUR_MAXI;
$coef_l = $lSrc/LARGEUR_MAXI;
$hauteur = $hSrc/$coef_l;
$dimension[0] = $largeur;
$dimension[1] = $hauteur;
return $dimension;
}
/* Traitement de l'image s'il y a lieu */
if(isset($_FILES['photo']) && !empty($_FILES['photo']['name']))
{
if($_FILES['photo']['size'] <= TAILLE_MAX_IMG)
{
if (move_uploaded_file($_FILES['photo']['tmp_name'], (REP_TMP . $_FILES['photo']['name'])))
{
$fichier = $_FILES['photo'];
/* Génération de la maniature */
$creation = vignette($fichier);
if($creation)
{
$nom_fichier = $adr_vignette->getNomFichier();
$type_img = substr($nom_fichier, -3, 3);
/* Récupération des informations de taille de dimension des images */
$rep_l = getimagesize(REPERTOIRE_IMAGES.$nom_fichier);
$largeur_l = $rep_l[0];
$hauteur_l = $rep_l[1];
/* Insertion des informations sur l'image dans la base de données */
//.. ici votre code SQL d'insertion des information sur l'image
}
else
{
$msg_img = "Erreur lors du traitement de redimension de l'image.<br />\nContactez le webmestre si un nouvel essai se révèle encore infructueux. (Erreur 01)";
}
}
else
{
$msg_img = "Un incident technique s'est produit, l'image n'a pas été correctement traitée.<br />\nContactez le webmestre si un nouvel essai se révèle encore infructueux. (Erreur 02)";
}
}
else
{
$msg_img = "Le poids du fichier image est trop important (Maximum ". TAILLE_MAX_IMG / 1024 ." Ko), choisissez un fichier moins lourd afin de mettre à jour la fiche du produit. (Erreur 03)";
}
echo("<p>". $msg_img ."</p>\n");
}
?>[/php]