Redimmensionner une image : créer une miniature

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 890 fois - Téléchargée 15 fois

Contenu du snippet

Vous désirez créer une miniature, avec cette classe CImage il suffit de faire :

$mImage = new CImage('mon_image.jpg');
// lors de la création de mImage des paramètres par défaut sont pris
// vous pouvez les modifier :
$mImage->set_size(300,300);
$mImage->set_autoresize(false);
$mImage->set_dir_destination('mon_repertoire_de_destination/');
$mImage->_creerMiniature();
$mImage->supprimer_image_temp(); // suppréssion de l'image temporaire (grand format)

D'autres options de retouches d'image seront bientôt dispo ;)

N'oubliez pas les chmod de vos répertoires ;)
A bientôt

http://www.mooveon.net - Partages de vidéos

Source / Exemple :


<?php
// class developped by Adrien HADJ SALAH from mooveon.net

class CImage
{					   
	public $width;  
	public $height;
	public $dir_destination;
	public $autoresize; 
	
	public $url_image;
	public $tbl_extension_admise; 
	
	// constructeur
	public function __construct($url_image)
	{	  
	// par défaut on prend ces paramètres
	$this->width = 200;
	$this->height = 100;
	$this->dir_destination = "mes_images/";
	$this->autoresize = true; 
	$this->url_image = $url_image;
	$this->tbl_extension_admise = array('jpg', 'gif', 'png', 'jpeg');
	}

	private function supprimer_image_temp()
	{	
		if (file_exists($this->url_image))			
			unlink($this->url_image);
	}  
	// Set/Get :  autoresize : mode d'auto-redimensionnement 1, sinon 0
	public function set_autoresize($mode)
	{
		if ($mode == true) {$this->autoresize=true;}
		else {$this->autoresize=false;}
	} 
	public function get_url_image()
	{
	return $this->url_image;
	}
	// Set/Get :  url_image : url de l'image à traiter
	public function set_url_image($url_image)
	{
	$this->url_image = $url_image;
	} 
	public function get_url_image()
	{
	return $this->url_image;
	}
	// Set/Get :  widthxheight : format de l'image à redimensionner, get_size() renvoit par exemple 640x480
	public function set_size($width, $height)
	{
	$this->width = (int)$width;
	$this->height = (int)$height;
	}  
	public function get_size()
	{	   
		$size_string = $this->width."x".$this->height;
	return $size_string;
	}
	// Set/Get :  dir_ : repertoire de destination écrit de cette manière mon_repertoire/, attention à vos chmod (755)
	public function set_dir_destination($dir)
	{
	$this->dir_destination = $dir;
	}  
	public function get_dir_destination()
	{	   
	return $this->dir_destination;
	}
	
	public function add_extension_admise($new_ext)
	{
	$this->tbl_extension_admise[sizeof($this->tbl_extension_admise] = $new_ext;
	}   			
	
	public function _creerMiniature()
	{	 
	// vérification de l'extension
	$url_image_tbl = explode('.', $this->url_image);
	$extension = $url_image_tbl[sizeof($url_image_tbl)-1];
	
		if (in_array(strtolower($extension), $this->tbl_extension_admise))
		{
		    $im = ImageCreateTrueColor ($this->width, $this->height) 
		            or die ("Erreur lors de la création de l'image"); 
		
		    $source = ImageCreateFromJpeg($this->url_image);
		    
		    $largeurSource = imagesx($source);
		    $hauteurSource = imagesy($source);
		    
			if ($this->autoresize==true)
			{
			$this->height = $this->width*$hauteurSource/$largeurSource; // mode autoredimensionnement
			}	
		
		    ImageCopyResampled($im, $source, 0, 0, 0, 0, $largeurDestination, $hauteurDestination, $largeurSource, $hauteurSource);
		
		    $miniature = $this->dir_directory.basename($this->url_image);
		    ImageJpeg ($im, $miniature);
			
			echo("Félicitation, voici l'adresse de la miniature :<br><br>$miniature");
		}
		else
		{
		echo("Désolé votre fichier ne possède pas une extension autorisée...");
		} 
	}	
}

?>

Conclusion :


J'ai mis à jour la source en prenant en compte vos remarques

A voir également

Ajouter un commentaire

Commentaires

Messages postés
875
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
22 juin 2012

Oula vous êtes pas très sympas!! Bon après, c'est vrai qu'il aurait peut être pas dû mettre initié mais plutôt débutant (enfin perso je mes toujours débutant, au moins je suis trankil).
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
$hauteurDestination = $largeurDestination*$hauteurSource/$largeurSource; // proportionnel

et si on veut definir la hauteur et pas la largeur ?
et si on veut definir une hauteur et une largeur maximale ?
et si on s'en fout de la proportionalite ?

bref, ca manque clairement d'option.
Messages postés
488
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
31 mars 2009
4
Salut,

Je suis navré de te dire que ta source est presque quasiment inexploitable en l'état. Je me demande même pourquoi tu as créé une classe quand une fonction aurait suffit. De plus c'est carrément le fouillis dans ton code. Voilà une liste non exhaustive de ce qui ne va pas dans ce code selon moi :

1/ Tu mélanges syntaxe PHP 4 et syntaxe PHP 5. En effet, tu utilises bien le mot-clé "public" pour tes méthodes mais à contrario tu utilises encore le mot-clé "var" issu de PHP 4. Un attribut "private" ou "protected" ferait davantage l'affaire soit dit en passant pour plus de sûreté de programmation.

2/ Tes noms de méthodes sont tantôt en anglais, tantôt en français, tantôt en lower camel case ou bien tantôt en lower case avec underscore. Quel intérêt ? On s'y perd ! Apporte au développeur une API cohérente dans la manière de l'employer. Personnellement j'ai une préférence pour les noms de méthodes en anglais et lower camel case.

3/ Tu définis en dur les dimensions finales de la miniature au sein même de la méthode creerMiniature(). Comment je fais si je veux une miniature de 110 x 110 px ? Comment je fais si je dois générer en une passe plusieurs miniatures de dimensions différentes de mon image ? Et bien je ne peux pas, ce qui rend ton code complètement inutile. Tu aurais pu faire l'effort minimum de placer ces deux variables en paramètre de la méthode. Ainsi nous pourrions faire :

$img->creerMiniature(100,100);
$img->creerMiniature(300,300);

4/ Tu ne crées des miniatures qu'à partir d'images JPEG. Et si je veux miniaturiser un GIF, un BMP ou un PNG par exemple ? Bah je ne peux pas...

5/ Et si j'ai envie de changer le nom et le répertoire de destination des miniatures facilement ? Là encore, il aurait fallu proposer un paramètre facultatif à ta méthode creerMiniature()

6/ Que se passe-t-il si j'essaie de passer un fichier PHP à la place d'une image, ou bien une image avec un nom à la con ? Tu ne gères aucune erreur en cas de problème. Le nommage de l'image final n'est pas sain non plus car on peut mettre n'importe quel caractère à la con dans le nom de l'image originale, on l'aura à nouveau dans l'image miniaturisée. Bonjour les dégâts que ça peut produire en terme de sécurité...

7/ Où sont les tests sur l'extension, le type, les dimensions... ? Tu ne connais pas getimagesize() ?

8/ A quand l'implémentation de fonctionnalités plus sympas comme le crop, l'inversion des couleurs, la génération d'un captcha... ?

Au final, j'espère que tu vois clairement que ta source n'est pas adaptée et inutilisable en l'état. As-tu compris l'intérêt des fonctions utilisateurs ? As-tu compris ensuite l'intérêt de faire des classes ?

++

Hugo.

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.