Foros del Web » Programando para Internet » PHP »

Quien me regala un consejo

Estas en el tema de Quien me regala un consejo en el foro de PHP en Foros del Web. Buenas tardes Me regalan un par de consejos por favor. Estoy creando un foro en el cual las personas que se matriculan a traves de ...
  #1 (permalink)  
Antiguo 26/06/2012, 16:27
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 13 años, 4 meses
Puntos: 1
Quien me regala un consejo

Buenas tardes

Me regalan un par de consejos por favor.

Estoy creando un foro en el cual las personas que se matriculan a traves de un formulario pueden subir una foto personal.

Pregunto:

1. ¿Guardo la foto en un campo de la tabla o lo guardo en un carpeta de imagenes? Si es un campo de la tabla que especificaciones debe tener el campo?

2. Existe algun procedimiento seguro para subir imagenes. Tengo uno pero me dicen que muy inseguro no se por que?

3. Cuando se visualiza la foto, como hago para que se vea bien en el recuadro de 150px, 150px que tengo definido para la foto, algunas fotos me quedan distorcionadas. Los usuarios cargan las fotos de tamaños diferentes. a pesar de que se les dice que deben se de un tamaño especifico.

Gracias por sus consejos y tiempo

Isabel.
  #2 (permalink)  
Antiguo 26/06/2012, 16:42
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Quien me regala un consejo

Hola lo mejor es cargar en la bd el nombre de la foto y la foto en una carpeta.

Yo tengo este código para cargar las fotos y hacerle un resize al tamaño que deseas:

Código PHP:
Ver original
  1. require_once 'func/ResizePicture.php';
  2.  
  3. //FOTO USUARIOS
  4.  
  5. $foto_nombre =  $_POST['nombre_usuario'];
  6.  
  7. $foto = $_POST['foto'];
  8.  
  9.  
  10. $ruta1 = "../usuarios/fotos/";
  11.  
  12. $extension = "jpg";
  13.  
  14. $image = new ResizePicture($_FILES['foto']['tmp_name'],true);
  15.  
  16.         $image->resize(150,150);
  17.         //$w444 = 'w444_' . $_FILES['foto']['name'];
  18.         $w444 = $foto_nombre. '.' . $extension;
  19.         $image->save($ruta1.$w444);
  20.  
  21. query = "INSERT INTO usuarios (id_usuario, foto_ruta) VALUES ('$id_posada', '$w444 ')";
  22. mysql_query($query) or die(mysql_error());

Algo asi... pruebalo y espero que te ayude
__________________
Caminando con el corazón partío
  #3 (permalink)  
Antiguo 26/06/2012, 22:07
Avatar de manuparquegiralda  
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 241
Antigüedad: 11 años, 9 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.
  #4 (permalink)  
Antiguo 26/06/2012, 22:36
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: Quien me regala un consejo

1. ¿Guardo la foto en un campo de la tabla o lo guardo en un carpeta de imagenes? Si es un campo de la tabla que especificaciones debe tener el campo?

Guarda solo la ruta, porque sino tendrias que guardalo como blob, y haria tus querys mas lentos

2. Existe algun procedimiento seguro para subir imagenes. Tengo uno pero me dicen que muy inseguro no se por que?

Lo mejor que deberias hacer es crear 3 copias de las imagenes, la del tamaño mas grande, la mediana, y la pequeña que puede ser para el avatar no ?

3. Cuando se visualiza la foto, como hago para que se vea bien en el recuadro de 150px, 150px que tengo definido para la foto, algunas fotos me quedan distorcionadas. Los usuarios cargan las fotos de tamaños diferentes. a pesar de que se les dice que deben se de un tamaño especifico.


El usuario no va a redimenzionar las imagenes, tu debes hacerlo, lo que tu debes validar es que no sobrepasen el limite de subida del host

Etiquetas: consejo, formulario, imagenes, tabla, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:23.