Class php 5 pour chargement et redimensionnement d'images (si nécéssaire, pour les formats supportés par la gd: gif, jpeg, p

Description

Comme le titre le dit, cette class sert pour charger (upload) et redimensionner les images ( seul les format gif, jpeg et png supportés par la librairie GD, pour le redimensionnement).
Ce que vous aurez à faire c'est de spécifier quelques paramètres: taille_max, largeur et hauteur, extensions et formats autorisés, un préfixe et un sufixe ou un nouveau nom, puis le répertoire ou dossier où serait stocké l'image et voilà!
Soyez indulgents, c'est ma première class en PHP 5 ( eh oui, je vous rejoins moi aussi ;P )et donc des critiques constructives pour améliorer le code sont les bienvenues

Source / Exemple :


<?php
 ////////////////////////////////////////////////////////////////////////////////////////\ 
//
//    Nom du code        :  Class PHP 5 pour chargement des imager + redimensionnement
//    Date de création :  27 / 01 / 2006
//    Auteur                  : FBNKCMaster <-|| Farid BEN KACEM ||->
//    E-mail                   : FBNKCMaster@hotmail.com  
//
//    |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//
//                                          ENJOY IT!!!
//
/////////////////////////////////////////////////////////////////////////////////////////\
/////////////////////////////////////////////////////////////////////////////////////////\

class charger
{
	// On déclare les constantes
	const DEFAULT_LARGEUR = 140;
	const DEFAULT_HAUTEUR = 140;
	const DEFAULT_NV_NOM = '';
	const DEFAULT_PREFIX = 'pref_';
	const DEFAULT_SUFFIX = '_suff';
	const DEFAULT_NOM_CHAMPS = 'file';
	const DEFAULT_DESTINATION = '.';
	const DEFAULT_TAILLE_MAX = 102400; // en octet 100 * 1024 = 100 Ko
	
	// Les attribus
	private $nom_champs; // Repertoire de destination
	private $destination; // Repertoire de destination
	private $taille_max; // Taille maximale de l'image
	private $type_aut; // Tableau contenant les types d'image autorisés
	private $type; // Type du fichier encours
	private $ext_aut; // Tableau contenant les noms des extensions autorisés
	private $largeur; // Largeur de l'image
	private $hauteur; // Hauteur de l'image
	private $nv_nom; // Nouveau nom
	private $ext; // L'extension du fichier uploadé
	private $pref; // Prefixe à ajouter
	private $suff; // Sufixe à ajouter
	
	function __construct($array)
	{
		$this->largeur = self::DEFAULT_LARGEUR;
		$this->hauteur = self::DEFAULT_HAUTEUR;
		$this->nv_nom = self::DEFAULT_NV_NOM;
		$this->pref = self::DEFAULT_PREFIX;
		$this->suff = self::DEFAULT_SUFFIX;
		$this->nom_champs = self::DEFAULT_NOM_CHAMPS;
		$this->destination = self::DEFAULT_DESTINATION;
		$this->taille_max = self::DEFAULT_TAILLE_MAX;
		$this->type_aut = array('1', '2', '3'); // Types d'image autorisés: 1 = GIF, 2 = JPG, 3 = PNG...
		$this->ext_aut = array('gif', 'jpg', 'png', 'bmp'); // Les extensions autorisées
		
		if(isset($array) && is_array($array))
		{
			foreach($array as $c => $v)
			{
				$this->$c = $v;
			}
		}
	}
	
	function executer()
	{
		if($this->existe() === false)
		{
			throw new Exception('Il n\'y a pas de fichier à charger!');
		}
		
		if($this->extension() === false)
		{
			throw new Exception('Ce type de fichier n\'est pas autorisé!');
		}
		
		if($this->type() === false)
		{
			throw new Exception('Ce type de fichier n\'est pas autorisé!');
		}
		
		if($this->poids() === false)
		{
			throw new Exception('Le poid de l\'image est supérieur à '.($this->taille_max/1024).' Ko');
		}
		
		if($this->dim() === false)
		{
			if($this->redim() === false)
			{
				throw new Exception('La largeur/hauteur de l\'image est grande!');
			}
		}
		else
		{
			if($this->copier() === false)
			{
				throw new Exception('Erreur lors de la copie du fichier');
			}
		}
	}
	
	function existe()
	{
		// D'abord on vérifie si le fichier existe, s'il est uploadé en mémoire
		// Si le fichier existe dans le dossier tmp...
		if(!empty($_FILES[$this->nom_champs]['tmp_name']) && is_uploaded_file($_FILES[$this->nom_champs]['tmp_name']))
		{
			return true;
		}
		else
		{
			// Sinon on affiche l'erreur
			return false;
		}
	}
	
	function extension()
	{
		// On récupère l'extension
		$this->ext = substr(strrchr($_FILES[$this->nom_champs]['name'], '.'), 1);
		// Et on vérifie si elle figure parmis les extensions autorisées
		if(!empty($this->ext) && in_array($this->ext, $this->ext_aut))
		{
			return true;
		}
		else
		{
			// Sinon on affiche l'erreur
			return false;
		}
	}
	
	function type()
	{
		// On vérifie maintenant le type de l'image à l'aide de la fonction getimagesize()
		list($largeur, $hauteur, $this->type) = getimagesize($_FILES[$this->nom_champs]['tmp_name']);
		
		// Si le $this->type de l'image figure parmis ceux autorisés
		if(in_array($this->type, $this->type_aut))
		{
			return true;
		}
		else
		{
			// Sinon: "Le type de fichier est incorrect!!", on affiche l'erreur
			return false;
		}
	}
	
	function poids()
	{
		//On vérifie la taille (le poids) du fichier avec "filesize()" pour plus de sécurité encore
		if(filesize($_FILES[$this->nom_champs]['tmp_name']) < $this->taille_max)
		{
			return true;
		}
		else
		{
			// Sinon on affiche l'erreur
			return false;
		}
	}
	
	function dim()
	{
		// On vérifie maintenant les dimensions de l'image à l'aide de la fonction getimagesize()
		list($largeur, $hauteur) = getimagesize($_FILES[$this->nom_champs]['tmp_name']);

		if($largeur <= $this->largeur && $hauteur <= $this->hauteur)
		{
			return true;
		}
		else
		{	
				// Sinon on affiche l'erreur
				return false;
		}
	}
	
	function redim()
	{
		//On essaye de redimensionner
		// On vérifie d'abord si la librairie GD est activée
		if(extension_loaded('gd'))
		{
			// Si oui, on lance la méthode pour redimensionner
			// Calcule des nouvelles dimensions
			list($largeur_orig, $hauteur_orig) = getimagesize($_FILES[$this->nom_champs]['tmp_name']);
			// Un peu des mathématiques...
			if($largeur_orig > $this->largeur || $hauteur_orig > $this->hauteur) 
			{
				if($largeur_orig >= $hauteur_orig)
				{
					$coef = $largeur_orig / $hauteur_orig;
					$largeur = $this->largeur;
					$hauteur = ceil($this->hauteur / $coef);
				}
				else
				{
					$coef = $hauteur_orig / $largeur_orig;
					$hauteur = $this->hauteur;
					$largeur = ceil($this->largeur / $coef);
				}
			}
			else
			{
				$largeur = $this->largeur;
				$hauteur = $this->hauteur;
			}	
				// Redimensionnement
				//copie avec la fonction "imagejpeg" pour le format jpg, "imagepng" pour les png et "imagegif" pour les gif. Les formats les plus utilisés et qui sont supportés par la gd
				// $this->renommer(): cette méthode retourne le nouveau nom s'il est mentionné sinon retourne le nom original
			switch ($this->type)
			{
				case 1 :
					$image_finale = imagecreatetruecolor($largeur, $hauteur);
					$image_orig = imagecreatefromgif($_FILES[$this->nom_champs]['tmp_name']);
					imagecopyresized($image_finale, $image_orig, 0, 0, 0, 0, $largeur, $hauteur, $largeur_orig, $hauteur_orig);
						if(!@imagegif($image_finale, $this->destination.'/'.$this->renommer()))
						{
							// Si c'est pas réussi on affiche l'erreur
							return false;
						}// Sinon le fichier a été uploadé et redimensionné correctement!!
				break;
	
				case 2 :
					$image_finale = imagecreatetruecolor($largeur, $hauteur);
					$image_orig = imagecreatefromjpeg($_FILES[$this->nom_champs]['tmp_name']);
					imagecopyresized($image_finale, $image_orig, 0, 0, 0, 0, $largeur, $hauteur, $largeur_orig, $hauteur_orig);

					if(!@imagejpeg($image_finale, $this->destination.'/'.$this->renommer()))
					{
						// Si c'est pas réussi on affiche l'erreur
						return false;
					}// Sinon le fichier a été uploadé et redimensionné correctement!!
				break;
	
				case 3 :
					$image_finale = imagecreatetruecolor($largeur, $hauteur);
					$image_orig = imagecreatefrompng($_FILES[$this->nom_champs]['tmp_name']);
					imagecopyresized($image_finale, $image_orig, 0, 0, 0, 0, $largeur, $hauteur, $largeur_orig, $hauteur_orig);
	
					if(!@imagepng($image_finale, $this->destination.'/'.$this->renommer()))
					{
						// Si c'est pas réussi on affiche l'erreur
						return false;
					}// Sinon le fichier a été uploadé et redimensionné correctement!!
				break;
			}
		}
	}

	function copier()
	{
		// On copie le fichier dans le répertoire de destination
		// $this->renommer(): cette méthode retourne le nouveau nom s'il est mentionné sinon retourne le nom original
		if(!@move_uploaded_file($_FILES[$this->nom_champs]['tmp_name'], $this->destination.'/'.$this->renommer()))
		{
			// Erreur lors de la copie..
			//throw new Exception('Erreur lors de la copie du fichier');
			return false;
		}// Sinon le fichier a été uploadé correctement
	}

	function renommer()
	{
		// On renomme le fichier si le nouveau nom est fourni sinon on laisse
		($this->nv_nom == '')?$this->nv_nom = $_FILES[$this->nom_champs]['name']:$this->nv_nom = $this->nv_nom.'.'.$this->ext;
		// On récupère le nom du fichier sans l'extension
		list($nom_sans_ext, $ext) = explode('.', $this->nv_nom);
		// On ajoute le sufixe s'il est mentionné
		($this->suff == '')?$this->nv_nom = $this->nv_nom:$this->nv_nom = $nom_sans_ext.$this->suff.'.'.$this->ext;
		// On ajoute le préfixe s'il est mentionné
		($this->pref == '')?$this->nv_nom = $this->nv_nom:$this->nv_nom = $this->pref.$this->nv_nom;
		return $this->nv_nom;
	}
}
?>

Conclusion :


////////////// Exemple d'utilisation //////////////

---------- page charger.html ---------

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
CLASS CHARGER IMAGES AVEC REDIMENSION
</title>
</head>
<body>
<div align="center">
<form action="charger.php" method="post" enctype="multipart/form-data">
<input type="file" name="fichier" />
<br />
<input type="submit" value="Envoyer" />
</form>
</div>
</body>
</html>

---------- page charger.php ---------

<?php
require_once('charger.class.php');
// On prépare les paramètres pour les faire passer
$nom_champs = 'fichier'; // le nom du champs
$nv_nom = 'fbnkcmaster'; // nouveau nom pour renommer
$pref = 'abc_'; // prefixe à ajouter
$suf = '_01'; // sufixe à ajouter
// Sous forme d'un tableau
$array = array('nom_champs' => $nom_champs, 'nv_nom' => $nv_nom, 'pref' => $pref, 'suf' => $suf);
// On instancie la classe
// $charger = new charger(); pour laisser les paramètres par défauts
$charger = new charger($array);
// gestion des Exceptions try... catch...
try
{
$charger->executer();
echo 'L\'image a été chargée avec succès!';
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>

///////////////////////////////////////////////

Vos suggestions et commentaires sont les bienvenus.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.