Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CLASSE DE REDIMENSION D'IMAGE.


Information sur la source

Catégorie :Class et Objet ( POO ) Classé sous : image, redimension, class, objet Niveau : Initié Date de création : 20/04/2007 Date de mise à jour : 23/04/2007 08:11:10 Vu : 6 040

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

Description

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

  • <?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);
  • }
  • }
  • ?>
<?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.
 

Historique

20 avril 2007 07:01:06 :
correction d'une erreur
23 avril 2007 08:07:14 :
légères corrections.
23 avril 2007 08:11:10 :
corrections mineures.

Commentaires et avis

signaler à un administrateur
Commentaire de oox le 22/04/2007 12:38:45

Alors, remplace <? par <?php pour éviter d'éventuelles erreurs avec XML. Ajoute public devant ta fonction __construct(). Tu as mis des castes (string) un peu partout, à tord. Par exemple, new_width est un int ... Retire donc ces (string) qui ne serve à rien.

Cette solution pour verif_extension() est préférable.
private function verif_extension()
{
    return in_array($this->type,$this->extensions);
}

Dans le constructeur tu définis des valeurs 'variables' pour tes extensions alors que dans resize elles sont fixes ... Tu as eu tord :)

Pour finir, la PHPDoc c'est /** et pas /*

signaler à un administrateur
Commentaire de Yaug le 23/04/2007 08:10:21

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.

signaler à un administrateur
Commentaire de bugs74 le 24/04/2007 11:17:52

comme le "superflu" a été enlevé, je vais regarder de prêt pour mon apprentissage personnel ;)

signaler à un administrateur
Commentaire de oox le 26/04/2007 11:39:58

@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 ...

signaler à un administrateur
Commentaire de Yaug le 26/04/2007 15:45:57

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.

signaler à un administrateur
Commentaire de bonnebouffe le 20/07/2007 10:55:49

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

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Erreur de redimension [ par Tilix ] Salut, J'ai une erreur qui apparait lorsque j'utilise une fonction qui permet de redimensionner une image : Warning: imagejpeg(): Unable to open ' Class POO retourné le nom de l'objet [ par MeTh ] Bonjour,Comment retourné le nom de l'objet déclaré?exemple :$monobjet = new GridR();comment recuperé $monobjet dans ma class?Merci Valeur retourné par un Objet de Type image??? [ par DJPGM ] C quoi la valeur que retourne une image comme dans l'exemple suivant???&lt;form name="ChoixImage" method="post" action="Images.php" &gt; &lt;input Redimension d'image [ par JohnInsane ] Bonjour &#224; tous, J'aimerais redimensionner des&nbsp; images en php mais la m&#233;thode que j'utilise est vraiment tr&#232;s m&#233;diocre et le Prévisualisation d'un objet personalisé [ par thedeejay ] Salutations!Je commence un peu à bidouiller la librairie GD pour creer des images, mais malheuresement, lorsque je commence à peine à comprendre on me Debutant en Ajax [ par TheGorgo ] Bonjour, Je cherche de l'aide pour un script en ajax. J'ai cherché des tutoriaux un peu partout, mais je ne comprends toujours pas. Je pense que ce q Pb avec la class de news de FhX [ par acidline ] Bonjour à tous,Je me présente, je m'appelle Nicolas, j'ai 24ans et la POO en PHP est nouveau pour moi.Je me suis mis en tête d'utiliser la class de ne class et controler [ par waterw72 ] Bonjour,Est-il correct de faire une classe qui manipule des données par exemple.et une autre classe qui hérite de la première qui permettrait d'affich :::::: URGENT !!! ENVOI D'IMAGE PAR FTP !!!! ERREUR :::::: [ par kkz_mil3k ] j'essaie d'nevoyer un fichier image gif ou jpg sur un ftp via ce formulaire php :------------------------------------------- //**connecte au ftp sc Comment insérer un champs image ds ma table ?? [ par inceV ] Salut à tous et bonne année 2002 !!!Bon, je n'arrive pas à créer un champs 'image' ds ma table et je ne comprends pas tp commen ça marche, pourriez-vo


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,562 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.