bueno, he hecho una clase que sirve para redimensionar imagenes, es necesario tener instalada la libreria gd del php, he tratado de que se lo mas general posible, la clase tiene dos metodos utilizables que son
resizeImg() sirve para hacer un resize a un solo archivo de imagen y el otro resizeDir() que sirve que hacer resize a todas las imagenes contenidas en un directorio.

La verdad es que me ha sido muy util, sobre todo porque algunas veces es necesario sacar miniaturas de las imagenes de un directorio el problema es que a veces pueden ser cientos de imagenes y cambiarles el tamaƱo a mano es una tarea pesado, pero con esta clase solo es necesario pasarle algunos parametro ejecutar el script y listo.

La clase tiene un metodo que verifica los parametros pasados a los metodos, si existe algun error con alguno de los parametros se genera una exepcion mostrando un mensaje describiendo el error y se termina la ejecucion del metodo sin tirar warnings ni errores fatales.

La clase redimensiona imagenes gif, png y jpg se le puede especificar el ancho, el alto o ambos, se puede espeficiar el directorio donde estan las imagenes a redimensionar y tambien el directorio de salida de las miniaturas. si estos ultimos 2 parametros se dejan en blanco la clase trabajara sobre el directorio donde se encuentra el script que ejecuta la clase.

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
<?php
 
/*
* Autor: Eduardo Guerrero
* Creacion: 14.12.2009
*
* Redimensiona una imagen individual o todas las imagenes de un directorio
* metodos publicos: 
*		resizeDir($args[]) redimensiona las imagenes de un directorio
*		resizeImg($args[]) redimensiona una imagen
*/
 
 
class imageResize {
 
 
	private $prefijo = "thumb_";
	private $dir;
	private $nuevodir;
	private $tipos = array("gif"=>"image/gif", "jpeg"=>"image/jpeg", "png"=>"image/png");
 
 
/*
*Redimensiona una imagen
*
*@param array $args[]
*@param $args['dir'] esta vacio se redimensionaran las imagenes del directorio donde se ejecuta el script que llamo a esta clase
*@param $args['prefijo'] esta vacio se usara thumb_
*@param menos $args['x'] o $args['x'] deben estar definidas con valores mayores que cero
*@param $args['nuevodir'] las copias redimensionadas se almacenaran en el directorio donde se ejecuta el script que llamo a esta clase
*/
	public function resizeDir( $args ){
 
		try{
			$this->checkArgs($args, 0);
		}catch ( Exception $error ){
			echo $error->getMessage();
			return 0;
		}
 
		$this->valDefault($args);
 
		$archivos = scandir( $this->dir, 1 );
 
		for ( $i=0;$i<sizeof($archivos)-2;$i++ ){
			if ( is_file($archivos[$i]) ){
				$tamano = getimagesize( $archivos[$i] );
				if ($tamano && array_search(image_type_to_mime_type($tamano[2]), $this->tipos) ){
					$medidas = $this->obtenerMedidas($args, $tamano);
					$tipo = image_type_to_mime_type($tamano[2]);
					$medidas = $this->obtenerMedidas( $args, $tamano );
					$origen = $this->dir."/".$archivos[$i];
					$destino = $this->nuevodir."/".$this->prefijo.$archivos[$i];
					$this->resize( $origen, $destino, $tipo, $tamano, $medidas );
				}
			}
		}
	}
 
/*
*Redimensiona las imagenes dentro de un directorio
*
*@param array $args[]
*@param $args['dir'] debe contener la ruta completa de la imagen a redimensionar incluyendo nombre de archivo
*@param $args['prefijo'] esta vacio se usara thumb_
*@param menos $args['x'] o $args['x'] deben estar definidas con valores mayores que cero
*@param $args['nuevodir'] la copia redimensionada se almacenara en el directorio donde se ejecuta el script que llamo a esta clase
*/
	public function resizeImg( $args ){
		try{
			$this->checkArgs($args, 1);
		}catch ( Exception $error ){
			echo $error->getMessage();
			return 0;
		}
 
		$this->valDefault($args);
 
		$origen = $this->dir;
		$destino = $this->nuevodir."/".$this->prefijo.basename($this->dir);
		$tamano = getimagesize( $this->dir );
		$tipo = image_type_to_mime_type($tamano[2]);
		$medidas = $this->obtenerMedidas( $args, $tamano );
 
		$this->resize( $origen, $destino, $tipo, $tamano, $medidas );
	}
 
	private function resize( $origen, $destino, $tipo, $tamano, $medidas){
 
			$extension = array_search( $tipo, $this->tipos );
 
			$imageCreateFrom = "imagecreatefrom".$extension;
			$image = "image".$extension;
			$contenido = $imageCreateFrom($origen);
			$recipiente = imagecreatetruecolor($medidas['x'], $medidas['y']);
			imagecopyresampled($recipiente, $contenido, 0, 0, 0, 0, $medidas['x'], $medidas['y'], $tamano[0], $tamano[1]);	
			$image($recipiente, $destino);
			imagedestroy($contenido);
			imagedestroy($recipiente);
 
	}
 
	private function obtenerMedidas( $args, $tamano ){
		if ( !empty($args['x']) && !empty($args['y'])){
			$medidas['x'] = $args['x'];
			$medidas['y'] = $args['y'];
			return $medidas;
		}
		if ( !empty($args['x']) ){
			if ($tamano[0] > $tamano[1]){
				$medidas['x'] = $args['x'];
				$medidas['y'] = (integer)(($args['x'] * $tamano[1])/$tamano[0]);
			}else{
				$medidas['x'] = (integer)(($args['x']*$tamano[0])/$tamano[1]);
				$medidas['y'] = $args['x'];
			}
			return $medidas;
 
		}
		if ( !empty($args['y']) ){
			if ($tamano[0] > $tamano[1]){
				$medidas['y'] = $args['y'];
				$medidas['x'] = (integer)(($args['y'] * $tamano[0])/$tamano[1]);
			}else{
				$medidas['y'] = (integer)(($args['y']*$tamano[1])/$tamano[0]);
				$medidas['x'] = $args['y'];
			}
			return $medidas;
		}
	}
 
	private function valDefault($args){
		if ( !empty($args['prefijo']) ) $this->prefijo = $args['prefijo'];
		( empty( $args['dir'] ) ) ? $this->dir = dirname(__FILE__) : $this->dir = $args['dir'];
		( empty( $args['nuevodir'] ) ) ? $this->nuevodir = dirname(__FILE__) : $this->nuevodir = $args['nuevodir'];
	}
 
	private function checkArgs($args, $tipo ){
		//verificacion de parametros
 
			if ( $tipo == 0 ){
				if ( array_key_exists("dir", $args) && !empty($args['dir']) && !is_dir($args['dir'])) 
				throw new Exception($args['dir']." no es un directorio valido");
			}else{
				if ( !array_key_exists("dir", $args))
				throw new Exception("Hay que definir la clave dir en el array args");
 
				if ( !is_file($args['dir']) )
				throw new Exception("la clave dir debe contener un archivo");
 
				if ( !getimagesize( $args['dir'] ) )
				throw new Exception("la clave dir debe contener un archivo de imagen valido");
 
				$info = getimagesize( $args['dir'] );
				if ( !array_search( image_type_to_mime_type($info[2]), $this->tipos ) )
				throw new Exception("Tipo de imagen no soportado");
			}
 
			if ( !array_key_exists("x", $args) && !array_key_exists("y", $args))
			throw new Exception( "Hay que definir al menos la clave x o la clave y en el array args" );
 
			if ( empty($args['x']) && empty($args['y']))
			throw new Exception( "al menos x o y deben tener valores no vacios, mayores que cero" );
 
			if ( ( !empty($args['x']) && !is_numeric($args['x'])) or ( !empty($args['y'])  && !is_numeric($args['y'])) ) 
			throw new Exception( "al menos x o y deben tener valores numericos validos mayores que cero" );
 
			if ( array_key_exists("nuevodir", $args) && !empty( $args['nuevodir'] ) && !is_dir($args['nuevodir']))
			throw new Exception( "El directorio de salida: ".$args['nuevodir']. " no es valido" );
	}
 
 
}
?>

Leave a Reply