nombreImagenDestino = md5(uniqid(mt_rand(), true)). ".jpg"; //RECORREMOS LOS FORMATOS foreach($aDimensiones as $key => $dimension) { //comprobamos si el directorio destino tiene barra final,si no la tiene la ponemos y concatenamos el formato $dirDestino = $this->componerDirectorioDestino($directorioDestino,$dimension['ancho'],$dimension['alto']); //comprobamos si existe el directorio destino, si no lo creamos if($this->comprobarDirectorio($dirDestino,0777)) { //comenzamos el proceso de generación de la imagen $this->generarImagen($imagenOrigen,$directorioImagenRaw,$dirDestino,$dimension['ancho'],$dimension['alto'],$calidadImagenDestino,$modoRedimensionamiento); } } } //------------------------------------------------------------------------------------------ // MÉTODO QUE NOS PERMITE GENERAR UNA IMAGEN //------------------------------------------------------------------------------------------ function generarImagen($imagenRaw,$directorioImagenRaw,$directorioDestino,$dimensionAncho,$dimensionAlto,$calidadImagenDestino,$modoRedimensionamiento) { //obtenemos el path completo a la imagen raw $directorioImagenRaw = $this->andirSlash($directorioImagenRaw); $imagenRaw=$directorioImagenRaw.$imagenRaw; //------------------------------------------------------------------------------------------ // SEGÚN EL MODO DE REDIMENSIONAMIENTO PROCESAMOS DE UNA U OTRA FORMA LA IMAGEN //------------------------------------------------------------------------------------------ switch ($modoRedimensionamiento) { case "resize_then_crop": $this->resize_then_crop($imagenRaw,$directorioDestino,$this->nombreImagenDestino,$dimensionAncho,$dimensionAlto,$calidadImagenDestino,/*rgb*/"255","255","255"); break; case 'resize_centrada': $this->resize_centrada($imagenRaw,$directorioDestino,$this->nombreImagenDestino,$dimensionAncho,$dimensionAlto,$calidadImagenDestino,/*rgb*/"255","255","255"); break; } } //------------------------------------------------------------------------------------------ // // MÉTODOS DE REDIMENSIONAMIENTO DE IMAGENES // //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ // MÉTODO RESIZE THEN CROP //------------------------------------------------------------------------------------------ function resize_then_crop($imagenRaw,$directorioDestino,$nombreImagenDestino,$dimensionAnchoDestino,$dimensionAltoDestino,$calidadImagenDestino,$red,$green,$blue, $crop = false) { //obtenemos la información de la imagen origen $aAtributosImagen = @getimagesize($imagenRaw); //sacamos los atributos de la imagen $this->ancho = $aAtributosImagen[0]; $this->alto = $aAtributosImagen[1]; $this->mimeType = $aAtributosImagen['mime']; $this->peso = filesize($imagenRaw); //reservamos la memoria para el proceso ini_get("memory_limit"); ini_set("memory_limit",$this->memory_limit); ini_set("max_execution_time",$this->max_execution_time); //vemos de donde redimensionamos la imagen $aDimensaionesDestinoImagen = $this->calculoProporcionalImagenDestino($this->ancho,$this->alto,$dimensionAnchoDestino,$dimensionAltoDestino); $pImage = $this->imageCreateFrom($this->mimeType,$imagenRaw); $thumb = imagecreatetruecolor($dimensionAnchoDestino , $dimensionAltoDestino); $bgcolor = imagecolorallocate($thumb, $red, $green, $blue); ImageFilledRectangle($thumb, 0, 0, $width, $height, $bgcolor); imagealphablending($thumb, true); imagecopyresampled($thumb, $pImage, 0, 0, 0, 0,$aDimensaionesDestinoImagen['ancho'], $aDimensaionesDestinoImagen['alto'], $this->ancho, $this->alto); //--------------------------------------------------------------------------- //INSERTAMOS LA MARCA DE AGUA //--------------------------------------------------------------------------- if($this->watermark!='') { $watermark = $_SERVER['DOCUMENT_ROOT'].$this->watermark; $im = imagecreatefrompng($watermark); $waterSize = @getimagesize($watermark); $factorRedimensaoinamiento = 500; // Tenemos que redimensionar la marca de agua, dependiendo de la imagen destino $ancho = ($dimensionAnchoDestino * $waterSize[0])/$factorRedimensaoinamiento; $alto = ($dimensionAltoDestino * $waterSize[1])/$factorRedimensaoinamiento; $logo = imagecreatetruecolor($ancho , $alto); $bgcolor = imagecolorallocate($logo, $red, $green, $blue); $transparent_color = imagecolorallocate($logo, 255, 0, 0); imagecolortransparent($logo, $transparent_color); ImageFilledRectangle($logo, 0, 0, $ancho, $alto, $transparent_color); imagealphablending($logo, false); imagecopyresampled($logo, $im, 0, 0, 0, 0,$ancho, $alto, $waterSize[0], $waterSize[1]); } //--------------------------------------------------------------------------- //fusionamos el logo y la imagen imagecopy($thumb, $logo, (imagesx($thumb)/2)-(imagesx($logo)/2), (imagesy($thumb)/2)-(imagesy($logo)/2), 0, 0, imagesx($logo), imagesy($logo)); if ($nombreImagenDestino !="") { $archivoDestino = $this->andirSlash($directorioDestino).$nombreImagenDestino; imagejpeg($thumb,$archivoDestino,$calidadImagenDestino); // guardamos el archivo generado } } //------------------------------------------------------------------------------------------ // MÉTODO RESIZE THEN CROP //------------------------------------------------------------------------------------------ function resize_centrada($imagenRaw,$directorioDestino,$nombreImagenDestino,$dimensionAnchoDestino,$dimensionAltoDestino,$calidadImagenDestino,$red,$green,$blue, $crop = false) { //obtenemos la información de la imagen origen $aAtributosImagen = @getimagesize($imagenRaw); //sacamos los atributos de la imagen $this->ancho = $aAtributosImagen[0]; $this->alto = $aAtributosImagen[1]; $this->mimeType = $aAtributosImagen['mime']; $this->peso = filesize($imagenRaw); //reservamos la memoria para el proceso ini_get("memory_limit"); ini_set("memory_limit",$this->memory_limit); ini_set("max_execution_time",$this->max_execution_time); //vemos de donde redimensionamos la imagen $aDimensaionesDestinoImagen = $this->calculoProporcionalImagenDestino($this->ancho,$this->alto,$dimensionAnchoDestino,$dimensionAltoDestino); $pImage = $this->imageCreateFrom($this->mimeType,$imagenRaw); $thumb = imagecreatetruecolor($dimensionAnchoDestino , $dimensionAltoDestino); $bgcolor = imagecolorallocate($thumb, $red, $green, $blue); ImageFilledRectangle($thumb, 0, 0, $width, $height, $bgcolor); imagealphablending($thumb, true); $destX = ($dimensionAnchoDestino - $aDimensaionesDestinoImagen['ancho']) / 2; $destY = ($dimensionAltoDestino - $aDimensaionesDestinoImagen['alto']) / 2; imagecopyresampled($thumb, $pImage, $destX, $destY, 0, 0,$aDimensaionesDestinoImagen['ancho'], $aDimensaionesDestinoImagen['alto'], $this->ancho, $this->alto); //--------------------------------------------------------------------------- //INSERTAMOS LA MARCA DE AGUA //--------------------------------------------------------------------------- if($this->watermark!='') { $watermark = $_SERVER['DOCUMENT_ROOT'].$this->watermark; $im = imagecreatefrompng($watermark); $waterSize = @getimagesize($watermark); $factorRedimensaoinamiento = 500; // Tenemos que redimensionar la marca de agua, dependiendo de la imagen destino $ancho = ($dimensionAnchoDestino * $waterSize[0])/$factorRedimensaoinamiento; $alto = ($dimensionAltoDestino * $waterSize[1])/$factorRedimensaoinamiento; $logo = imagecreatetruecolor($ancho , $alto); $bgcolor = imagecolorallocate($logo, $red, $green, $blue); $transparent_color = imagecolorallocate($logo, 255, 0, 0); imagecolortransparent($logo, $transparent_color); ImageFilledRectangle($logo, 0, 0, $ancho, $alto, $transparent_color); imagealphablending($logo, false); imagecopyresampled($logo, $im, 0, 0, 0, 0,$ancho, $alto, $waterSize[0], $waterSize[1]); } //--------------------------------------------------------------------------- //fusionamos el logo y la imagen imagecopy($thumb, $logo, (imagesx($thumb)/2)-(imagesx($logo)/2), (imagesy($thumb)/2)-(imagesy($logo)/2), 0, 0, imagesx($logo), imagesy($logo)); if ($nombreImagenDestino !="") { $archivoDestino = $this->andirSlash($directorioDestino).$nombreImagenDestino; imagejpeg($thumb,$archivoDestino,$calidadImagenDestino); // guardamos el archivo generado } } //------------------------------------------------------------------------------------------ // MÉTODO PARA OBTENER LA IMAGEN EN MEMORIA //------------------------------------------------------------------------------------------ function imageCreateFrom($format,$imagenRaw) { switch($format) { case 'image/jpeg': $image = imagecreatefromjpeg($imagenRaw); break; case 'image/gif'; $image = imagecreatefromgif($imagenRaw); break; case 'image/png': $image = imagecreatefrompng($imagenRaw); break; case 'image/bmp': $image = ImageCreateFromBMP($imagenRaw); break; } return $image; } //------------------------------------------------------------------------------------------ // MÉTODO PARA VER POR DONDE HEMOS DE REDIMENSIONAR LA IMAGEN //------------------------------------------------------------------------------------------ function calculoProporcionalImagenDestino($dimensionAnchoImagenOrigen,$dimensionAltoImagenOrigen,$dimensionAnchoImagenDestino,$dimensionAltoImagenDestino) { $aDimensionesDestino = array(); //para calcular que parte de la imagen origen redimensionar //restamos los anchos y altos de origen y destino y el que sea menor //es el que tenemos que adecuar al destino, el otro se hace proporcional //lo hacemos en valor absoluto, por si la imagen origen es mas pequeña que la destino $distanciaAncho = abs($dimensionAnchoImagenOrigen-$dimensionAnchoImagenDestino); $distanciaAlto = abs($dimensionAltoImagenOrigen-$dimensionAltoImagenDestino); if($distanciaAncho>$distanciaAlto) { $aDimensionesDestino['alto'] = $dimensionAltoImagenDestino; $aDimensionesDestino['ancho'] = $dimensionAnchoImagenOrigen*$dimensionAltoImagenDestino/$dimensionAltoImagenOrigen; } else { $aDimensionesDestino['alto'] = $dimensionAnchoImagenDestino*$dimensionAltoImagenOrigen/$dimensionAnchoImagenOrigen; $aDimensionesDestino['ancho'] = $dimensionAnchoImagenDestino; } return $aDimensionesDestino; } //------------------------------------------------------------------------------------------ // MÉTODO QUE NOS DEVUELVE EL DIRECTORIO DESTINO CON LAS CARPETAS DE FORMATO CREADAS //------------------------------------------------------------------------------------------ function componerDirectorioDestino($directorio,$dimensionAncho,$dimensionAlto) { //si no tiene barra final, la ponemos $directorio = $this->andirSlash($directorio); $directorio = $directorio.$dimensionAncho.'x'.$dimensionAlto; return $directorio; } //------------------------------------------------------------------------------------------ // MÉTODO PARA ANADIR UNA BARRA AL DIRECTORIO //------------------------------------------------------------------------------------------ function andirSlash($directorio) { //si no tiene barra final, la ponemos if ($directorio[strlen($directorio)-1] != "/") { $directorio .= '/'; } return $directorio; } //------------------------------------------------------------------------------------------ // MÉTODO PARA COMPROBAR SI EXISTE EL DIRECTORIO, SI NO LO CREA //------------------------------------------------------------------------------------------ function comprobarDirectorio($path,$permisos) { $procesado = false; //comprobamos que el path destino es un directorio y existe if(!is_dir($path)) { //si no existe le creamos y damos permisos if(mkdir($path,$permisos)) { //forzamos los permisos, mkdir no los ejecuta correctamente a veces if(chmod($path, $permisos)) { $procesado = true; } } } else { $procesado = true; } return $procesado; } } ?> seccion = $seccion; $this->pagina = $pagina; $this->url = $url; $this->idClase = $clase; $this->numTotalResultados = $numTotalResultados; $this->numResultadosPorPagina = $numResultadosPorPagina; //calculamos el numero total de paginas $this->totalPaginas = ceil($numTotalResultados/$numResultadosPorPagina); //echo 'total páginas '.$this->totalPaginas.'
'; //calculamos el numero de grupos de paginas $this->numGrupos = ceil($this->totalPaginas/$this->numNumerosVisibles); //echo 'total grupos '.$this->numGrupos.'
'; //pagina actual $this->paginaActual = $this->pagina/$this->numResultadosPorPagina+1; //creamos un array cuyo indice sea el grupo y los valores las paginas for($n=0;$n<$this->totalPaginas;$n++) { //dividimos la pagina entre el número de elementos visibles $grupo = floor($n/$this->numNumerosVisibles); $this->aGruposPaginas[$grupo][] = $n; } //var_dump($this->aGruposPaginas); //vamos a obtener en que grupo esta la pagina actual for($n=0;$naGruposPaginas);$n++) { if (in_array($this->paginaActual-1, $this->aGruposPaginas[$n])) $this->grupoActivo = $n; } } //------------------------------------------------------------------- // Funcion que renderiza el paginador //------------------------------------------------------------------- function render() { require $_SERVER['DOCUMENT_ROOT'].'/includes/recursos/locales/'.LOCALES.'.php'; if($this->numTotalResultados > 0 && $this->totalPaginas > 1) { echo '
'.$this->numTotalResultados.' '.$LANG['paginadorRegistros'].'. '.$LANG['paginadorPagina'].' '.$this->paginaActual.'/'.$this->totalPaginas.'
'; } } } ?> renderMetatags(); ?>