Foros del Web » Programando para Internet » PHP »

Intentando redimensionar imagen insertada desde formulario

Estas en el tema de Intentando redimensionar imagen insertada desde formulario en el foro de PHP en Foros del Web. Hola, tengo una función que valida una foto insertada desde un formulario (el tamaño, la extensión y demás). El caso es que ahora pretendo que ...
  #1 (permalink)  
Antiguo 27/03/2011, 14:26
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
Intentando redimensionar imagen insertada desde formulario

Hola, tengo una función que valida una foto insertada desde un formulario (el tamaño, la extensión y demás). El caso es que ahora pretendo que la redimensione la altura en función de una anchura de 400 pixeles, pero no se porque no lo hace y sigue copiando la foto con el tamaño original. Pongo el codigo que interesa:

Código:
if (!file_exists($fotojpg))
{

// Copiamos la foto al servidor			   

$copiado	= copy ($fotoservidor, "$fotojpg");

// Aqui la llamamos y hacemos la redimension de la foto y la guardamos en una //nueva variable

$img = @imagecreatefromjpeg($fotojpg) or die("No se encuentra la imagen $fotojpg");
$medidas = getimagesize($fotojpg);
$ratio = $medidas[0]/400;
$altura = $medidas[1]/$ratio;
$foto = imagecreatetruecolor(400,$altura);
$fotoescalada= imagecopyresampled ($foto, $img, 0, 0, 0, 0, 400, $altura, $medidas[0], $medidas[1]);

//La volvemos a copiar al servidor encima de la anterior

$copiado = copy ($fotoservidor, "$fotoescalada") or die ("No se copio $fotoescalada");
.
.
.
.
El caso es que no muestra ningún error, pero no redimensiona la foto, la vuelve a copiar tal cual.
  #2 (permalink)  
Antiguo 27/03/2011, 21:04
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: Intentando redimensionar imagen insertada desde formulario

Holas,

Creo que el orden seria:

Código PHP:
Ver original
  1. if (!file_exists($fotojpg))
  2. {
  3.  
  4. $medidas = getimagesize($fotojpg);
  5. $ratio = $medidas[0]/400;
  6. $altura = $medidas[1]/$ratio;
  7.  
  8. $fotoescalada = imagecreatetruecolor(400,$altura);
  9. $img = @imagecreatefromjpeg($fotojpg) or die("No se encuentra la imagen $fotojpg");
  10. imagecopyresampled ($fotoescalada, $img, 0, 0, 0, 0, 400, $altura, $medidas[0], $medidas[1]);
  11.  
  12. //La volvemos a copiar al servidor encima de la anterior
  13.  
  14. $copiado = copy ($fotoservidor, "$fotoescalada") or die ("No se copio $fotoescalada");
  15. .
  16. .
  17. .
  18. .

En el manual dice:

Código PHP:
Ver original
  1. bool imagecopyresampled ( [B]resource $dst_image[/B] , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )




Saludos
Gildus
__________________
.: Gildus :.
  #3 (permalink)  
Antiguo 27/03/2011, 21:04
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: Intentando redimensionar imagen insertada desde formulario

$fotoescalada no es un archivo, sino un identificador de la libreria GD para tener acceso a la imagen (en memoria o en archivos temporales), te recomiendo leer el manual de PHP para la funcion imagejpeg()
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 27/03/2011, 21:04
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: Intentando redimensionar imagen insertada desde formulario

Cita:
Iniciado por gildus Ver Mensaje
Holas,

Creo que el orden seria:

Código PHP:
Ver original
  1. if (!file_exists($fotojpg))
  2. {
  3.  
  4. $medidas = getimagesize($fotojpg);
  5. $ratio = $medidas[0]/400;
  6. $altura = $medidas[1]/$ratio;
  7.  
  8. $fotoescalada = imagecreatetruecolor(400,$altura);
  9. $img = @imagecreatefromjpeg($fotojpg) or die("No se encuentra la imagen $fotojpg");
  10. imagecopyresampled ($fotoescalada, $img, 0, 0, 0, 0, 400, $altura, $medidas[0], $medidas[1]);
  11.  
  12. //La volvemos a copiar al servidor encima de la anterior
  13.  
  14. $copiado = copy ($fotoservidor, "$fotoescalada") or die ("No se copio $fotoescalada");
  15. .
  16. .
  17. .
  18. .

En el manual dice:

Código PHP:
Ver original
  1. bool imagecopyresampled ( resource $dst_image, resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )




Saludos
Gildus
__________________
.: Gildus :.
  #5 (permalink)  
Antiguo 27/03/2011, 21:12
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: Intentando redimensionar imagen insertada desde formulario

Gildus, aun con la correccion que mencionas... $fotoescalada sigue siendo un recurso de GD, no un archivo de imagen:

Cita:
bool imagecopyresampled ( resource $dst_image, resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 27/03/2011, 21:39
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: Intentando redimensionar imagen insertada desde formulario

Oh!,

Una linea mas que seria:

Código PHP:
Ver original
  1. $r = imagejpeg($fotoescalada, $Nuevafotojpg,70);

Claro que el $Nuevafotojpg, tendria que ser un archivo imagen, puedes copiar ante de todo el codigo una copia del archivo $fotojpg a $Nuevafotojpg y listo.

Saludos
Gildus
__________________
.: Gildus :.
  #7 (permalink)  
Antiguo 27/03/2011, 21:46
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: Intentando redimensionar imagen insertada desde formulario

Creo que con esto lo chancarias a la misma foto, prueba y nos avisas:


Código PHP:
Ver original
  1. if (!file_exists($fotojpg))
  2.     {
  3.      
  4.     $medidas = getimagesize($fotojpg);
  5.     $ratio = $medidas[0]/400;
  6.     $altura = $medidas[1]/$ratio;
  7.      
  8.     $fotoescalada = imagecreatetruecolor(400,$altura);
  9.     $img = @imagecreatefromjpeg($fotojpg) or die("No se encuentra la imagen $fotojpg");
  10.     imagecopyresampled ($fotoescalada, $img, 0, 0, 0, 0, 400, $altura, $medidas[0], $medidas[1]);
  11.    $r = imagejpeg($fotoescalada, $fotojpg,70);
  12.      
  13.     //La volvemos a copiar al servidor encima de la anterior
  14.      
  15.     //$copiado = copy ($Nuevafotojpg, "$fotoescalada") or die ("No se copio $fotoescalada");
  16.     .
  17.     .
  18.     .
  19.     .
__________________
.: Gildus :.
  #8 (permalink)  
Antiguo 28/03/2011, 06:51
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
Respuesta: Intentando redimensionar imagen insertada desde formulario

Gracias a los dos por responder.
Gildus, he probado tu código y funciona. Eres un hacha. Lo único es que hay que copiar antes de nada la foto. Es decir, el código quedaría asi:

Cita:
if (!file_exists($fotojpg))
{

$copiado = copy ($fotoservidor, "$fotojpg");

$medidas = getimagesize($fotojpg);
$ratio = $medidas[0]/400;
$altura = $medidas[1]/$ratio;
$fotoescalada = imagecreatetruecolor(400,$altura);
$img = @imagecreatefromjpeg($fotojpg) or die("No se encuentra la imagen $fotojpg");
imagecopyresampled ($fotoescalada, $img, 0, 0, 0, 0, 400, $altura, $medidas[0], $medidas[1]);
$r = imagejpeg($fotoescalada, $fotojpg,70);
Primero copiamos la imagen y luego la escalamos, sin necesidad de copiarla otra vez.


Por lo demás comentar que en un principio estaba intentando hacerlo de otra forma. Copiaba la imagén original al servidor (sin redimensionar) y luego lo que pretendía (Y finalmente logré, antes de ver de nuevo este post, de manera muy simplre, sin utilizar gd) hacer era mostrarla ya redimensionada. Lo que me doy cuenta es que este método creo que es mejor, puesto que al redimensionarla al copiarla la imagén ocupa menos (en el caso de que sea más grande claro, y previsiblemente las imagenes que suban los usuarios seguramente lo serán) y ahorra disco duro en el servidor. ¿Vosotros que pensais?
  #9 (permalink)  
Antiguo 28/03/2011, 09:35
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: Intentando redimensionar imagen insertada desde formulario

Excelente que te haya funcionado, y si que ahorra espacio y mas aun en lo que importa te ahorra en el cargado de la imagen, que sean mas rapidas.

Saludos
Gildus
__________________
.: Gildus :.
  #10 (permalink)  
Antiguo 28/03/2011, 14:58
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
Respuesta: Intentando redimensionar imagen insertada desde formulario

Hola otra vez. He estado haciendo pruebas y por algun motivo no redimensiona las fotos con altura muy grande, por lo que veo las que tiene mas de 1000 pixeles y no se porqué. ¿Alguna idea?
  #11 (permalink)  
Antiguo 28/03/2011, 15:57
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: Intentando redimensionar imagen insertada desde formulario

Segun este link no es recomendable con mas de 1000px:

http://www.php.net/manual/es/functio...pled.php#94221

Saludos
Gildus
__________________
.: Gildus :.
  #12 (permalink)  
Antiguo 28/03/2011, 16:29
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
Respuesta: Intentando redimensionar imagen insertada desde formulario

Ok, validaré entonces en el formulario que no metan imagenes superiores al tamaño recomendado.

Etiquetas: redimensionar, formulario
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 02:22.