Problemas con thumbnails.

Jetrho
09 de Octubre del 2004
Hola, he realizado el siguiente script para crear thumbnails de imagenes. El caso es que al principio funcionaba bien, pero ahora ha dejado de funcionar, y encima cuando lo cargo, el servidor deja de servir paginas, me podriais decir si se me ha escapado algo que no vea y que pueda originar este error? Gracias de antemano.

Este es el codigo:

$cadena=strtok($ruta,"/");
while ($cadena)
{
$archivo=$cadena;
$cadena=strtok("/");
}
$cadena=strtok($archivo,".");
while ($cadena)
{
$ext=$cadena;
$cadena=strtok(".");
}
$ext=strtolower($ext);
if ($ext=="gif")
{
$fuente = imagecreatefromgif($ruta);
Header("Content-type: image/jpg");
}
if ($ext=="jpeg" or $ext=="jpg")
{
$fuente = imagecreatefromjpeg($ruta);
Header("Content-type: image/jpeg");
}
if ($ext=="png")
{
$fuente = imagecreatefrompng($ruta);
Header("Content-type: image/jpg");
}

$dimension=getimagesize($ruta);
$imgAlto=$dimension[1];
$imgAncho=$dimension[0];
if (!$alto)
{
$alto=60;
}
if (!$ancho)
{
$ancho=60;
}
if ($imgAlto>$imgAncho)
{
$cons=$alto/$imgAlto;
}
if ($imgAlto<$imgAncho)
{
$cons=$ancho/$imgAncho;
}
if ($imgAlto==$imgAncho)
{
$cons=$ancho/$imgAlto;
}
$alto=$cons*$imgAlto;
$ancho=$cons*$imgAncho;

$imagen = imagecreatetruecolor($ancho,$alto);

ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);
imagejpeg($imagen,"",75);
ImageDestroy($imagen);

Omar Ch?z
09 de Octubre del 2004
En realidad, nunca tube problemas, tu codigo me funcionó al 100%, pero, hagarre entre un ejemplo de alla, otro de aca, etc... y mi resultado final es el siguiente:

-----------------------------------------
-----------------------------------------
Primero, el codigo que tu tienes, lo puse en un archivo llamado miniimgs.php

<?php
// Ejemplo: http://localhost/pruebas/galeria/miniimgs.php?ruta=2.jpg
$cadena=strtok($ruta,"/");
while ($cadena)
{
$archivo=$cadena;
$cadena=strtok("/");
}
$cadena=strtok($archivo,".");
while ($cadena)
{
$ext=$cadena;
$cadena=strtok(".");
}
$ext=strtolower($ext);
if ($ext=="gif")
{
$fuente = imagecreatefromgif($ruta);
Header("Content-type: image/jpg");
} elseif ($ext=="jpeg" or $ext=="jpg")
{
$fuente = imagecreatefromjpeg($ruta);
Header("Content-type: image/jpeg");
} elseif ($ext=="png")
{
$fuente = imagecreatefrompng($ruta);
Header("Content-type: image/jpg");
} else { exit(); };
$dimension=getimagesize($ruta);
$imgAlto=$dimension[1];
$imgAncho=$dimension[0];
if (!$alto) { $alto=60; };
if (!$ancho) { $ancho=60; };
if ($imgAlto>$imgAncho) { $cons=$alto/$imgAlto; };
if ($imgAlto<$imgAncho) { $cons=$ancho/$imgAncho; };
if ($imgAlto==$imgAncho) { $cons=$ancho/$imgAlto; };
$alto=$cons*$imgAlto;
$ancho=$cons*$imgAncho;
$imagen = imagecreatetruecolor($ancho,$alto);
ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);
imagejpeg($imagen,"",75);
ImageDestroy($imagen);
?>

-----------------------------------------
-----------------------------------------
Para mostrar todas las imagenes que se encuentren en X directorio, use el diguiente archivo...galeria.php

<?php
// Funcion para extraer la extensión de un Archivo dado
function Extension($Archivo)
{
$Archivo=strtok($Archivo,"/");
while ($Archivo)
{
$archivo=$Archivo;
$Archivo=strtok("/");
}
$Archivo=strtok($archivo,".");
while ($Archivo)
{
$Ext=$Archivo;
$Archivo=strtok(".");
}
return strtolower($Ext);
}
// Verificar si se indico algun directorio... de lo contrario, utilizará el actual
if (isset($_POST["dir"])) { $Directorio = $_POST["dir"];} // Busca el parametro en el metodo POST
elseif (isset($_GET["dir"])) { $Directorio = $_GET["dir"];} // Busca el parametro en el metodo GET
else { $Directorio = "./";}; // Si no enviaron el parametro, se especifica
// el directorio actual
if ($Directorio == "") { $Directorio.= "./";}; // Asegura que el Directorio no esté en blanco
if (substr($Directorio,strlen($Directorio)-1,1) != "/") { $Directorio.= "/";}; // Asegura que el fin de la cadena
// sea el la diagonal
// Si el directorio indicado no existe, marca como Galeria no encontrada...
if (!is_dir("$Directorio")) {
print "Galeria no encontrada...";
die();
};
// Abre el directorio
$DirectorioAbierto = opendir("$Directorio");
// Rastrea archivo por archivo el directorio
while ($Archivo = readdir($DirectorioAbierto)) {
if (is_file("$Directorio$Archivo")) {
if (is_readable("$Directorio$Archivo")) {
$Ext = Extension($Archivo);
if ( $Ext=="gif" || ($Ext=="jpeg" or $Ext=="jpg") || $Ext=="png" )
{
$Imagen[] = "<IMG SRC='miniimgs.php?ruta=$Archivo' border=0 Alt='Galeria de imagenes ($Archivo)'>";
};
};
};
};
// Cuenta el numero de imagenes existentes
$count = count($Imagen);
//if ($count > 1) { sort($Imagen); }; // Ordena las imagenes
// Despliega las imagenes
for ($i = 0; $count > $i; $i ++) {
print $Imagen[$i];
}
?>


----------------------------------------
----------------------------------------

El resultado es una serie de imagenes, de todos los archivos existentes en el directorio que le expecifiques, o en el raiz, si es que no le especificas alguno...

Tu puedes armar tu galeria como quieras, solo tienes que modificar la forma de desplegar las etiquetas <IMG ... que se almacenaron en el vector $Imagenes.. esto es, en las ultimas lineas que dicen:

// Despliega las imagenes
for ($i = 0; $count > $i; $i ++) {
print $Imagen[$i];
}

Alli, hechale cesos para que lo acomodes a tu gusto...

De igual forma, si quieres que la forma de mostrar las imagenes sea distinta, osea, que la lista $Imagenes solo te almacene el nombre del archivo imagen, cambiarias la linea 41 asi:

Originalmente dice:
$Imagen[] = "<IMG SRC='miniimgs.php?ruta=$Archivo' border=0 Alt='Galeria de imagenes ($Archivo)'>";

Puedes cambiarla por:
$Imagen[] = "'miniimgs.php?ruta=$Archivo'";


O bien, si lo que deseas es que se ponga un link a la imagen que se muestra quedaría así:

$Imagen[] = "<A HREF=''miniimgs.php?ruta=$Archivo''><IMG SRC='miniimgs.php?ruta=$Archivo' border=0 Alt='Galeria de imagenes ($Archivo)'></A>";


Quizas explique de mas....

Quizas quieras mas soluciones, pero, para eso, piensale tantito.. ;)

Hasta pronto....


[email protected] (casi diario estoy OnLine, pero pocas veces leo mi correo, asi que mejor apuntame en tu lista del MSN... o si me mandas un email, quizas lo lea, pero, por loo regular solo vacio los correos sin leerlos...)

Felices teclasos....