Clase para redimensionar imagenes en php
December 16th, 2009
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