Foros del Web » Programando para Internet » PHP »

Redimensionar y guardar

Estas en el tema de Redimensionar y guardar en el foro de PHP en Foros del Web. Hola Amigos: He visto que han explicado esto con anterioridad pero por más que lo leo, no se como ponerlo en mi código. La cosa ...
  #1 (permalink)  
Antiguo 16/12/2008, 19:01
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Pregunta Redimensionar y guardar

Hola Amigos:

He visto que han explicado esto con anterioridad pero por más que lo leo, no se como ponerlo en mi código. La cosa es que necesito redimensionar la foto que carguen los usuarios antes de guardarla y no entiendo ni papa de como hacerlo.

Este es mi código:

<?
$conexion = db_connect();
if (!$conexion)
return 0;

$archivo = explode('.', stripslashes($_FILES['foto']['name']));
unset($archivo[count($archivo)-1]);
$archivo = implode('.', $archivo);
//Insercion de los datos, ojo la imagen se graba con su nombre original en la tabla (es un campo varchar)
$sql_ins = "INSERT INTO cosas (fecha, id, nombre, description, ave) " .
"VALUES ('$fecha', '$id', '$nombre', '$descripcion', '$archivo')";
$res = mysql_query($sql_ins) or die ( "Error MySQL dice: " . mysql_error() );
$nuevo_nombre = $_FILES['foto']['name'];
move_uploaded_file($_FILES['foto']['tmp_name'], "images/$nuevo_nombre");
?>

Por favor me pueden ayudar a poder redimensionar las fotos que cargan los usuarios antes de guardarlas.

Les agradezco mucho su ayuda.
  #2 (permalink)  
Antiguo 16/12/2008, 19:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Redimensionar y guardar

te sugiero busques en el foro.... hay bastantes ejemplos de esto, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 16/12/2008, 19:31
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Redimensionar y guardar

Si como lo dije antes ya vi muchisimos ejemplos pero no se como aplicarlos por eso de verdad de corazón necesito ayuda, no por pereza ni falta de ganas sino que lo intento pero no se hacerlo.

Si tienen un tiempo por favor brindenme su ayuda que a lo mejor para ustedes es facilísimo pero a mi se me ha complicado bastante.

Gracias de antemano.
  #4 (permalink)  
Antiguo 16/12/2008, 21:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Redimensionar y guardar

Deberias de tratar de implementarlo, y sobre lo que vayas implementando nos puedes preguntar y te podemor ir apoyando.

Saludos.
  #5 (permalink)  
Antiguo 17/12/2008, 14:01
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Redimensionar y guardar

Amigos disculpenme lo tarada pero no funciona lo que hago fíjense esto fue lo que hice:

<?
$conexion = db_connect();
if (!$conexion)
return 0;

$archivo = explode('.', stripslashes($_FILES['foto']['name']));
unset($archivo[count($archivo)-1]);
$archivo = implode('.', $archivo);

$anchura=200;
$hmax=200;
$imagen=basename($archivo);
$directorio = '../tienda/fotos/$nuevo_nombre';
$datos = getimagesize($imagen);
if($datos[2]==1){$img = @imagecreatefromgif($imagen);}
if($datos[2]==2){$img = @imagecreatefromjpeg($imagen);}
if($datos[2]==3){$img = @imagecreatefrompng($imagen);}
$ratio = ($datos[0] / $anchura);
$altura = ($datos[1] / $ratio);
if($altura>$hmax){$anchura2=$hmax*$anchura/$altura;$altura=$hmax;$anchura=$anchura2;}
$thumb = imagecreatetruecolor($anchura,$altura);
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);
if($datos[2]==1){imagegif($thumb, "./".$directorio."/".$nombre);}

//Insercion de los datos, ojo la imagen se graba con su nombre original en la tabla (es un campo varchar)
$sql_ins = "INSERT INTO cosas (fecha, id, nombre, description, ave) " .
"VALUES ('$fecha', '$id', '$nombre', '$descripcion', '$archivo')";
$res = mysql_query($sql_ins) or die ( "Error MySQL dice: " . mysql_error() );
$nuevo_nombre = $_FILES['foto']['name'];
move_uploaded_file($_FILES['foto']['tmp_name'], "images/$nuevo_nombre");
?>

Y me da los siguientes errores:

Warning: getimagesize(BARBIE) [function.getimagesize]: failed to open stream: No such file or directory in C:\AppServ\www\phpMyAdmin\probar\subir.php on line 36

Warning: Division by zero in C:\AppServ\www\phpMyAdmin\probar\subir.php on line 41

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in C:\AppServ\www\phpMyAdmin\probar\subir.php on line 43

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\AppServ\www\phpMyAdmin\probar\subir.php on line 44

Lo que pasa es que no entiendo que estoy haciendo pues al final no se cual es la que guardo ni nada de nada.

Por favor me pueden explicar para seguir intentándolo.

Gracias.
  #6 (permalink)  
Antiguo 17/12/2008, 15:33
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Redimensionar y guardar

Please... una ayudita
  #7 (permalink)  
Antiguo 17/12/2008, 15:42
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Redimensionar y guardar

Ahora lo hice así:

<?
$conexion = db_connect();
if (!$conexion)
return 0;

$archivo = explode('.', stripslashes($_FILES['foto']['name']));
unset($archivo[count($archivo)-1]);
$archivo = implode('.', $archivo);

$tamano=getimagesize($archivo);
$orig_Ancho = $tamano[0];
$orig_Alto =$tamano[1];

# estableceremos un margen en blanco alrededor de la imagen de 5 pixels
# igual por los cuatro lados
$margen=10;

# establecemos rocortes para reencuadrar la imagen
$recorte_izq=50;
$recorte_sup=80;
$recorte_der=40;
$recorte_inf=60;

# calculamos las dimensiones para utilizar como parámetros
# en la funcion imagecopyresampled

# ancho y alto original recortado
$Ancho_recortado=$orig_Ancho-$recorte_izq-$recorte_der;
$Alto_recortado=$orig_Alto-$recorte_sup-$recorte_inf;

# factores de ampliación en este caso iguales
# sin distorsión de imagen
$ampliacion_X=1;
$ampliacion_Y=1;
# dimensiones del soporte
$papel_Ancho=$Ancho_recortado*$ampliacion_X+ 2*$margen;
$papel_Alto=$Alto_recortado*$ampliacion_Y+2*$marge n;
# dimensiones de la mancha de imagen al positivar
# hay que quitar los márgenes
$resultado_Ancho=$papel_Ancho -2*$margen;
$resultado_Alto=$papel_Alto -2*$margen;
switch($tipo){
case "jpg":
$importada=imagecreatefromjpeg($original);
break;
case "png":
$importada=imagecreatefrompng($original);
break;
case "gif":
$importada=imagecreatefromgif($original);
break;
}
Header("Content-type:image/jpeg");
$im_base=imagecreatetruecolor($papel_Ancho,$papel_ Alto);
$fondo=imagecolorAllocate($im_base,255,255,200);
imagefill($im_base,0,0,$fondo);
imagecopyresampled($im_base,$importada,$margen,$ma rgen,
$recorte_izq,$recorte_sup,
$resultado_Ancho,$resultado_Alto,
$Ancho_recortado,$Alto_recortado);
imagejpeg($im_base);
ImageDestroy();

//Insercion de los datos, ojo la imagen se graba con su nombre original en la tabla (es un campo varchar)
$sql_ins = "INSERT INTO cosas (fecha, id, nombre, description, ave) " .
"VALUES ('$fecha', '$id', '$nombre', '$descripcion', '$archivo')";
$res = mysql_query($sql_ins) or die ( "Error MySQL dice: " . mysql_error() );
$nuevo_nombre = $_FILES['foto']['name'];
move_uploaded_file($_FILES['foto']['tmp_name'], "images/$nuevo_nombre");
?>

Y me arroja estos errores:

Warning: getimagesize(BARBIE) [function.getimagesize]: failed to open stream: No such file or directory in C:\AppServ\www\phpMyAdmin\probar\subir.php on line 32

Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\phpMyAdmin\probar\subir.php :32) in C:\AppServ\www\phpMyAdmin\probar\subir.php on line 75

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in C:\AppServ\www\phpMyAdmin\probar\subir.php on line 76

Warning: imagecolorallocate(): supplied argument is not a valid Image resource in C:\AppServ\www\phpMyAdmin\probar\subir.php on line 77

Warning: imagefill(): supplied argument is not a valid Image resource in C:\AppServ\www\phpMyAdmin\probar\subir.php on line 78

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\AppServ\www\phpMyAdmin\probar\subir.php on line 82

Warning: imagejpeg(): supplied argument is not a valid Image resource in C:\AppServ\www\phpMyAdmin\probar\subir.php on line 83

Warning: Wrong parameter count for imagedestroy() in C:\AppServ\www\phpMyAdmin\probar\subir.php on line 84
  #8 (permalink)  
Antiguo 17/12/2008, 16:15
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Redimensionar y guardar

1- No estas validando el archivo que se subio, si la extension es correcta, etc.
2- Despues de validarlo debes moverlo a otro directorio y verificarlo con file_exists('ruta/imagen.extension');
3- Ya que esta donde lo necesitas entonces intentas redimensionarlo.
4- Ya con todo validado entonces si guardas en la base de datos.
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 17/12/2008, 17:24
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Redimensionar y guardar

pero el archivo si existe y si lo guarda pues antes de colocarle todo el código de redimension, me guardaba perfectamente. Qué pasará entonces???
  #10 (permalink)  
Antiguo 17/12/2008, 18:50
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Redimensionar y guardar

Que lo mas recomendable, antes de hacer cualquier cosa con un archivo que viene de un formulario es validarlo, despues moverlo a su destino final y solo entonces redimensionar.
__________________
- León, Guanajuato
- GV-Foto
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 22:09.