elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Redimensionar varios archivos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Redimensionar varios archivos  (Leído 2,832 veces)
luiggy2


Desconectado Desconectado

Mensajes: 439


¡ Hello word ! XD


Ver Perfil
Redimensionar varios archivos
« en: 26 Septiembre 2010, 19:14 pm »

Buenas!.
En estos últimos días estoy intentando redimensionar todas las fotos de una carpeta, para ello estoy usando el siguiente código.

Código
  1. <?php
  2.  
  3. //Recogemos variables;
  4. $ruta=$_GET["ruta"];
  5. $anchura=$_GET["anchura"];
  6. $hmax=$_GET["altura"];
  7.  
  8. //Guardamos el nombre de las fotos en un array
  9. $nombre = glob($ruta.'\\*.{jpg,gif,png}', GLOB_BRACE); //Expresiones regulares
  10. $numero_fotos=count($nombre); //No fotos.
  11.  
  12.  
  13. //Bucle que abarque todas las fotos
  14. for($i=0;$i<$numero_fotos;$i++)
  15. {
  16.  
  17. $datos = getimagesize($nombre[$i]); //Recogemos los datos de la foto [0][1][2] (ancho, alto, tipo)
  18.  
  19. if($datos[2]==1)
  20. {
  21. $img = @imagecreatefromgif($nombre[$i]);
  22. };
  23. if($datos[2]==2)
  24. {
  25. $img = @imagecreatefromjpeg($nombre[$i]);
  26. };
  27. if($datos[2]==3)
  28. {
  29. $img = @imagecreatefrompng($nombre[$i]);
  30. };
  31.  
  32.  
  33. /*
  34.   aqui empieza lo bueno
  35.   como bien sabemos no podemos redimensionar una imagen vertical de la misma forma que una horizontal
  36. bueno esta parte del script no ayuda a poder hacerlo lo que realiza es dividir el ancho original entre
  37.   el ancho maximo y luego divide la altura original entre el resultado anterior
  38.   bueno esto es para el ancho
  39. */
  40.  
  41.  
  42. $ratio = ($datos[0] / $anchura);
  43. $altura = ($datos[1] / $ratio);
  44.  
  45.  
  46. /*
  47. Para el Alto
  48. sera esto primero pregunta si el alto es mayor que el alto maximo que hemos definido
  49. esto solo significa que es una imagen vertical claro si la condicion nos da true
  50. lo que haremos sera multiplicar la altura maxima por la anchura que hemos definido
  51. y la dividimos entre la altura esto nos dara una imagen vertical apropiada para
  52. nuestra muestra
  53. */
  54.  
  55.  
  56. if($altura>$hmax)
  57. {
  58.   $anchura2 = $hmax*$anchura/$altura;
  59.   $altura = $hmax;
  60.   $anchura = $anchura2;
  61. };
  62.  
  63. //Creamos la imagen en blanco
  64. $thumb = imagecreatetruecolor($anchura,$altura);
  65.  
  66. // Sustituimos la imagen antigua por la nueva
  67. imagecopyresampled($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);
  68.  
  69.  
  70. // Guardamos la imagen con otro nombre.
  71.  
  72.  
  73. if($datos[2]==1)
  74. {
  75. imagegif($thumb,"thumb_".$i.".gif");
  76. };
  77. if($datos[2]==2)
  78. {
  79. imagejpeg($thumb,"thumb_".$i.".jpeg");
  80. };
  81. if($datos[2]==3)
  82. {
  83. imagepng($thumb,"thumb_".$i.".png");
  84. };
  85.  
  86. // Destruimos la imagen temporal para no recargar el servidor
  87. imagedestroy($thumb);
  88.  
  89. };
  90.  
  91.  
  92.  
  93.  
  94. ?>

El problema es que después de solucionar varios errores, no consigo que funcione. Supongo que el error estará en algo tonto, pero ahora mismo no caigo.

Espero sus respuestas.


Pd.: La mayor parte del sódigo la saqué de esta web: http://www.codigolandia.com/art-Redimensionar+Imagenes+con+PHP-php-108.tc


« Última modificación: 29 Septiembre 2010, 20:05 pm por luiggy2 » En línea

" Las grandes ideas suelen salir la mayoría de veces de grandes estupideces "
~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Ayuda, redimensionar varios archivos
« Respuesta #1 en: 26 Septiembre 2010, 20:37 pm »

Tomando en cuenta las siguiente notas del uso de la función glob();


El problema puede estar en la expresión que creaste, nose puede saber con exactitud el tipo de valor que contiene la variable $ruta, para saber si ese es el problema...
Código
  1. <?php
  2.  
  3. //Guardamos el nombre de las fotos en un array
  4. $nombre = glob($ruta.'\\*.{jpg,gif,png}', GLOB_BRACE); //Expresiones regulares
  5. $numero_fotos=count($nombre); //No fotos.

También pueda ser que no tengas permiso de escritura, en que SO lo estas probando?


En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
luiggy2


Desconectado Desconectado

Mensajes: 439


¡ Hello word ! XD


Ver Perfil
Re: Ayuda, redimensionar varios archivos
« Respuesta #2 en: 27 Septiembre 2010, 14:18 pm »

Muchas gracias por responder.

La variuable $ruta es un array que contiene el nombre de todos los archivos. El problema no es ese ya que si hago un:
Código
  1. echo $nombre[$i];
me aparece el nombre del primer archivo 8solamente). Igual pasa con $datos. Sin embargo $ratio ya no lo muestra, por lo que el problema supongo que estrá al crear las imágenes:
Código
  1. //...
  2.  
  3. for($i=0;$i<$numero_fotos;$i++)
  4. {
  5.  
  6. echo $nombre[$i]; //esto lo muestra
  7.  
  8. $datos = getimagesize($nombre[$i]);
  9.  
  10. echo $datos[0]."-".$datos[1]."-"$datos[2]; //Esto también lo muestra
  11. if($datos[2]==1)
  12. {
  13. $img = @imagecreatefromgif($nombre[$i]);
  14. };
  15. if($datos[2]==2)
  16. {
  17. $img = @imagecreatefromjpeg($nombre[$i]);
  18. };
  19. if($datos[2]==3)
  20. {
  21. $img = @imagecreatefrompng($nombre[$i]);
  22. };
  23.  
  24. $ratio = ($datos[0] / $anchura);
  25.  
  26. echo $ratio; // Esto ya no lo muestra
  27.  
  28. $altura = ($datos[1] / $ratio);
  29.  
  30.  
  31. // ...
  32.  

Lo estoy probando bajo windows xp con PHP Version 6.0.0-dev.

Thanks!
En línea

" Las grandes ideas suelen salir la mayoría de veces de grandes estupideces "
~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Redimensionar varios archivos
« Respuesta #3 en: 29 Septiembre 2010, 22:48 pm »

Mejor usa la clase NetpbmResize...
En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
luiggy2


Desconectado Desconectado

Mensajes: 439


¡ Hello word ! XD


Ver Perfil
Re: Redimensionar varios archivos
« Respuesta #4 en: 2 Octubre 2010, 11:54 am »

Muchas gracias, lo probaré cuando tenga tiempo para ver si funciona.

De todas formas todavía me sigue picando la curiosidad de porque no no funciona mi código.


Saludos!
En línea

" Las grandes ideas suelen salir la mayoría de veces de grandes estupideces "
~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Redimensionar varios archivos
« Respuesta #5 en: 2 Octubre 2010, 16:46 pm »

Ps lo que te dije al principio, tu problema esta en en la expresión regular, yo eh probado el source y funciona correctamente modificando la regexp...

Dame un ejemplo de que valores puede recibir la variable $ruta y verifico si las regexp que hiciste esta correcta...

Código
  1. <?php
  2.  
  3. //Recogemos variables;
  4. $anchura=$_GET["anchura"];
  5. $hmax=$_GET["altura"];
  6.  
  7. //Guardamos el nombre de las fotos en un array
  8. $nombre = glob('*.{jpg,gif,png}', GLOB_BRACE); //Expresiones regulares
  9. $numero_fotos=count($nombre); //No fotos.
  10.  
  11.  
  12. //Bucle que abarque todas las fotos
  13. for($i=0;$i<$numero_fotos;$i++)
  14. {
  15.  
  16. $datos = getimagesize($nombre[$i]); //Recogemos los datos de la foto [0][1][2] (ancho, alto, tipo)
  17.  
  18. if($datos[2]==1)
  19. {
  20. $img = @imagecreatefromgif($nombre[$i]);
  21. };
  22. if($datos[2]==2)
  23. {
  24. $img = @imagecreatefromjpeg($nombre[$i]);
  25. };
  26. if($datos[2]==3)
  27. {
  28. $img = @imagecreatefrompng($nombre[$i]);
  29. };
  30.  
  31.  
  32. /*
  33.   aqui empieza lo bueno
  34.   como bien sabemos no podemos redimensionar una imagen vertical de la misma forma que una horizontal
  35. bueno esta parte del script no ayuda a poder hacerlo lo que realiza es dividir el ancho original entre
  36.   el ancho maximo y luego divide la altura original entre el resultado anterior
  37.   bueno esto es para el ancho
  38. */
  39.  
  40.  
  41. $ratio = ($datos[0] / $anchura);
  42. $altura = ($datos[1] / $ratio);
  43.  
  44.  
  45. /*
  46. Para el Alto
  47. sera esto primero pregunta si el alto es mayor que el alto maximo que hemos definido
  48. esto solo significa que es una imagen vertical claro si la condicion nos da true
  49. lo que haremos sera multiplicar la altura maxima por la anchura que hemos definido
  50. y la dividimos entre la altura esto nos dara una imagen vertical apropiada para
  51. nuestra muestra
  52. */
  53.  
  54.  
  55. if($altura>$hmax)
  56. {
  57.   $anchura2 = $hmax*$anchura/$altura;
  58.   $altura = $hmax;
  59.   $anchura = $anchura2;
  60. };
  61.  
  62. //Creamos la imagen en blanco
  63. $thumb = imagecreatetruecolor($anchura,$altura);
  64.  
  65. // Sustituimos la imagen antigua por la nueva
  66. imagecopyresampled($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);
  67.  
  68.  
  69. // Guardamos la imagen con otro nombre.
  70.  
  71.  
  72. if($datos[2]==1)
  73. {
  74. imagegif($thumb,"thumb_".$i.".gif");
  75. };
  76. if($datos[2]==2)
  77. {
  78. imagejpeg($thumb,"thumb_".$i.".jpeg");
  79. };
  80. if($datos[2]==3)
  81. {
  82. imagepng($thumb,"thumb_".$i.".png");
  83. };
  84.  
  85. // Destruimos la imagen temporal para no recargar el servidor
  86. imagedestroy($thumb);
  87.  
  88. };
  89.  
  90.  
  91.  
  92.  
  93. ?>
En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda con varios archivos.
Seguridad
mrdarknest 3 2,246 Último mensaje 2 Diciembre 2014, 21:10 pm
por Eleкtro
Varios ejercicios de archivos/ordenamientos
Programación C/C++
proxiom 0 1,647 Último mensaje 20 Mayo 2015, 15:40 pm
por proxiom
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines