Bonjour, mon problème est le suivant. J'ai une classe qui me permet de retoucher des images. Je voudrais pouvoir créer des vignettes dont la taille maximale est de 400x320.
Voici ma classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
 
<?php
 
/**
 * @author cyrim
 * @copyright 2008
 */
 
	class TraitementImage {
 
		/**
		 * Données membres de la classe
		 * @access private
		 * @var Integer $width Largeur de l'image (px)
		 * @var Integer $height Hauteur de l'image (px)
		 * @var Integer $type Type de l'image (gif=1|jpg=2|png=3|...)
		 * @var String $mime Type mime de l'image
		 * @var Image $source Fichier image source
		 * @var Image $copie Copie du fichier image source
		 * @var Array $infos Tableau contenant les infos concernant l'image
		 * @var Integer $filesize Taille de l'image (Ko)
		 */
		private $width = 0;
		private $height = 0;
		private $type = '';
		private $mime = '';
		private $source = null;
		private $copie = null;
		private $infos = array();
		private $filesize = 0;
 
		/**
		 * Constructeur de la classe
		 * @access public
		 * @param String $image Chemin complet d'accès au dichier image
		 * @return void
		 */
		public function __construct($image)
		{
			// On vérifie que le paramètre n'est pas vide et que le fichier existe
			if(!empty($image) AND file_exists($image)) {
 
				// On récupère les informations de l'image
				$infos = getimagesize($image);
				$this->width   = $infos[0];
	 			$this->height  = $infos[1];
	 			$this->type    = $infos[2];
	 			$this->mime    = $infos['mime'];
	 			$this->source  = $this->createFromType($image);
	 			$this->copie   = null;
 
	 			// On vérifie que la création de la ressource en fonction de son type à fonctionnée
	 			if($this->source == false) {
 
	 				echo 'Format d\'image non supporté';
	 			}
	 			$this->filesize   		  = filesize($image);
	 			$this->infos['extension'] = strchr($image, '.');
				$this->infos['extension'] = substr($this->infos['extension'], 1);
				$this->infos['extension'] = strtolower($this->infos['extension']);
			}
		}
 
		/**
	 	 * Destructeur
	 	 */
	 	public function __destruct()
	 	{
	 		@imagedestroy($this->source);
	 		if($this->copie != null) {	
	 			@imagedestroy($this->copie);
	 		}
	 	}
 
		/**
	 	 * Créer une ressource image selon son type
	 	 * @access protected
	 	 * @param string image
	 	 * @return ressource image
	 	 */
	 	protected function createFromType($image)
	 	{
	 		// Selon le type de $image on crée une ressource image
	 		switch($this->type) {
 
				// Type gif
				case 1: {
					$crea = imagecreatefromgif($image);
					break;
				}
				// Type jpg
				case 2: {
					$crea = imagecreatefromjpeg($image);
					break;
				}
				// Type png
				case 3: {
					$crea = imagecreatefrompng($image);
					break;
				}
				default: {
					$crea = false;
					break;
				}
			}
			return $crea;
	 	}
 
	 	/**
	 	 * Récupère les informations de l'image
	 	 * @access private
	 	 * @return array $infos Information de l'image
	 	 */
	 	public function getInfos()
	 	{	
	 		$this->infos['width']     = $this->width; 
	 		$this->infos['height']    = $this->height;
			$this->infos['mime']      = $this->mime;
			$this->infos['poids']	  = round($this->filesize/1024,2);
 
			return $this->infos;
	 	}
 
	 	/**
	 	 * Renvoi la largeur de l'image
	 	 * @access public
	 	 * @return Integer $this->width Largeur de l'image
	 	 */
	 	public function getWidth()
	 	{
			return $this->width;
		}
 
		/**
	 	 * Renvoi la hauteur de l'image
	 	 * @access public
	 	 * @return Integer $this->height Hauteur de l'image
	 	 */
		public function getHeight()
	 	{
			return $this->height;
		}
 
	 	/**
		 * Créer une copie de l'image originale pour restauration ulterieur.
		 * @access private
		 */
		public function duplicate()
		{	
			$this->copie = imagecreatetruecolor($this->width, $this->height);
		 	if(imagecopy($this->copie, $this->source, 0, 0, 0, 0, $this->width, $this->height)) {
 
				return true;
			} else {
 
				return false;
			}
		}
 
		/**
		 * Restaure la copie de sauvegarde de l'image
		 * @access private
		 */
		public function restore()
		{	
			$this->source = $this->copie;
		}
 
		/**
		 * Redimensionne l'image. Si une des deux dimension = 0, redimensionnement proportionnel.
		 * @param Integer $newW Largeur souhaitée
		 * @param Integer $newH Hauteur souhaitée
		 * @access public
		 * @return bool
		 */
		public function resize($newW,$newH)
		{
			$return = false;
			if(($newH != 0) OR ($newW != 0)) {
 
				if($newW == 0) {
 
			   		$scale = $newH / $this->height;
			   		$newW  = $this->width * $scale;
			   	}
			   	if($newH == 0) {
 
			   		$scale = $newW / $this->width;
			   		$newH  = $this->height * $scale;
			   	}
 
			   	$dst_img = imagecreatetruecolor($newW, $newH);
			   	$src_img = $this->source;
			   	if(imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $newW, $newH, $this->width, $this->height)) {
 
			   		$this->source = $dst_img;
			   		$this->width  = $newW;
			   		$this->height = $newH;
 
			   		$return = true;
			   	}
			   	@imagedestroy($tempImg);
			}
		   	return $return;
		}
 
		/**
	  	 * Sauvegarde l'image sur le disque
	   	 * @access public
	     * @param string $file Nom et chemin de fichier
	     * @return bool
	     */
	 	public function save($file, $qualite=95)
	 	{
	 		switch($this->type) {
 
				case 1: {
					if(imagegif($this->source,$file)) {
		 				return true;
		 			} else {
						return false;
					}
					break;
				}
 
				case 2: {
					if(imagejpeg($this->source, $file)) {
 
		 				return true;
		 			} else {
						return false;
					}
					break;
				}
 
				case 3: {
					if(imagepng($this->source,$file)) {
		 				return true;
		 			} else {
						return false;
					}
					break;
				}
			}
	 	}
 
	 	/**
	     * Affiche l'image sur la sortie standard
	     * @access public
	     * @return img
	     */
	 	public function display($qualite=100)
	 	{
	 		switch($this->type) {
 
				case 1: {
					header("Content-type: image/gif");
 					return imagegif($this->source);
 					break;
				}
 
				case 2: {
					header("Content-type: image/jpeg");
 					return imagegif($this->source);
 					break;
				}
 
				case 3: {
					header("Content-type: image/png");
 					return imagegif($this->source);
 					break;
				}
			}
		}
	}
 
?>
Le redimmensionnement fonctionne lorsque je fixe soit la hauteur soit la largeur. Mais je n'arrive pas à mettre en place la bonne boucle pour que je reste dans le gabarit 400*320. Le tout doit être fait en gardant les proportions de l'image.

Si quelqu'un à des idées se serait sympa.
Merci d'avance