Ver Mensaje Individual
  #3 (permalink)  
Antiguo 26/06/2012, 22:07
Avatar de manuparquegiralda
manuparquegiralda
 
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 241
Antigüedad: 11 años, 10 meses
Puntos: 39
Respuesta: Quien me regala un consejo

Hola, como bien ha dicho Kimmy, lo mejor es guardar la foto en una carpeta de tu servidor y en la BD guardas únicamente la URL a esa foto.

Respecto a lo de la seguridad, no se decirte muy bien, imagino que la seguridad es la que tu ofrezcas en tu hosting mas que la funcion que guarda la foto en el servidor.

Con respecto a lo del tamaño de las fotos, eso siempre presenta un problema y muchos dolores de cabeza me ha dado hasta poder conseguirlo. Verás, como bien has dicho, cada usuario sube la foto de un tamaño distinto, yo cuando la guardo en el servidor la redimensiono proporcionalemente a un ancho o un largo máximo dependiendo de si sea mas ancha que larga o viceversa. De este modo la foto queda debidamente reducida en tamaño y proporcionada.

Después a la hora de mostrarla, la meto dentro de una division con style="overflow:hidden;" y con una funcion detecto si es mas ancha que larga o viceversa y le doy un left y un top negativo automatico para que la foto quede centrada. El codigo será un poco lioso, pero te lo paso a ver si te sirve de ayuda.



Esta es la función que redimensiona la foto de la URL de tu servidor donde se encuentre y te retorna una division con la imagen y los parametros correspondientes según las dimensiones de la foto. Esta funcion las llamas desde el codigo HTML de mas abajo.
Código PHP:

//Funcion de ridemensionar fotos

function redimensionar($foto,$alto_capa,$ancho_capa){
    if(
$foto == ""){
        
$foto "URL foto por defecto para todos los usuarios";
    }
    
    
$altoancho GetImageSize($foto);  
    
$alto $altoancho[1];
    
$ancho $altoancho[0];
    
    if((
$ancho $alto)or($ancho == $alto)){
    
        
$resta $alto $alto_capa;
        
$porcentaje = ($resta*100)/$alto;
        
$ancho_def $ancho-(($ancho*$porcentaje)/100);    
    
        
$alto $alto_capa;
        
$ancho round($ancho_def);
        
$prop_left round(($ancho_capa*15)/100);
        if(
$ancho < ($ancho_capa $prop_left)){
            
$ancho $ancho_capa $prop_left;
        }
        
$style "left:-".$prop_left."px";
    
    }else if(
$ancho $alto){
    
        
$resta $ancho $ancho_capa;
        
$porcentaje = ($resta*100)/$ancho;
        
$alto_def $alto-(($alto*$porcentaje)/100);
    
        
$ancho $ancho_capa;
        
$alto round($alto_def);
        
$prop_top round(($alto_capa*10)/100);
        if(
$alto < ($alto_capa $prop_top)){
            
$alto $alto_capa $prop_top;
        }
        
$style "top:-".$prop_top."px";
    
    }

return 
'<div style=" position:absolute; '.$style.'">
            <img src="'
.$foto.'" width="'.$ancho.'px" height="'.$alto.'px" />
        </div>
        '
;        

Este sería el codigo HTML en el que muestras la foto llamando a la función anterior.
Código CSS:
Ver original
  1. .fotoPerfil{
  2.     position:relative;
  3.     height:80px;
  4.     width:80px;
  5.     overflow:hidden;
  6. }
Código HTML:
Ver original
  1. <div id="fotoPerfil" class="fotoPerfil">
  2.     <!--AQUÍ LLAMAS A LA FUNCION DE REDIMENSIONAR CON LAS DIMENSIONES EN LAS QUE QUIERAS MOSTRAR  LAS FOTOS-->
  3.     <? echo redimensionar("URL de la foto",80,80) ?>
  4. </div>

Con este cógo te mostraría la foto que sea con unas dimensiones de 80 x 80 y te la encuadraría dentro de la divisón "fotoPerfil" que es overflow de manera que aproximadamente quede en el centro de la pantalla, recuerda que la funcion "redimensionar" te devuelve una division HTML.



Ahora para subir las fotos al servidor reduciencoles el tamaño de manera proporcional utilizo esta funcion.
Código PHP:
$fotoOriginal "La foto original que sube el usuario";
$altoancho GetImageSize($fotoOriginal);
$ancho $altoancho[0];
$alto $altoancho[1];
//Destino foto normal
$destinoNorm "URLdestino.jpg";    
//Proporcionamos la imagen a un maximo de 120px para un lado
if(($ancho 120)&&($alto 120)){
    if((
$ancho $alto)or($ancho == $alto)){
           
$resta $ancho 120;
        
$porcentaje = ($resta*100)/$ancho;
        
$alto_def $alto-(($alto*$porcentaje)/100);

        
$alto round($alto_def);
        
$ancho 120;
    }else if(
$ancho $alto){
            
$resta $alto 120;
        
$porcentaje = ($resta*100)/$alto;
        
$ancho_def $ancho-(($ancho*$porcentaje)/100);
            
        
$alto 120;
        
$ancho round($ancho_def);
    }
}else{
    
$ancho $altoancho[0];
    
$alto $altoancho[1];
}
//Copiamos la imagen dentro de un thumb redimensionado y la subimos al servidor
$thumb imagecreatetruecolor($ancho,$alto);
$resource imagecreatefromjpeg($fotoOriginal);
imagecopyresampled($thumb,$resource,0,0,0,0,$ancho,$alto,$altoancho[0],$altoancho[1]);
$copy imagejpeg($thumb,$destinoNorm,90);
imagedestroy($thumb); 
Este codigo te la redimensiona proporcionalemente a un ancho o un alto máximo de 120px dependiendo de las dimensiones de la foto, si es mas alta que ancha o mas ancha que alta. Y despues la copia en el servidor via FTP.


Espero que te sirva y te ahorre los dolores de cabeza que me ha dado a mi.