Foros del Web » Programando para Internet » PHP »

Ayuda con tema de imagenes y thumbs

Estas en el tema de Ayuda con tema de imagenes y thumbs en el foro de PHP en Foros del Web. Soy nuevo en esto del php y estoy empezando a trastear con ello. Mi problema es que necesito subir cuatro imagenes de casas con un ...
  #1 (permalink)  
Antiguo 03/12/2004, 13:32
 
Fecha de Ingreso: diciembre-2004
Mensajes: 32
Antigüedad: 13 años
Puntos: 0
Ayuda con tema de imagenes y thumbs

Soy nuevo en esto del php y estoy empezando a trastear con ello.
Mi problema es que necesito subir cuatro imagenes de casas con un comentario de ellas un numero de referencia, una fecha y poco más.
Las imagenes que usa la persona siempre van a estar en una resolución demasiado grande y eso es un problema para mi porque necesito que se trabaje con las imagenes a dos tamaños distintos, primero subo la imagen y los otros datos a la base de datos, uso GD, así que lo que obtengo es una dirección de la imagen, bueno de las cuatro imagenes y esa imagen es la grande y no me vale, hay alguna forma de que según suba ya se haga por ejemplo un thumbnail a una medida para que ya quede guardada en la carpeta que yo asigno a una medida más pequeña y ya me quede también en la dirección de la base de datos la nueva foto (el campo se llamaría imagen1, imagen2......) y la foto real a tamaño original quede borrada, poque después tendría que volver a hacer un thumbnail para cuando hago por ejemplo una consulta y muestro una miniatura con un breve texto y enlace ver más para que al pinchar ahí salga una ventanita nueva con los datos enteros y la foto ya más grande, la primera thumbnail que se creo, Es que he leído los ejemplos que aquí salen para hacer thumbnails y no me aclaro con ellos. Lo de hacer el formulario para subir todo lo que necesito no tengo problema y para hacer una consulta a la base de datos tampoco, el problema son los tamaños, uso una carpeta llamada temporal donde digo que me suban las imagenes, alguien puede hecharme una mano porque la verdad es que creo que esto me biene algo grande, gracias de antemano
  #2 (permalink)  
Antiguo 04/12/2004, 02:12
mon
 
Fecha de Ingreso: febrero-2003
Mensajes: 506
Antigüedad: 14 años, 10 meses
Puntos: 0
A mi también me interesa este tema, a ver si hay suerte
  #3 (permalink)  
Antiguo 04/12/2004, 13:36
 
Fecha de Ingreso: diciembre-2004
Mensajes: 32
Antigüedad: 13 años
Puntos: 0
Buff, no hay nadie que me pueda ayudar?, por favor
  #4 (permalink)  
Antiguo 04/12/2004, 18:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Resumiendo ...

que es lo que pretendes hacer:
1) Subir tu imagen a tamaño origial y que se PHP el que procese esa imagen para generar un "thumbnail" y guardarlo en tu sistema de archivos (en algún directorio para tal fin) junto con el nombre que quede en tu BD o darle el nombre de la imagen que uses como referencia.

2) Generar el Thumbnail en tiempo real desde tu imagen origial a tamaño y peso original cuando se pida (cuando la muestres donde la necesites).

A todo esto .. la imagen en sì la subes por HTTP ya? .. es decir .. por tu formulario HTML con su campo "file" y lo gestionas ya con PHP?.

A nivel de rendimiento .. es mejor generar el thumbnail al subir tu imagen y dejarla ya creada que no generarla dinámicamente cada vez que las pidas (para tu caso concreto). Es decir .. hacer lo que menciono en el punto 1.

En las FAQ's de este foro y si buscas en el foro hay muchas funciones creadas ya para hacer el "thumbnail" .. lo único que tienes que hacer es "engancharlo" en el punto que corresponde de (supongo) tu actual rutina que gestiona el "Upload" de la imagen. De hecho si tu quieres mantener la imagen original a su tamaño y peso original y crear el thumnail de esta . .màs sencillo es ..pero podrías también "optimizar" esa imagen "grande" dejandola a un tamaño y sobre todo "peso" (lo puedes hacer si generas .jpg ajustando el ratio de compresión).

Un saludo,
  #5 (permalink)  
Antiguo 05/12/2004, 04:30
 
Fecha de Ingreso: diciembre-2004
Mensajes: 32
Antigüedad: 13 años
Puntos: 0
Gracias por tu ayuda Cluster, mira he estado trasteando con los códigos que encuentro por aquí y he conseguido hacer esto, te recuerdo que soy novato en esto del php así que disculpame si ves alguna metedura de pata muy grande, bueno te explico, ya tengo el formulario típico que se suele usar para este fín, mando los datos al archivo subearchivo.php, subo la imagen a una carpeta llamada temporal y hago directamente un thumbnail que me lo guarda en otra carpeta llamada thumbs que esta dentro de temporal, hasta ahí todo perfecto, ahora el problemilla que tengo, bueno decirte que todo esto lo estoy haciendo con una sola imagen para poder coger el concepto y entender como funciona esto despues tengo que hacerlo para cuatro imagenes a la vez, te decía, que el problemilla que tengo ahora es como decirle que me meta en la base de datos esa imagen que acabo de reducir y que está en la carpeta temporal/thumbs/imagenreducida, he usado el código que antes usaba para con la imagen en tamaño normal sin reducir y que me funcionaba pero debo estar poniendo mal el nombre o algo porque el error que me dá es:

Parse error: parse error, unexpected T_ELSE

Mira te pongo el código que uso y te marco cual es la línea en el para que veas como lo estoy haciendo. Está abajo del todo
el nombre de la base de datos es mon y la tabla pisos.

subearchivo.php
Código PHP:
<?
//tomo el valor de un elemento de tipo texto del formulario
$cadenatexto $_POST["cadenatexto"];
echo 
"Escribió en el campo de texto: " $cadenatexto "<br><br>";

//datos del arhivo
$nombre_archivo $_FILES['userfile']['name']; //nombre original del archivo
$tipo_archivo $_FILES['userfile']['type'];
$tamano_archivo $_FILES['userfile']['size'];
//compruebo si las características del archivo son las que deseo
if (!((strpos($tipo_archivo"gif") || strpos($tipo_archivo"jpeg") || strpos($tipo_archivo"JPEG") ) && ($tamano_archivo 1000000000))) {
    echo 
"La extensión o el tamaño de los archivos no es correcta. <br><br><table><tr><td><li><br><li></td></tr></table>";
}else{
    if (
move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'],"temporal/".$nombre_archivo)){
        echo 
"El archivo ha sido cargado correctamente.";
    }else{
        echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse.";
    }
}
// hago la priemera reducción de tamaño
function thumbjpeg($imagen,$altura) { 
     
// Lugar donde se guardarán los thumbnails respecto a la carpeta donde está la imagen "grande". 
     
$dir_thumb "thumbs/"
     
// Prefijo que se añadirá al nombre del thumbnail. Ejemplo: si la imagen grande fuera "imagen1.jpg", 
     // el thumbnail se llamaría "tn_imagen1.jpg" 
     
$prefijo_thumb "tn_"

     
// Aquí tendremos el nombre de la imagen. 
     
$nombre=basename($imagen); 
     
// Aquí la ruta especificada para buscar la imagen. 
     
$camino=dirname($imagen)."/temporal/"

     
// Intentamos crear el directorio de thumbnails, si no existiera previamente. 
     
if (!file_exists($camino.$dir_thumb)) 
          @
mkdir ($camino.$dir_thumb0777) or die("No se ha podido crear el directorio ".$camino.$dir_thumb); 

     
// Aquí comprovamos que la imagen que queremos crear no exista previamente 
     
if (!file_exists($camino.$dir_thumb.$prefijo_thumb.$nombre)) { 
          echo 
$camino.$dir_thumb.$prefijo_thumb.$nombre." NO existía<br>\n"
          
$img = @imagecreatefromjpeg($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>\n"); 

          
// miramos el tamaño de la imagen original... 
          
$datos getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>\n"); 

          
// intentamos escalar la imagen original a la medida que nos interesa 
          
$ratio = ($datos[1] / $altura); 
          
$anchura round($datos[0] / $ratio); 

          
// esta será la nueva imagen reescalada 
          
$thumb imagecreatetruecolor($anchura,$altura); 

          
// con esta función la reescalamos 
          
imagecopyresampled ($thumb$img0000$anchura$altura$datos[0], $datos[1]); 

          
// voilà la salvamos con el nombre y en el lugar que nos interesa. 
          
imagejpeg($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre); 
     } 
}

//ejecuto la acción
thumbjpeg($nombre_archivo125); 
// hasta aquí consigo que todo funcione bien, me sube la primera imagen a la carpeta temporal y luego me la reduce y la guarda en la carpete thumbs dentro de temporal
//ahora conecto con la bd y al añadir esto es cuando me sale el error
$conexion mysql_connect("localhost","root","") or die("No se pudo realizar la conexion con el servidor."); 
mysql_select_db("mon",$conexion) or die("No se puede seleccionar BD"); 

//insertamos los datos en la BD. 
$consulta_insertar "INSERT INTO pisos (id,imagen) VALUES ('','temporal/thumbs/$thumb')"//aquí tengo que poner que guarde la imagen reducida no sé si está bien el nombre  y la dirección $thumb
echo $consulta_insertar;
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos."); 
header("location: imagenes.php?s=1"); // si ha ido todo bien 
exit; 



        else{ 
//AQUÍ DA EL ERROR AHORA
       
echo "Ocurrió algún error al subir el fichero. No pudo guardarse.";     } 
 
?>
Con esto lo que pretendo es que la imagen que el cliente suba ya esté a un tamaño más normal para trabajar en la web y después sí tengo que hacer a la hora de mostrar un pequeño comentario acerca de un inmueble un thumbnail otra vez para mostrar una miniatura de la casa o piso o lo que sea para despues al pinchar en un "leer más" entrar a una ventana con el tamaño real, espero haberte dado más datos para que me entiendas, muchísimas gracias

Última edición por pipo2005; 05/12/2004 a las 07:27
  #6 (permalink)  
Antiguo 05/12/2004, 05:19
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 14 años
Puntos: 88
hay 2 opciones que vi a la primera... o te faltó escribir código, o te estan sobrando "}"...
  #7 (permalink)  
Antiguo 05/12/2004, 05:45
 
Fecha de Ingreso: diciembre-2004
Mensajes: 32
Antigüedad: 13 años
Puntos: 0
Borré el que había detrás de else y el último y lo arreglé, ahora ya me dá uno que sí me da a pensar que estoy poniendo mal el nombre o dirección de la imagen porque me da que no sé pudo guardar el archivo, he modificado el código de arriba y marcado la línea 89 de acorde con el nuvo error

Última edición por pipo2005; 05/12/2004 a las 05:54
  #8 (permalink)  
Antiguo 05/12/2004, 05:52
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 14 años
Puntos: 88
mira, segun lo que pude ver, y yo te diria que probaras eliminando los siguientes signos "}"

Código PHP:
if (!((strpos($tipo_archivo"gif") || strpos($tipo_archivo"jpeg") || strpos($tipo_archivo"JPEG") ) && ($tamano_archivo 1000000000))) { 
    echo 
"La extensión o el tamaño de los archivos no es correcta. <br><br><table><tr><td><li><br><li></td></tr></table>"
}else{ 
    if (
move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'],"temporal/".$nombre_archivo)){ 
        echo 
"El archivo ha sido cargado correctamente."
    }else{ 
        echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse."
    } 
// prueba borrando este signo 
este tambien...
Código PHP:
          // voilà la salvamos con el nombre y en el lugar que nos interesa. 
          
imagejpeg($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre); 
     } 
}
//esta tambien... 
y finalmente este otro...
Código PHP:
  }    else{ //[B]ESTA ES LA LÍNEA 88[/B] 
       
echo "Ocurrió algún error al subir el fichero. No pudo guardarse."
    } 
//finalmente este... 
yo te digo que pruebas, ya que quizás se necesiten, pero prueba borrandolos, ya que viendo el código no hay ningun signo que abra esos signos que cierras...
  #9 (permalink)  
Antiguo 05/12/2004, 06:02
 
Fecha de Ingreso: diciembre-2004
Mensajes: 32
Antigüedad: 13 años
Puntos: 0
PERDÓN, PERDÓN , PERDÓN, mira borré los que me dijiste y me dá el error de la misma línea pero referente a else.
Parse error: parse error, unexpected T_ELSE
voy a volver a modificar el código arriba, dios, lo siento.
  #10 (permalink)  
Antiguo 05/12/2004, 06:12
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 14 años
Puntos: 88
sabes, no se me ocurre entonces que puede ser... pero descuida, en algun momento se metera un cabeza de php :P y te podrá responder :P o darte una idea... :p
  #11 (permalink)  
Antiguo 05/12/2004, 07:25
 
Fecha de Ingreso: diciembre-2004
Mensajes: 32
Antigüedad: 13 años
Puntos: 0
De acuerdo spider_boy muchísimas gracias por tu ayuda, voy a seguir trasteando a ver que puedo conseguir
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 07:48.