Buenas!.
En estos últimos días estoy intentando redimensionar todas las fotos de una carpeta, para ello estoy usando el siguiente código.
<?php
//Recogemos variables;
$ruta=$_GET["ruta"];
$anchura=$_GET["anchura"];
$hmax=$_GET["altura"];
//Guardamos el nombre de las fotos en un array
$nombre = glob($ruta.'\\*.{jpg,gif,png}', GLOB_BRACE); //Expresiones regulares
$numero_fotos=count($nombre); //No fotos.
//Bucle que abarque todas las fotos
for($i=0;$i<$numero_fotos;$i++)
{
$datos = getimagesize($nombre[$i]); //Recogemos los datos de la foto [0][1][2] (ancho, alto, tipo)
if($datos[2]==1)
{
$img = @imagecreatefromgif($nombre[$i]);
};
if($datos[2]==2)
{
$img = @imagecreatefromjpeg($nombre[$i]);
};
if($datos[2]==3)
{
$img = @imagecreatefrompng($nombre[$i]);
};
/*
aqui empieza lo bueno
como bien sabemos no podemos redimensionar una imagen vertical de la misma forma que una horizontal
bueno esta parte del script no ayuda a poder hacerlo lo que realiza es dividir el ancho original entre
el ancho maximo y luego divide la altura original entre el resultado anterior
bueno esto es para el ancho
*/
$ratio = ($datos[0] / $anchura);
$altura = ($datos[1] / $ratio);
/*
Para el Alto
sera esto primero pregunta si el alto es mayor que el alto maximo que hemos definido
esto solo significa que es una imagen vertical claro si la condicion nos da true
lo que haremos sera multiplicar la altura maxima por la anchura que hemos definido
y la dividimos entre la altura esto nos dara una imagen vertical apropiada para
nuestra muestra
*/
if($altura>$hmax)
{
$anchura2 = $hmax*$anchura/$altura;
$altura = $hmax;
$anchura = $anchura2;
};
//Creamos la imagen en blanco
$thumb = imagecreatetruecolor($anchura,$altura);
// Sustituimos la imagen antigua por la nueva
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);
// Guardamos la imagen con otro nombre.
if($datos[2]==1)
{
imagegif($thumb,"thumb_".$i.".gif");
};
if($datos[2]==2)
{
imagejpeg($thumb,"thumb_".$i.".jpeg");
};
if($datos[2]==3)
{
imagepng($thumb,"thumb_".$i.".png");
};
// Destruimos la imagen temporal para no recargar el servidor
imagedestroy($thumb);
};
?>
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 (http://www.codigolandia.com/art-Redimensionar+Imagenes+con+PHP-php-108.tc)
Tomando en cuenta las siguiente notas del uso de la función glob();
(http://img683.imageshack.us/img683/1545/noto.png)
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...
<?php
//Guardamos el nombre de las fotos en un array
$nombre = glob($ruta.'\\*.{jpg,gif,png}', GLOB_BRACE); //Expresiones regulares
$numero_fotos=count($nombre); //No fotos.
También pueda ser que no tengas permiso de escritura, en que SO lo estas probando?
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:
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:
//...
for($i=0;$i<$numero_fotos;$i++)
{
echo $nombre[$i]; //esto lo muestra
$datos = getimagesize($nombre[$i]);
echo $datos[0]."-".$datos[1]."-"$datos[2]; //Esto también lo muestra
if($datos[2]==1)
{
$img = @imagecreatefromgif($nombre[$i]);
};
if($datos[2]==2)
{
$img = @imagecreatefromjpeg($nombre[$i]);
};
if($datos[2]==3)
{
$img = @imagecreatefrompng($nombre[$i]);
};
$ratio = ($datos[0] / $anchura);
echo $ratio; // Esto ya no lo muestra
$altura = ($datos[1] / $ratio);
// ...
Lo estoy probando bajo windows xp con PHP Version 6.0.0-dev.
Thanks!
Mejor usa la clase NetpbmResize (http://netpbmresize.sourceforge.net/index.php)...
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!
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...
<?php
//Recogemos variables;
$anchura=$_GET["anchura"];
$hmax=$_GET["altura"];
//Guardamos el nombre de las fotos en un array
$nombre = glob('*.{jpg,gif,png}', GLOB_BRACE); //Expresiones regulares
$numero_fotos=count($nombre); //No fotos.
//Bucle que abarque todas las fotos
for($i=0;$i<$numero_fotos;$i++)
{
$datos = getimagesize($nombre[$i]); //Recogemos los datos de la foto [0][1][2] (ancho, alto, tipo)
if($datos[2]==1)
{
$img = @imagecreatefromgif($nombre[$i]);
};
if($datos[2]==2)
{
$img = @imagecreatefromjpeg($nombre[$i]);
};
if($datos[2]==3)
{
$img = @imagecreatefrompng($nombre[$i]);
};
/*
aqui empieza lo bueno
como bien sabemos no podemos redimensionar una imagen vertical de la misma forma que una horizontal
bueno esta parte del script no ayuda a poder hacerlo lo que realiza es dividir el ancho original entre
el ancho maximo y luego divide la altura original entre el resultado anterior
bueno esto es para el ancho
*/
$ratio = ($datos[0] / $anchura);
$altura = ($datos[1] / $ratio);
/*
Para el Alto
sera esto primero pregunta si el alto es mayor que el alto maximo que hemos definido
esto solo significa que es una imagen vertical claro si la condicion nos da true
lo que haremos sera multiplicar la altura maxima por la anchura que hemos definido
y la dividimos entre la altura esto nos dara una imagen vertical apropiada para
nuestra muestra
*/
if($altura>$hmax)
{
$anchura2 = $hmax*$anchura/$altura;
$altura = $hmax;
$anchura = $anchura2;
};
//Creamos la imagen en blanco
$thumb = imagecreatetruecolor($anchura,$altura);
// Sustituimos la imagen antigua por la nueva
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);
// Guardamos la imagen con otro nombre.
if($datos[2]==1)
{
imagegif($thumb,"thumb_".$i.".gif");
};
if($datos[2]==2)
{
imagejpeg($thumb,"thumb_".$i.".jpeg");
};
if($datos[2]==3)
{
imagepng($thumb,"thumb_".$i.".png");
};
// Destruimos la imagen temporal para no recargar el servidor
imagedestroy($thumb);
};
?>