Foros del Web » Programando para Internet » PHP »

Funcion no redimensiona fotos mas pequeñas

Estas en el tema de Funcion no redimensiona fotos mas pequeñas en el foro de PHP en Foros del Web. Hola amigos. Estoy usando una funcion que encontre por alli para redimensionar fotos y guardar en carpeta. El problema es que cuando la foto que ...
  #1 (permalink)  
Antiguo 16/06/2011, 09:26
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Exclamación Funcion no redimensiona fotos mas pequeñas

Hola amigos. Estoy usando una funcion que encontre por alli para redimensionar fotos y guardar en carpeta. El problema es que cuando la foto que subo es menor que el tamaño del resize, no me aplica las medidas exactas a la foto grande ni al thumbnail. Este es el código:

Código PHP:
Ver original
  1. include ('funciones.php');
  2.  
  3. $foto_nombre = $_POST['foto_nombre'];
  4.  
  5. function redimensionar($type, $img_original, $img_nueva, $img_nueva_anchura, $img_nueva_altura, $img_nueva_calidad)
  6. {
  7. $defecto = $foto_nombre;
  8. if(file_exists($img_original)) {
  9. // crear imagen desde original
  10. $type=strtolower($type);
  11. switch($type)
  12. {
  13. case 'jpeg': $img = imagecreatefromjpeg($img_original); break;
  14. case 'jpg': $img = imagecreatefromjpeg($img_original); break;
  15. case 'png': $img = imagecreatefrompng($img_original); break;
  16. case 'gif': $img = imagecreatefromgif($img_original); break;
  17. case 'wbmp': $img = imagecreatefromwbmp($img_original); break;
  18. default: $img = imagecreatefromjpeg($defecto); break;
  19. }
  20. } else {
  21. $img = imagecreatefromjpeg($defecto);
  22. }
  23. if(!empty($img)) {
  24. $new_w_R = imagesx($img);
  25. $new_h_R = imagesy($img);
  26. //$img_nueva_altura = 50;
  27. // se calcula la relación alto/ancho
  28. $aspect_ratio = $new_h_R/$new_w_R;
  29. $aspect_ratio2 = $new_w_R/$new_h_R;
  30. if ($new_w_R >= $new_h_R){
  31. // se ajusta al nuevo tamaño
  32. $img_nueva_altura = abs($img_nueva_anchura * $aspect_ratio);
  33. }
  34. else{$img_nueva_anchura = abs($img_nueva_altura * $aspect_ratio2);}
  35. // crear imagen nueva
  36.  
  37. $thumb = imagecreatetruecolor($img_nueva_anchura,$img_nueva_altura);
  38. // redimensionar imagen original copiandola en la imagen. La imagen se reajustará al nuevo tamaño
  39. imagecopyresampled($thumb,$img,0,0,0,0,$img_nueva_anchura,
  40. $img_nueva_altura,imagesx($img),imagesy($img));
  41. // guardar la imagen redimensionada donde indica $img_nueva
  42. imagejpeg($thumb,$img_nueva,$img_nueva_calidad);
  43. }
  44. }
  45.  
  46. //inseción de imagen
  47. //$fileName = $max."_".$_FILES['userfile']['name'];
  48. $extension = explode(".",$_FILES['foto']['name']);
  49. //$fileName = $extension[0].".".$extension[1];
  50. $fileName = $foto_nombre.".".$extension[1];
  51. $tmpName = $_FILES['foto']['tmp_name'];
  52. $fileSize = $_FILES['foto']['size'];
  53. $fileType = $_FILES['foto']['type'];
  54. //echo $tmpName;
  55. $uploaddir = "images/galeria/large/";
  56. $uploadfile = $uploaddir . $fileName ;
  57.  
  58. if (move_uploaded_file($tmpName, $uploadfile)) {
  59. chmod($uploadfile, 0644);
  60. //echo "File is valid, and was successfully uploaded.\n";
  61. //redimensionar
  62. $source=$uploadfile; // archivo de origen
  63. $dest=$uploaddir.$foto_nombre."th.".$extension[1]; // archivo de destino
  64. $dest2=$uploaddir.$foto_nombre.".".$extension[1]; // archivo de destino
  65. // echo "nuevoarchivo ".$dest;
  66. /* $img_nueva_anchura=120;
  67. $img_nueva_altura=120;
  68. $img_nueva_calidad=100;*/
  69. //redimensionar_jpeg($source,$dest,$img_nueva_anchura, $img_nueva_altura, $img_nueva_calidad);
  70. // Ejemplo
  71. redimensionar("jpg",$source,$dest,54,54,95);
  72. redimensionar("jpg",$source,$dest2,445,400,95);
  73. //finredimensionar
  74. } else {
  75. // echo "Possible file upload attack!\n";
  76.  
  77. //print_r($_FILES);
  78. }

No entiendo que está funcionando mal. Por favor si pueden darme algunas sugerencias. Gracias
__________________
Caminando con el corazón partío

Última edición por kimmy; 16/06/2011 a las 09:44 Razón: errores en el código
  #2 (permalink)  
Antiguo 16/06/2011, 10:47
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Funcion no redimensiona fotos mas pequeñas

Trata este http://www.forosdelweb.com/f68/aport...agenes-912637/
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 16/06/2011, 11:07
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Funcion no redimensiona fotos mas pequeñas

Muchas gracias abimaelrc. Aunque me hubiese gustado saber porque el que tengo no hace lo que menciono, igualmente probaré el que me indicaste y comentaré si me enredo. Gracias.
__________________
Caminando con el corazón partío
  #4 (permalink)  
Antiguo 16/06/2011, 19:45
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Funcion no redimensiona fotos mas pequeñas

Hola, traté de entender el código que hizo abimaelrc pero no lo logré. No sé donde colocar la ruta para guardar la foto y su thumbnail.

Pienso que el código que yo coloqué no estaba mal. Solo quiero saber porque cuando la foto que subo es menor que el tamaño del resize, no me aplica las medidas exactas a la foto grande ni al thumbnail.

Gracias.
__________________
Caminando con el corazón partío
  #5 (permalink)  
Antiguo 17/06/2011, 08:13
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Funcion no redimensiona fotos mas pequeñas

amigos disculpen la insistencia pero tengo 3 días tratando de hacer esto y no lo logro. Estuve analizando que el problema está en esta parte:

Código PHP:
Ver original
  1. $new_w_R = imagesx($img);
  2. $new_h_R = imagesy($img);
  3. // se calcula la relación alto/ancho
  4. $aspect_ratio = $new_h_R/$new_w_R;
  5. $aspect_ratio2 = $new_w_R/$new_h_R;
  6. if ($new_w_R >= $new_h_R){
  7. // se ajusta al nuevo tamaño
  8. $img_nueva_altura = abs($img_nueva_anchura * $aspect_ratio);
  9. }
  10. else{$img_nueva_anchura = abs($img_nueva_altura * $aspect_ratio2);}

Al hacer esta operación me da un ancho y alto para la foto grande y el thumbnail. Luego aqui se dan los tamaños que quiero realmente:

Código PHP:
Ver original
  1. redimensionar("jpg",$source,$dest,54,54,95);
  2. redimensionar("jpg",$source,$dest2,444,420,95);

Me imagino que choca con lo de arriba, no lo se. Lo que quisiera es que cualquier foto que se cargue me ponga la foto grande en 444 x 420 y el thumbnail en 54 x 54.

Que debo hacer para lograr esto???

Mucho les agradezco que me ayuden con sus conocimientos porque yo no se que más hacer. Gracias.
__________________
Caminando con el corazón partío
  #6 (permalink)  
Antiguo 20/06/2011, 14:37
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Funcion no redimensiona fotos mas pequeñas

Hola, hace 3 días realice esta consulta sin obtener respuesta. Por favor si alguien puede darme sus sugerencias se lo agradezco muchisimo.
__________________
Caminando con el corazón partío
  #7 (permalink)  
Antiguo 22/06/2011, 20:38
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Funcion no redimensiona fotos mas pequeñas

Hola, insisto con el tema porque no he podido resoverlo. El código me funciona pero cuando las imagenes no son de ancho y altos iguales o son más pequeñas, no me hace bien la foto grande. Pensé que la solución es que a la imagen original primero se le asigne un tamaño de 500 x 500 y asi me funcionaria pero no se como incorporar esto en mi código. También me falta validar que el peso pero tampoco se como y donde ponerlo en el código.

De verdad no quiero ser molesta pero necesito la ayuda porque tengo el trabajo estancado desde hace un monton de dias y no se resolverlo.

Gracias.
__________________
Caminando con el corazón partío
  #8 (permalink)  
Antiguo 22/06/2011, 21:10
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Funcion no redimensiona fotos mas pequeñas

Saludos kimmy, quisiera saber más bien ¿por qué no te resultó el aporte que te indiqué?
Es bien sencillo trabajar con el aporte, y hasta te doy los ejemplos de uso. ¿Qué no entendiste como tal del aporte que te indiqué?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 22/06/2011, 21:15
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Funcion no redimensiona fotos mas pequeñas

Hola abimaelrc lo que pasa es que no se como juntar todo el código que me indicaste para hacer la foto grande y el thumbnail, asignarle un nombre predefinido y una extension y guardar en dos rutas asi como lo hago en la otra. No se si será por mi falta de conocimiento o por los nervios de que pasan y pasan los días y no puedo entregarle la pagina al cliente.

Por eso me pareció que era más fácil tratar de arreglar el que tengo.
__________________
Caminando con el corazón partío
  #10 (permalink)  
Antiguo 22/06/2011, 21:27
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Funcion no redimensiona fotos mas pequeñas

Mira que sencillo es. Primero copia y pega el código a un archivo aparte. Ese archivo lo añades al código usando un require_once. Luego lo que tienes que hacer es instanciar la clase e indicarle la ruta de la imagen a modificar o copiar y ponerle otro nombre. Algo como
Código PHP:
Ver original
  1. <?php
  2. require_once 'clase_de_redimensionar.php';
  3. /**
  4.  * Puedes usar la ruta de la imagen en el servidor
  5.  * o puedes usar $_FILES['image']['tmp_name'] si es que
  6.  * lo subiste al servidor a traves de <input type="file" name="image" />
  7.  */
  8. $image = new ResizePicture('/ruta/de/la/imagen.jpg');
  9.  
  10. /**
  11.  * Redimensionar la imagen por el ancho y que automaticamente
  12.  * tome el alto en forma escalable
  13.  */
  14. $image->resizeToWidth(500);
  15.  
  16. /**
  17.  * Variable que contiene el nombre de la imagen redimensionada,
  18.  * puedes otorgar la misma que tiene la imagen o
  19.  * puedes usar otra
  20.  */
  21. $nameImage = 'nombre_nuevo_de_la_imagen.jpg';
  22.  
  23. /**
  24.  * Puedes indicar la ruta del directorio que quieres subir
  25.  * o solo colocar el nombre de la imagen si lo quieres subir al
  26.  * mismo directorio que está este archivo
  27.  */
  28. $image->save($nameImage);
Es sencillo, trátalo y nos dejas saber como te fue
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #11 (permalink)  
Antiguo 22/06/2011, 21:30
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Funcion no redimensiona fotos mas pequeñas

Te lo agradezco en el alma. Pruebo y te cuento. Mil Gracias.
__________________
Caminando con el corazón partío
  #12 (permalink)  
Antiguo 22/06/2011, 21:52
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Funcion no redimensiona fotos mas pequeñas

Hola, la usé y guarda todo bien pero sigo teniendo el problema de que me hace el tamaño proporcional y yo lo necesito con alto y ancho fijo pues después es llamada en una galeria jquery. Este es mi código:

Código PHP:
Ver original
  1. require_once '../../func/ResizePicture.php';
  2.  
  3. $foto_nombre = $_POST['foto_nombre'];
  4. $extension = 'jpg';
  5. $ruta1 = "images/galeria2/large/";
  6. $ruta2 = "images/galeria2/thumbnails/";
  7.  
  8. $image = new ResizePicture($_FILES['foto']['tmp_name']);
  9.  
  10.     $original = 'original_' . $_FILES['foto']['name'];
  11.     $image->save($original);
  12.  
  13.     if($image->getWidth() > 444){
  14.         $image->resizeToWidth(444);
  15.         $w444 = 'w444_' . $_FILES['foto']['name'];
  16.         $w444 = $foto_nombre. '.' . $extension;
  17.         $image->save($ruta1.$w444);
  18.     }
  19.  
  20.  
  21.     if($image->getWidth() > 54){
  22.         $image->resizeToWidth(54);
  23.         $w54 = 'w54_' . $_FILES['foto']['name'];
  24.         $w54 = $foto_nombre. '.' . $extension;
  25.         $image->save($ruta2.$w54);
  26.     }

que puedo hacer porque cuando la muestra en la galeria no se ajusta el tamaño
__________________
Caminando con el corazón partío
  #13 (permalink)  
Antiguo 22/06/2011, 22:03
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Funcion no redimensiona fotos mas pequeñas

El alto se supone que sea escalable. ¿Podrías indicar las imagenes originales y cuando haces el cambio?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #14 (permalink)  
Antiguo 22/06/2011, 22:11
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 9 meses
Puntos: 15
Respuesta: Funcion no redimensiona fotos mas pequeñas

Según lo entiendo, aqui trae la imagen original:

Código PHP:
Ver original
  1. $image = new ResizePicture($_FILES['foto']['tmp_name']);
  2.     $original = 'original_' . $_FILES['foto']['name'];
  3.     $image->save($original);

y aqui hace los cambios:

Código PHP:
Ver original
  1. if($image->getWidth() > 444){
  2.         $image->resizeToWidth(444);
  3.         $w444 = 'w444_' . $_FILES['foto']['name'];
  4.         $w444 = $foto_nombre. '.' . $extension;
  5.         $image->save($ruta1.$w444);
  6.     }
  7.  
  8.     if($image->getWidth() > 54){
  9.         $image->resizeToWidth(54);
  10.         $w54 = 'w54_' . $_FILES['foto']['name'];
  11.         $w54 = $foto_nombre. '.' . $extension;
  12.         $image->save($ruta2.$w54);
  13.     }

Entiendo que escala la imagen para no deformarla pero al hacerlo no me queda ajustada al tamaño en el jquery (este debería ser en la grande 444 x 444 y en el thumbnail 54 x 54) pero como cargo imagenes de diferentes alto y ancho (ejemplo 1500 x 1200) nunca me redimensiona a las medidas que necesito.

Le dije al cliente que debia cargar las imagenes del tamaño indicado pues esto le garantiza que se vean optimas, pero me dice que no quiere hacer ese trabajo y que el sistema debería hacerlo.

No se que mas hacer.
__________________
Caminando con el corazón partío
  #15 (permalink)  
Antiguo 22/06/2011, 22:24
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Funcion no redimensiona fotos mas pequeñas

Ahhhh tu quieres que tome el 444 x 444 en ese caso usa resize
Código PHP:
Ver original
  1. <?php
  2. require_once 'clase_de_redimensionar.php';
  3. $image = new ResizePicture('/ruta/de/la/imagen.jpg');
  4. $image->resize(444,444);
  5. $nameImage = 'nombre_nuevo_de_la_imagen.jpg';
  6. $image->save($nameImage);
Se va a distorcionar porque le estás dando a la imagen un valor que no corresponde, pero ahí tienes el ejemplo
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: fotos, funcion
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 05:16.