Esta vez os traigo el código para mostrar las imágenes que tengáis en una carpeta de vuestro servidor.
Se divide en 2 scripts:
Uno mostrara la lista de imágenes de forma paginada, es decir, si tenéis mas de X imágenes, se muestran esas X y abajo saldrán los enlaces al resto de paginas.
El otro se encarga de generar las miniaturas (thumbnails en ingles) si la imagen es mas grande que el ancho máximo.
El código esta explicado para que lo podáis adaptar a vuestras necesidades.
Si tenéis alguna duda de como configurarlo/adaptarlo, habéis visto un error o tenéis alguna sugerencia, es bien recibida, que para eso esta la licencia GPL 3 ;)
galeria.php:
<table> <tr> <?php header('Content-type: text/html; charset=utf-8'); # Galería de imágenes # (CC) Alfonso Saavedra "Son Link" # Bajo GPLv3 $path = 'fotos'; # Directorio donde están las imágenes $limit = 4; # Cuantas imágenes se mostraran por pagina $limit_file = 5; # Imágenes a mostrar por linea en la tabla $n = 0; $desde; $hasta; # Comprobamos si es un directorio y si lo es nos movemos a el if (is_dir($path)){ $dir = opendir($path); # Recorremos los ficheros que hay en el directorio y cogemos solamente aquellos cuya extensión # sea jpg, gif y png y la guardamos en una lista while (false !== ($file = readdir($dir))) { if (preg_match("#([a-zA-Z0-9_\-\s]+)\.(gif|GIF|jpg|JPG|png|PNG)#is",$file)){ $list[] = $file; } } # Cerramos el directorio closedir($dir); # Ordenamos la lista sort ($list); # Contamos el total de elementos en la lista $total = count($list); $paginas = ceil($total/$limit); if (!isset($_GET['pg'])){ $desde = 0; $hasta = $desde + $limit; }else if((int)$_GET['pg'] > ($paginas-1)){ # Si pg es mayor que el total de paginas se muestra un error echo "<b>No existe esta pagina en la galería</b><br /><a href='galeria.php'>Volver a la galería</a>"; die(); }else{ $desde = (int)$_GET['pg']; } # Y generamos los enlaces con los thumbnails for ($i=($desde*$limit);($i!=$total) && ($i<($desde*$limit)+$limit);$i++){ # Comprobamos si existe en la lista una llave con el valor actual de $i para evitar errores if(array_key_exists($i, $list)){ echo "<td><a href='$path/$list[$i]'><img src='thumb.php?img=$path/$list[$i]' /></a><br></td>\n"; $n++; if ($n == $limit_file){ echo "</tr>\n<tr>\n"; $n = 0; } } } }else{ echo "$path no es un directorio"; } ?> </tr> </table> <p id="paginas"> <?php # Generamos un listado de las paginas de la galería for ($p = 0; $p<$paginas; $p++){ $pg = $p+1; if ($p == $desde){ echo "$pg "; }else{ echo "<a href ='?pg=$p'>$pg</a> "; } }?> </p> <?php echo "Hay un total de $total imagen(es) en $paginas paginas(s)" ?>thumb.php
<?php # Generador de Thumbnails para galerías de imágenes # (CC) Alfonso Saavedra "Son Link" # Bajo GPLv3 # Indicamos al navegador que lo que se envía es una imagen en formato jpg header( "Content-type: image/jpeg" ); if (!empty($_GET['img'])){ $new_width = 150; // Tamaño a definir $img = $_GET['img']; # obtenemos las extensiones de los archivos para llamar a la función correspondiente $ext = preg_split('/\./', $img); if ($ext[1] == 'JPG' || $ext[1] == 'jpg'){ $image = ImageCreateFromJPEG($img); }else if ($ext[1] == 'gif' || $ext[1] == 'GIF'){ $image = ImageCreateFromGIF($img); }else if ($ext[1] == 'png' || $ext[1] == 'PNG'){ $image = ImageCreateFromPNG($img); } # Obtenemos el ancho y el alto de la imagen $width = imagesx($image) ; $height = imagesy($image) ; # Si el ancho de la imagen es igual o menor del indicado en new_width redirigimos directamente a la imagen if ($width < $new_width){ imagedestroy($image); header("location: $img"); }else{ # En caso contrario se crea el thumbnail $new_height = ($new_width * $height) / $width ; // tamaño proporcional $thumb = imagecreatetruecolor($new_width,$new_height); imagecopyresized($thumb,$image,0,0,0,0,$new_width,$new_height,$width,$height); #mostramos la imagen generada ImageJPEG($thumb); # Y liberamos memoria imagedestroy($image); imagedestroy($thumb); } } ?>
Variables a modificar:
$path: aquí ponemos la ruta a la carpeta donde están las imágenes
$limit: El total de imágenes a mostrar en cada pagina
$limit_file: numero de imágenes a mostrar en cada fila de la tabla