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)
<?php
function crear_imagen( $formato, $archivo )
{
if( !strcmp($formato, "image/jpeg") ) else if( !strcmp($formato, "image/jpg") ) else if( !strcmp($formato, "image/png") )
return $img;
}
# redimenciona una o varias imagenes que este dentro de un directorio
# obtenido mediante el argumento y estableciendo las dimencion deseada o aproximada
function redimencionar_imagen( $data, $sizeall )
{
if( is_dir($data) ) # si es directorio, entonces redimencionaremos todas las imagenes dentro {
$dir= $data;
$d= opendir($dir); # acrimos directorio while( ($buf=readdir($d))!==FALSE) #leemos {
if( strcmp($buf, ".") && strcmp($buf, "..") && !is_dir($buf) ) # si es distinto a patth oculto y no es directorio {
$nombre= substr( $buf, 0, -4 ); # extraemos nombre real $new= $nombre. '_resized.'. $tipo; # nuevo nombre con tag y extensión
$img= crear_imagen( "image/". $tipo, $dir.$buf ); # creamos imagen apartir de la principal
$size= getimagesize($dir.$buf); # obtenemos dimencion de la imagen original $w= $size[0]; # extraemos width
$h=$size[1]; # extraemos height
# si es menor a la dimencion de thumbnails requerida
if( $w<=$sizeall )
{
$width= $w;
$height= $h;
}
else # entonces es mayor, se redimenciona
{
$extract= $w-$sizeall; # obtenemos los pixeles que se quitaran a la dimencion original
$porcentaje= ($extract*100)/$w; # obtenemos porcentaje que se le reducira al width original
$width= $sizeall; # establecemos width deseado
$height= $h-(($h*$porcentaje)/100); # obtenemos dimencion height segun la reduccion del porcentaje
}
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $width, $height, $w, $h ); # creamos imagen virtual imprimir_imagen( $thumb, "image/".$tipo, 0, $dir.$new, 100 ); # creamos imagen
unset($new, $tipo, $nombre); }
}
}
else # entonces es un archivo, redimencionamos la imagen
{
$buf= $data; # copiamos para usar el mismo code de arriba
$nombre= substr( $buf, 0, -4 ); # extraemos nombre real $new= $nombre. '_resized.'. $tipo; # nuevo nombre con tag y extensión
$img= crear_imagen( "image/". $tipo, $buf ); # creamos imagen apartir de la principal
$size= getimagesize($buf); # obtenemos dimencion de la imagen original $w= $size[0]; # extraemos width
$h=$size[1]; # extraemos height
# si es menor a la dimencion de thumbnails requerida
if( $w<=$sizeall )
{
$width= $w;
$height= $h;
}
else # entonces es mayor, se redimenciona
{
$extract= $w-$sizeall; # obtenemos los pixeles que se quitaran a la dimencion original
$porcentaje= ($extract*100)/$w; # obtenemos porcentaje que se le reducira al width original
$width= $sizeall; # establecemos width deseado
$height= $h-(($h*$porcentaje)/100); # obtenemos dimencion height segun la reduccion del porcentaje
}
# obtenemos el directorio
$x= explode("/", $buf ); # explotamos $dir='';
# recorremos arreglo excluyendo el ultimo valor para dar con el directorio real
for($i=0; $i<(count($x)-1); $i++ ) $dir .= $x[$i]; # concatenamos
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $width, $height, $w, $h ); # creamos imagen virtual imprimir_imagen( $thumb, "image/".$tipo, 0, $dir.$new, 100 ); # creamos imagen
unset($new, $tipo, $nombre, $dir, $x, $i); }
}
?>
<?php
function imprimir_imagen( $img, $formato, $modo, $url, $calidad )
{
if( $modo==1 ) //se mostrara al tiempo
header_imagen( $formato );
//entonces si modo es 0 no se imprime, se GUARDA
if( !strcmp($formato, "image/jpeg") ) else if( !strcmp($formato, "image/jpg") ) else if( !strcmp($formato, "image/png") )
return 0;
}
?>
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:
<?php
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $width, $height, $w, $h ); # creamos imagen virtual ?>
Saludos !