Classe de redimension d'image.

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 787 fois - Téléchargée 18 fois


Contenu du snippet

Voila une premiere version d'une classe permettant de gérer une redimension d'image.

La source est relativement simple car j'ai voulu enlevé tout ce qui était superflux.
Mais du coup elle sera surement complétée au fur et a mesure.

J'attend vos conseils / suggestions.

Source / Exemple :


<?php
/**

  • @author : Yaug - Manuel Esteban
  • @version : 0.1
  • @date : 18.04.07
  • @comment : First Version of this class that allows you to format image size.
    • /
class Image{ //caracatéristiques de l'image source private $source; private $to; private $width; private $height; private $type; private $extensions; //caractéristique de l'image destination. private $new_width; private $new_height; //Constructeur public function __construct($_source,$_extensions=array('jpg'=>2,'jpeg'=>2,'gif'=>1,'png'=>3)){ $this->source=(string)$_source; $this->extensions=$_extensions; list($w, $h, $t, $a) = getimagesize($_source); $this->width=$w; $this->height=$h; $this->type=$t; } //Fonction de vérification de l'extension. private function verif_extension(){ return(in_array($this->type,$this->extensions)); } //Fonction de redimensionnement, $_to sera le nom de la nouvelle image, $_new_width et $_new_height sa nouvelle taille. Si $_samesize vaut 1, la photo gardera ses proportions. public function resize($_to,$_new_width,$_new_height,$_samesize){ $this->to=(string)$_to; $this->new_width=(int)$_new_width; $this->new_height=(int)$_new_height; //On vérifie l'extention if($this->verif_extension()){ //On vérifie le rapport $ratio=$this->get_ratio(); if($ratio>1){//La nouvelle image est plus petite que l'image source, on la redimenssione. $new_w=($_samesize)?$this->new_width:$this->width/$ratio; $new_h=($_samesize)?$this->new_height:$this->height/$ratio; $thumb=imagecreatetruecolor($new_w,$new_h);//on prépare une image vide aux bonnes dimensions. switch ($this->type) // On teste l'extension du fichier pour utiliser la fonction adéquate { case 1: $source = imagecreatefromgif($this->source); break; case 2: $source = imagecreatefromjpeg($this->source); break; case 3: $source = imagecreatefrompng($this->source); break; } //On copie notre image d'origine dans la nouvelle image. imagecopyresampled($thumb,$source,0,0,0,0,$new_w,$new_h,$this->width,$this->height); imagejpeg($thumb,$_to, 100);//On sauve l'image //On détruit les ressources inutilisées. imagedestroy($thumb); imagedestroy($source); }else copy($this->source,$this->to); //L'image est plus petite que l'image source, on se contente de la copier. }else print_r($this->type); } //Fonction qui calcul le rapport entre les cotés private function get_ratio(){ return max($this->width/$this->new_width,$this->height/$this->new_height); } } ?>

Conclusion :


Comment l'utiliser?

include("class/image.php");

$Img=new Image("test/66.JPG");
$Img->resize("test/exemple.jpg",100,100,0);//Si vous vouler conserver les proportions, le dernier parametre doit etre a 1.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
38
Date d'inscription
lundi 15 septembre 2003
Statut
Membre
Dernière intervention
24 novembre 2008

Bonjour,
Dans mon cas, je détermine la hauteur de la nouvelle image mais pas sa largeur -> ne serait-il pas possible de ne pas devoir spécifier largeur (ou mettre 0) mais quand même conserver les proportions ?
J'espère que je suis clair dans ma demande ;-)
Merci d'avance,
Christophe
Messages postés
35
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
3 septembre 2010

hum...
en gros, type est valable uniquement is il est compris dans les types répertoriés dans le tableau extensions.
si le type est valable, on arrive ensuite à ce que tu indique.
Donc on récupere le type de l'image, selon son type on crée l'image de base.

Donc, jsuis pas doué faut croire, mais je vois pas trop.
Certe je donne au final que 3 possibilités (les trois plus stables on dira) en dur dans le code dans mes cases, mais je ne vois pas trop comment changer ca.
Donc je suis ouvert à tout conseil.
Messages postés
6
Date d'inscription
dimanche 22 avril 2007
Statut
Membre
Dernière intervention
26 avril 2007

@Yaug: tu te trompes :
# switch ($this->type) // On teste l'extension du fichier pour utiliser la fonction adéquate
# {
# case 1: $source = imagecreatefromgif($this->source); break;
# case 2: $source = imagecreatefromjpeg($this->source); break;
# case 3: $source = imagecreatefrompng($this->source); break;
# }

Me dis pas que là c'est pas en dur ...
Messages postés
5
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
21 novembre 2010

comme le "superflu" a été enlevé, je vais regarder de prêt pour mon apprentissage personnel ;)
Messages postés
35
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
3 septembre 2010

bon corrigé pour presque tout.
Effectivement j'aurais du faire comme tu le préconise pour verif_extension, c'est corrigé.
Pour le <?php a la place de <? c'est changé aussi meme si ca ne pause pas de probleme a xml.
le public, corrigé aussi.

Par contre, pour le coup des extensions, elle ne sont jamais fixe.
Je déclare à la classe les extensions dans le constructeur, si elle ne sont pas définies elles sont fixes.
Donc je ne vois pas trop ou est le probleme sachant que la vérification dans resize fait appele à cette déclaration des extensions dans le constructeur.

Merci d'avoir pris le temps de regarder cette source.
Afficher les 6 commentaires

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.