Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Diabliyo en 4 Febrero 2011, 23:24 pm



Título: Problemas con Re-dimencion de imagenes (solved)
Publicado por: Diabliyo en 4 Febrero 2011, 23:24 pm
Buenas..

Quiero implementar un código que me permita redimencionar una imagen o todas las imágenes de un directorio, en donde se le pasan 2 argumentos que son:

argumento 1: nombre de la imagen o directorio.
argumento 2: el width solamente.

En donde si como argumento 1 se le pasa el nombre de imagen entonces la redimenciona, si se le pasa un directorio entonces redimenciona todas.
En donde como argumento 2 es el width deseado, si el width es mayor a la dimencion real de la imagen, entonces no se redimenciona, si sobre pasa, entonces se redimenciona pero utilizando niveles porcentuales. Vaya, si la imagen real es de: 500x850 y deseamos un width de 120, entonces el height lo calculamos en base a la reducción en porcentaje que sufrio el width de 800. Quedando una imagen de 120x204.

Mi código realiza todo el proceso solo que no me genera la imagen en si :(, solo genera imagenes en color negro, ya estuve viendo el code y no encuentro mi error, espero puedan ayudarme:

Aqui un Screenshot (http://i54.tinypic.com/35a9irn.png)

Código
  1. <?php
  2. function crear_imagen( $formato, $archivo )
  3. {
  4. if( !strcmp($formato, "image/jpeg") )
  5. $img= imagecreatefromjpeg($archivo);
  6. else if( !strcmp($formato, "image/jpg") )
  7. $img= imagecreatefromjpeg($archivo);
  8. else if( !strcmp($formato, "image/png") )
  9. $img= imagecreatefrompng($archivo);
  10.  
  11. unset($formato);
  12. return $img;
  13. }
  14.  
  15. # redimenciona una o varias imagenes que este dentro de un directorio
  16. # obtenido mediante el argumento y estableciendo las dimencion deseada o aproximada
  17. function redimencionar_imagen( $data, $sizeall )
  18. {
  19. if( is_dir($data) ) # si es directorio, entonces redimencionaremos todas las imagenes dentro
  20. {
  21. $dir= $data;
  22. $d= opendir($dir); # acrimos directorio
  23. while( ($buf=readdir($d))!==FALSE) #leemos
  24. {
  25. if( strcmp($buf, ".") && strcmp($buf, "..") && !is_dir($buf) ) # si es distinto a patth oculto y no es directorio
  26. {
  27. $tipo= substr( strtolower($buf), -3 ); # extraemos extensión
  28. $nombre= substr( $buf, 0, -4 ); # extraemos nombre real
  29. $new= $nombre. '_resized.'. $tipo; # nuevo nombre con tag y extensión
  30.  
  31. $img= crear_imagen( "image/". $tipo, $dir.$buf ); # creamos imagen apartir de la principal
  32.  
  33. $size= getimagesize($dir.$buf); # obtenemos dimencion de la imagen original
  34. $w= $size[0]; # extraemos width
  35. $h=$size[1]; # extraemos height
  36.  
  37. # si es menor a la dimencion de thumbnails requerida
  38. if( $w<=$sizeall )
  39. {
  40. $width= $w;
  41. $height= $h;
  42. }
  43. else # entonces es mayor, se redimenciona
  44. {
  45. $extract= $w-$sizeall; # obtenemos los pixeles que se quitaran a la dimencion original
  46. $porcentaje= ($extract*100)/$w; # obtenemos porcentaje que se le reducira al width original
  47. $width= $sizeall; # establecemos width deseado
  48. $height= $h-(($h*$porcentaje)/100); # obtenemos dimencion height segun la reduccion del porcentaje
  49. }
  50.  
  51. $thumb= imagecreatetruecolor($width, $height); # creamos imagen con dimenciones
  52. imagecopyresampled($thumb, $img, 0, 0, 0, 0, $width, $height, $w, $h ); # creamos imagen virtual
  53. imprimir_imagen( $thumb, "image/".$tipo, 0, $dir.$new, 100 ); # creamos imagen
  54.  
  55. unset($new, $tipo, $nombre);
  56. }
  57. }
  58. closedir($d);
  59. }
  60. else # entonces es un archivo, redimencionamos la imagen
  61. {
  62. $buf= $data; # copiamos para usar el mismo code de arriba
  63. $tipo= substr( strtolower($buf), -3 ); # extraemos extensión
  64. $nombre= substr( $buf, 0, -4 ); # extraemos nombre real
  65. $new= $nombre. '_resized.'. $tipo; # nuevo nombre con tag y extensión
  66.  
  67. $img= crear_imagen( "image/". $tipo, $buf ); # creamos imagen apartir de la principal
  68.  
  69. $size= getimagesize($buf); # obtenemos dimencion de la imagen original
  70. $w= $size[0]; # extraemos width
  71. $h=$size[1]; # extraemos height
  72.  
  73. # si es menor a la dimencion de thumbnails requerida
  74. if( $w<=$sizeall )
  75. {
  76. $width= $w;
  77. $height= $h;
  78. }
  79. else # entonces es mayor, se redimenciona
  80. {
  81. $extract= $w-$sizeall; # obtenemos los pixeles que se quitaran a la dimencion original
  82. $porcentaje= ($extract*100)/$w; # obtenemos porcentaje que se le reducira al width original
  83. $width= $sizeall; # establecemos width deseado
  84. $height= $h-(($h*$porcentaje)/100); # obtenemos dimencion height segun la reduccion del porcentaje
  85. }
  86.  
  87. # obtenemos el directorio
  88. $x= explode("/", $buf ); # explotamos
  89. $dir='';
  90. # recorremos arreglo excluyendo el ultimo valor para dar con el directorio real
  91. for($i=0; $i<(count($x)-1); $i++ )
  92. $dir .= $x[$i]; # concatenamos
  93.  
  94. $thumb= imagecreatetruecolor($width, $height); # creamos imagen con dimenciones
  95. imagecopyresampled($thumb, $img, 0, 0, 0, 0, $width, $height, $w, $h ); # creamos imagen virtual
  96. imprimir_imagen( $thumb, "image/".$tipo, 0, $dir.$new, 100 ); # creamos imagen
  97.  
  98. unset($new, $tipo, $nombre, $dir, $x, $i);  
  99. }
  100. }
  101. ?>

Código
  1. <?php
  2. function imprimir_imagen( $img, $formato, $modo, $url, $calidad )
  3. {
  4. if( $modo==1 ) //se mostrara al tiempo
  5. header_imagen( $formato );
  6. //entonces si modo es 0 no se imprime, se GUARDA
  7.  
  8. if( !strcmp($formato, "image/jpeg") )
  9. return imagejpeg($img, $url, $calidad );
  10. else if( !strcmp($formato, "image/jpg") )
  11. return imagejpeg($img, $url, $calidad );
  12. else if( !strcmp($formato, "image/png") )
  13. return imagepng($img, $url, $calidad );
  14.  
  15. return 0;
  16. unset($formato);
  17. unset($img);
  18. }
  19. ?>


Título: Re: Problemas con Re-dimencion de imagenes (solved)
Publicado por: Diabliyo en 4 Febrero 2011, 23:46 pm
Ya quedo... el error estaba en la función imagecopyresampled() me faltaban 2 argumentos al final...

YA CORREGI el codigo que esta al inicio del post y agrego aqui el dato que se corrigio:

Código
  1. <?php
  2. imagecopyresampled($thumb, $img, 0, 0, 0, 0, $width, $height, $w, $h ); # creamos imagen virtual
  3. ?>

Saludos !