begin process at 2012 02 11 19:02:47
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > CLASSE DE REDIMENSION D'IMAGE.

CLASSE DE REDIMENSION D'IMAGE.


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :7 655

Auteur : Yaug

Ecrire un message privé
Site perso
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.

 Sources du même auteur

CLASSE FFMPEG DE GESTION DE VIDÉOS
Source avec Zip ENCODAGE ET TRAITEMENT DE AUTOMATIQUE DE VIDÉOS EN UPLOAD

 Sources de la même categorie

CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter
Source avec Zip SIMPLETEMPLATE par thunderhunter
Source avec Zip Source avec une capture VOIR QUI VISITE VOTRE SITE par Dariumis
Source avec Zip CLASS SIMPLE CBASEDONNEE par smag42

 Sources en rapport avec celle ci

CLASS GALERIE PHOTO par Xiryl
Source avec Zip Source avec une capture [POO] MENU XHTML HORIZONTAL EXTENSIBLE (MENUEXTENSIBLEX.PHP) par Dariumis
Source avec Zip Source avec une capture [POO] OBJET CONVERTISSANT UN NOMBRE DE SECONDES EN DIFFÉRENT... par Dariumis
Source avec Zip CLASSE SQL par benjycorp
Source avec Zip FUNCTION IMAGE SIMPLE ET ARRAY par astro53

Commentaires et avis

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 /*

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.

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 ;)

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

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.

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 Problème à la création d'un objet [ par BooletMan ] Bonjour bonjour ! A partir d'un XML, je récupère sous forme d'objet les informations concernant un fichier (son nom, si ce fichier est requis, s'il f 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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,075 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales