Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

guardar imagen retocada en bd

Estas en el tema de guardar imagen retocada en bd en el foro de Mysql en Foros del Web. Hola hasta ahora solo se guardar en una base de datos imagenes a traves de un formulario con $_post['nombrefichero'][nombrefoto] . Lo que quiero aprender ahora ...
  #1 (permalink)  
Antiguo 30/04/2011, 19:23
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
guardar imagen retocada en bd

Hola hasta ahora solo se guardar en una base de datos imagenes a traves de un formulario con $_post['nombrefichero'][nombrefoto] .
Lo que quiero aprender ahora es como guardar el nombre o la ruta de una imagen que la retoque por ejemplo que la redimensione cuya imagen original la guardo en la base de datos con $_post y no logro saber que pasos tengo que seguir.

Espero que alguien sepa darme una buena explicacion o me postee el link.
  #2 (permalink)  
Antiguo 02/05/2011, 06:39
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: guardar imagen retocada en bd

No es muy aconsejable guardar imagenes en la bbdd es mucho mejor guardar el nombre del archivo en un simple varchar y luego guardar todas las imagenes en un mismo path del disco.

El caso de la imagen modificada no es distinto al de la imagen original, si sabes guarda la original haz lo mimo para guardar la imagen modificada puesto que a todos los esfectos es otra imagen. Si quieres tener las dos en un mismo registro deberàs guardarla en otro campo (imagenModificada)... Si optas por lo de solo guardar el nombre es lo mismo un campo imagenOriginal y otro imagenModificada.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 03/05/2011, 13:54
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: guardar imagen retocada en bd

gracias lo tendre en cuenta hasta otra
  #4 (permalink)  
Antiguo 03/05/2011, 17:59
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: guardar imagen retocada en bd

tengo problemas con mi base de datos mysql, hos cuento haber si me podeis ayudar cuando inserto los datos de multiples archivos a traves de un formulario los guardo bien en la base de datos pero luego a continuacion creo un bucle for para redimensionar todos los archivos y guardarlos en mi carpeta servidor y en la base de datos pero solo se me guardan bien en el servidor y el en la base de datos se me guarda el archivo sin redimensionar (en la base de datos guardo el nombre del archivo en ambos casos)
ejemplo de como lo hago el proceso:

si el formulario esta vacio muestro:
Código PHP:
Ver original
  1. {
  2.  
  3. for($i=0; $i<$numFiles; $i++){aqui creo el codigo para la subida de archivos y a  continuacion creo el registro base de datos y cierro}
  4.  
  5.  
  6. for($i=0; $i<$numFiles; $i++){aqui creo el codigo para hace la redimension de todos los archivos y guardarlos en la carpeta servidor y en la base de datos}
  7. }

funciona todo bien menos guardar el nombre en la base de datos me lo guarda pero es el archivo original no el redimensionado.

si alguien me puede dar un breve resumen de este funcionamiento gracias de antemano.
  #5 (permalink)  
Antiguo 04/05/2011, 01:16
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: guardar imagen retocada en bd

Con lo que nos muestras no te podemos decir que estas haciebdo mal.

Pon el codigo y te lo podremos revisar.

Solo debes estar seguro que estas guardando el nombre adecuado, mira que variable, y su contenido, usas para construir el UPDATE o INSERT que estes usando para guardar el nombre de la imagen modificada en la bbdd.

Insisto es lo mismo guardar el nombre de la imagen original que el de la modificada, o el nombre de una persona, estamos hablando de un varchar...

Supongamos que tienes

img0001.jpg ---> imagen original

y

img0001m.jpg ---> imagen modificada

el script que tienes para guardar img0001.jpg sirve para guardar img0001m.jpg siempre que la variable que contiene el nombre se haya modificado y el campo destino sea que toque.

Cita:
aqui creo el codigo para hace la redimension de todos los archivos y guardarlos en la carpeta servidor y en la base de datos
obvimente esta parte de tu codigo debe elegir el nuevo nombre para la imagen modificada, si redimensionas la imagen original y no la "guardas como" con otro nombre...

Una buena opción seria gardar la mimagen modificada con el mismo nombre que la original pero en otra carpeta del servidor y luego no haria falta guadar nada en la bbdd....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 04/05/2011 a las 01:26
  #6 (permalink)  
Antiguo 04/05/2011, 04:47
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: guardar imagen retocada en bd

Vale el nombre no lo estaba cambiando, pero si cuaundo redimensiono las imagenes le pongo por ejemplo esta ruta con este nombre:

imagenes/redimensionadas/copia.jpg

como tendre que guardarla en la base de datos yo la tengo asin:
(tengo un bucle for para contabilizar $i=0 $i++ arriba lo postee)

Código PHP:
Ver original
  1. INSERT INTO ejercicios(nombre_imgthumb,tamallothumb,tipothumb)
  2.          values ('".$_FILES['archivo']['name'][$i]."','".$_FILES['archivo']['size'][$i]."',
  3.          '".$_FILES['archivo']['type'][$i]."')";

yo lo intente asin:

Código PHP:
Ver original
  1. INSERT INTO tabladatos(nombre_imgthumb,tamallothumb,tipothumb)
  2.          values ('".$_FILES['archivo'][$imagen_nueva][$i]."','".$_FILES['archivo']['size'][$i]."',
  3.          '".$_FILES['archivo']['type'][$i]."')";

pero me da error
  #7 (permalink)  
Antiguo 04/05/2011, 05:45
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: guardar imagen retocada en bd

muestro codigo completo que sera mejor para que me ayudes

Código PHP:
Ver original
  1. <?php
  2. //muestro codigo si esta formulario vacio
  3.   }else{
  4. ?>
  5.   <?php
  6.   $numFiles = count($_FILES['archivo']['tmp_name']);
  7.   for($i=0; $i<$numFiles; $i++) {
  8.     //codigo para guardar los multiples archivos en servidor y en base de datos
  9.   }
  10.   //lo guarda correctamente
  11.  
  12. $numFiles = count($_FILES['archivo']['name']);
  13.   for($i=0; $i<$numFiles; $i++) {
  14.     //codigo para redimensionar imagenes y guardarlas en carpeta servidor y base de datos
  15.  $imagen_original=imagecreatefromjpeg('archivos/imagenes/'.$_FILES["archivo"]["name"][$i]);
  16. $imagen_nueva=imagecreatetruecolor(70,70);
  17. $y=imagesy($imagen_original);
  18. $x=imagesx($imagen_original);
  19. imagecopyresized($imagen_nueva,$imagen_original,0,0,0,0,70,70,$x,$y);
  20. if (imagejpeg($imagen_nueva,'archivos/imagenesthumbnail/copia.jpg'.$i)){
  21.     }else{
  22.     echo 'No se realizo el thumbnail';
  23. }
  24.  
  25. $ssql="INSERT INTO tabladatos(nombre_imgthumb,tamañothumb,tipothumb)
  26.         values ('".$_FILES['archivo']['name'][$i]."','".$_FILES['archivo']['size'][$i]."',
  27.         '".$_FILES['archivo']['type'][$i]."')";
  28.         $conexion=mysql_connect("localhost","root","");
  29.         mysql_select_db("basedatos",$conexion);
  30.         if(mysql_query($ssql,$conexion)){
  31.          }else{
  32.             echo 'No se grabaron los datos insertados!!';
  33.          }
  34.          }
  35.     }
  36.    
  37. //aqui acaba el codigo y me guarda las fotos originales otra vez en vez de las redimensionadas
  #8 (permalink)  
Antiguo 04/05/2011, 07:04
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: guardar imagen retocada en bd

Repasemos

Subida de múltiples archivos

Create an Upload-File Form

Cita:
By using the global PHP $_FILES array you can upload files from a client computer to the remote server.

The first parameter is the form's input name and the second index can be either "name", "type", "size", "tmp_name" or "error". Like this:

$_FILES["file"]["name"] - the name of the uploaded file
$_FILES["file"]["type"] - the type of the uploaded file
$_FILES["file"]["size"] - the size in bytes of the uploaded file
$_FILES["file"]["tmp_name"] - the name of the temporary copy of the file stored on the server
$_FILES["file"]["error"] - the error code resulting from the file upload

This is a very simple way of uploading files. For security reasons, you should add restrictions on what the user is allowed to upload.
$_FILES["nombre del input"]["uno de los posibles"]

Por todo ello no veo muy claro que te pueda funcionar la primera parte pero si dices que funciona no lo voy a poner en duda.

A partir de eso suponiendo que funciona

Yo cambiaria lo siguiente


if (imagejpeg($imagen_nueva,'archivos/imagenesthumbnail/copia.jpg'.$i)){

ERROR Estas guardando todos los thumbnail con el mismo nombre "copia.jpg" mas un numerador detras de la exetension (copia.jpg0,copia.jpg1...)

ERROR Estas copiando como copia.jpg0,copia.jpg1... y guardando en la bbdd como $_FILES['archivo']['name'][$i]



Si adoptas la estrategia de guardar los thumbnails en otra carpeta no les cambies el nombre

if (imagejpeg($imagen_nueva,'archivos/imagenesthumbnail/'.$_FILES["archivo"]["name"][$i])){

y luego ya te funcionara esto

$ssql="INSERT INTO tabladatos(nombre_imgthumb,tamañothumb,tipothumb)
values ('".$_FILES['archivo']['name'][$i]."','".$_FILES['archivo']['size'][$i]."',
'".$_FILES['archivo']['type'][$i]."')";

Si quieres cambiar el nombre puedes hacer esto

if (imagejpeg($imagen_nueva,'archivos/imagenesthumbnail/th'.$_FILES["archivo"]["name"][$i])){

y luego ya te funcionara esto

$ssql="INSERT INTO tabladatos(nombre_imgthumb,tamañothumb,tipothumb)
values ('th".$_FILES['archivo']['name'][$i]."','".$_FILES['archivo']['size'][$i]."',
'".$_FILES['archivo']['type'][$i]."')";

con lo que agregas el prefijo "th" al nombre original.


Tambien podrias cambiar esto

if (imagejpeg($imagen_nueva,'archivos/imagenesthumbnail/copia.jpg'.$i)){
//nada
}else{
echo 'No se realizo el thumbnail';
}

por esta sintaxis mas elegante

if (!imagejpeg($imagen_nueva,'archivos/imagenesthumbnail/copia.jpg'.$i)) echo 'No se realizo el thumbnail';
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 04/05/2011 a las 07:22
  #9 (permalink)  
Antiguo 04/05/2011, 07:21
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: guardar imagen retocada en bd

quimfv gracias por la explicacion pero no se que hago mal que no me funciona ya que cuando guardo el size lo hago para comprobar que en la base de datos el tamaño de la imagen redimensionada disminuye y no se que dada igual que el archivo original. ademas se me guarda como si fuera otro registro osea id_imagen 1,2,3,4,(hasta aqui correcto las originales)y sigue las redimensionadas5,6,7,8.

esto es lo que no quiero para esta bien el codigo tendria que ser id_img 1,2,3,4,(y guardarse todo osea name,type,size de img original,img redimensionada).

espero que me haiga explicado bien.
muestro codigo renobado otra vez:

Código PHP:
Ver original
  1. <?php
  2. //muestro codigo si esta formulario vacio
  3.   }else{
  4. ?>
  5.   <?php
  6.   $numFiles = count($_FILES['archivo']['tmp_name']);
  7.   for($i=0; $i<$numFiles; $i++) {
  8.     //codigo para guardar los multiples archivos en servidor y en base de datos
  9.   if (move_uploaded_file($_FILES['archivo']['tmp_name'][$i],'archivos/imagenes/'.$_FILES["archivo"]["name"][$i])) {
  10.    //Tu código para hacer el thumbnail
  11.    }else{
  12.     echo 'Error, no se pudo mover la imagen '.($i + 1);
  13.     }
  14. $ssql="INSERT INTO tabladatos(nombre_img,tamañoimg,rutaimg)
  15. values ('".$_FILES['archivo']['name'][$i]."','".$_FILES['archivo']['size'][$i]."',
  16. '".$_FILES['archivo']['tmp_name'][$i]."')";
  17.     $conexion=mysql_connect("localhost","root","");
  18.     mysql_select_db("basedatos",$conexion);
  19.     if(mysql_query($ssql,$conexion)){
  20.  }else{
  21.         echo 'No se grabaron los datos insertados!!';
  22.     }
  23.       }
  24.   //lo guarda correctamente
  25.  
  26. $numFiles = count($_FILES['archivo']['name']);
  27.   for($i=0; $i<$numFiles; $i++) {
  28.     //codigo para redimensionar imagenes y guardarlas en carpeta servidor y base de datos
  29.  $imagen_original=imagecreatefromjpeg('archivos/imagenes/'.$_FILES["archivo"]["name"][$i]);
  30. $imagen_nueva=imagecreatetruecolor(70,70);
  31. $y=imagesy($imagen_original);
  32. $x=imagesx($imagen_original);
  33. imagecopyresized($imagen_nueva,$imagen_original,0,0,0,0,70,70,$x,$y);
  34. if (imagejpeg($imagen_nueva,'archivos/imagenesthumbnail/'.$_FILES['archivo']['name'][$i])){
  35.     }else{
  36.     echo 'No se realizo el thumbnail';
  37. }
  38. $ssql="INSERT INTO tabladatos(nombre_imgthumb,tamañothumb,rutathumb)
  39.         values ('".$_FILES['archivo']['name'][$i]."','".$_FILES['archivo']['size'][$i]."',
  40.         '".$_FILES['archivo']['type'][$i]."')";
  41.         $conexion=mysql_connect("localhost","root","");
  42.         mysql_select_db("basedatos",$conexion);
  43.         if(mysql_query($ssql,$conexion)){
  44.          }else{
  45.             echo 'No se grabaron los datos insertados!!';
  46.          }
  47.          }
  48.     }
  49.    
  50. //aqui acaba el codigo y me guarda las fotos originales otra vez en vez de las redimensionadas
  51. ?>

Última edición por roboty; 04/05/2011 a las 07:43
  #10 (permalink)  
Antiguo 04/05/2011, 07:47
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: guardar imagen retocada en bd

lo unico que me falla es la base de datos que me guarda las imagenes originales subidas por formulario pero cuando tiene que guardar los thumbnail no me los guarda me vuelve a guardar las imagenes originales y claro tendria que guardar todo junto en el id_1,2,3,4,.
  #11 (permalink)  
Antiguo 05/05/2011, 01:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: guardar imagen retocada en bd

Perdona no me di cuenta.

A ver en $_FILES tienes la imagen original y sus datos y en $imagen_nueva tienes solo la imagen nueva.

Luego si guardas $_FILES['archivo']['size'][$i]...

$ssql="INSERT INTO tabladatos(nombre_imgthumb,tamañothumb,tipothumb)
values ($_FILES['archivo']['name'][$i]."','".$_FILES['archivo']['size'][$i]."',
'".$_FILES['archivo']['type'][$i]."')";

$_FILES['archivo']['name'][$i] nombre de la imagen original puedes usarlo porque estas guardando los thumbnails en otra carpeta

$_FILES['archivo']['type'][$i] tipo de la imagen original pero al thumbnail no le has cambiado el tipo luego tambien puedes usarlo.

$_FILES['archivo']['size'][$i] ...


imagejpeg($imagen_nueva,'archivos/imagenesthumbnail/'.$_FILES['archivo']['name'][$i]
Guarda $imagen_nueva en ese path no en $_FILES

Con esto creo que deberias ver lo que estas haciendo mal.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 05/05/2011 a las 02:15
  #12 (permalink)  
Antiguo 05/05/2011, 06:31
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: guardar imagen retocada en bd

Hola de nuevo quimfv ahora si que entiendo la teoria pero no consigo aplicarlo en la practica yo lo hice asin:

Código PHP:
Ver original
  1. $ssql="INSERT INTO tabladatos(nombre_imgthumb,tamañothumb,rutathumb)
  2.         values ('".$_FILES['archivo']['name'][$i]."',
  3.         $imagen_nueva($_FILES['archivo']['size'][$i]),
  4. '".$_FILES['archivo']['tmp_name'][$i]."')
  5.         )";
  #13 (permalink)  
Antiguo 05/05/2011, 06:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: guardar imagen retocada en bd

No $_FILES es un array que guarda la imagen original y sus datos no puedes sacar de el ningun dato de la imagen modificada, excepto que te sirvan los de la imagen original (en este caso el nombre y el tipo). Por tanto el tamaño (size) de la imagen modificada lo tienes que buscar en otra parte.


filesize

Código PHP:
Ver original
  1. $nombre_nuevaimagen="archivos/imagenesthumbnail/".$_FILES['archivo']['name'][$i];
  2.  
  3. $size_nuevaimagen=filesize($nombre_nuevaimagen);
  4.  
  5. $ssql="INSERT INTO tabladatos(nombre_imgthumb,tamañothumb,rutathumb) "
  6.          ."values ('".$_FILES['archivo']['name'][$i]."','".$size_nuevaimagen."',' "
  7.            .$_FILES['archivo']['tmp_name'][$i]."')";

$_FILES['archivo']['tmp_name'] otro error el tmp_name no es la ruta a la imagen...

la ruta la has puesto tu y es "archivos/imagenesthumbnail/" pero no hace falta guardarla si siempre es la misma.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #14 (permalink)  
Antiguo 05/05/2011, 07:56
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: guardar imagen retocada en bd

Gracias quimfv ahora si que me ha quedado claro seria con filesize. Te doy un diez eres un buen colaborador jeje saludos.

Última edición por roboty; 05/05/2011 a las 08:30
  #15 (permalink)  
Antiguo 05/05/2011, 13:13
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: guardar imagen retocada en bd

Una ultima cosa en realidad el codigo que hice siemple no me funciona como a mi me gustaria ya que es un formulario de 4 archivos y aunque solo quiera poner un archivo siemple me subo o archivos aunque se queden en blanco pero eso no es lo que quiero ademas si subo solo un archivo me da error de que los 2,3,4 no se subieron eso es creo por el bucle for pero no se como hacerlo alguna idea?
  #16 (permalink)  
Antiguo 06/05/2011, 02:16
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: guardar imagen retocada en bd

Modifica $numFiles en funcion del numero de files que hayan subido.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #17 (permalink)  
Antiguo 06/05/2011, 04:24
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: guardar imagen retocada en bd

Muchas gracias quimfv me lo miro y te digo si me funciono.
  #18 (permalink)  
Antiguo 06/05/2011, 09:53
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: guardar imagen retocada en bd

quimfv lo probe asin

$numFiles = count($_FILES['archivo']['name'][0]);
for($i=0; $i<$numFiles; $i++){
if($numFiles<=0){
}}

pero no me funciono la parte de base de datos ya que solo me registra un registro este bucle lo puse arriba para todo el codigo.

espero que me puedas ayudar saludos

Última edición por roboty; 06/05/2011 a las 09:59
  #19 (permalink)  
Antiguo 06/05/2011, 14:38
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: guardar imagen retocada en bd

Ya lo solucione quimfv gracias por todo

Etiquetas: bd
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

SíEste tema le ha gustado a 1 personas




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