Buenas noches, he indagado mucho en internet sobre cómo hacer galerías que carguen las imágenes de acuerdo a una carpeta. Encontré en algún antiguo foro un código muy interesante, que permite la creación de thumbnail para hacer funcionar la galería.
Resulta que funciona, pero las vistas previas en miniatura no se ven... es decir, cargan los cuadritos con icono roto, aunque al dar click en ellos, se abre la imagen correctamente.
He revisado, y parece estar todo bien, pero tengo nada de experiencia en clases de php.
Comparto el código por si algún experto puede encontrar la falla.
Código de Galeria.php
Código PHP:
Ver original<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP Gallery Example</title>
<link href="css/jquery.lightbox-0.5.css" rel="stylesheet" type="text/css" />
<script src="scripts/jquery-1.3.2.js" language="javascript"></script>
<script src="scripts/jquery.lightbox-0.5.js" language="javascript"></script>
</head>
<body>
<div align="center">
<?php
include_once('gallery.php');
$mygallery = new gallery();
$mygallery->loadFolder('galley_images');
$mygallery->show(500, 100, 10);
?>
</div>
</body>
</html>
Código de gallery.php donde se llama a show_thumb.php que es el que no carga los cuadritos :/
Código PHP:
Ver original<?php
class gallery {
var $path;
function loadFolder($path){
$this->path = $path;
//---Guardar en un arreglo todos los archivos en el directorio
//---Si no es un directorio
//---Ir guardando los nombres en un arreglo
$this->files[] = $fil;
}
}
}
//---Cerrar el directorio
//---Ordenar alfabeticamente el arreglo
}
function show($area = 500, $width = 100, $space = 10){
//---Crear la galería con los nombres de todos los archivos
$total = count($this->files); $cont = 0;
echo '<div name="xx" style="width:'.$area.'px">';
//---Situar los thumbnails
for($i = 0; $i < $total; $i++){
echo '<div style="width:'.$width.'px; float:left; padding-right:'.$space.'px; padding-bottom:'.$space.'px;"><a href="'.$this->path.'/'.$this->files[$i].'" rel="lightbox"><img src="show_thumb.php?src='.$this->path.'/'.$this->files[$i].'&width='.$width.'" width="'.$width.'" height="'.$width.'" border="0"></img></a></div>';
}
?>
<script language="javascript">
$(document).ready(function(){
$("a[rel = 'lightbox']").lightBox();
});
</script>
<?php
echo '</div>';
}
}
?>
Código de thumb.php donde se maneja la imagen para redimensionarla.
Código PHP:
Ver original<?php
class thumb {
var $image;
var $type;
var $width;
var $height;
//---Método de leer la imagen
function loadImage($name) {
//---Tomar las dimensiones de la imagen
$this->width = $info[0];
$this->height = $info[1];
$this->type = $info[2];
//---Dependiendo del tipo de imagen crear una nueva imagen
switch($this->type){
case IMAGETYPE_JPEG:
break;
case IMAGETYPE_GIF:
break;
case IMAGETYPE_PNG:
break;
}
}
//---Método de guardar la imagen
function save($name, $quality = 100) {
//---Guardar la imagen en el tipo de archivo correcto
switch($this->type){
case IMAGETYPE_JPEG:
break;
case IMAGETYPE_GIF:
break;
case IMAGETYPE_PNG:
$pngquality = floor(($quality - 10) / 10); imagepng($this->image, $name, $pngquality); break;
}
}
//---Método de mostrar la imagen sin salvarla
function show() {
//---Mostrar la imagen dependiendo del tipo de archivo
switch($this->type){
case IMAGETYPE_JPEG:
break;
case IMAGETYPE_GIF:
break;
case IMAGETYPE_PNG:
break;
}
}
//---Método de redimensionar la imagen sin deformarla
function resize($name, $value, $prop){
//---Determinar la propiedad a redimensionar y la propiedad opuesta
$prop_value = ($prop == 'width') ? $this->width : $this->height;
$prop_versus = ($prop == 'height') ? $this->height : $this->width;
//---Determinar el valor opuesto a la propiedad a redimensionar
$pcent = $value / $prop_value;
$value_versus = $prop_versus * $pcent;
//---Crear la imagen dependiendo de la propiedad a variar
//---Hacer una copia de la imagen dependiendo de la propiedad a variar
switch($prop){
case 'width':
imagecopyresampled($image, $this->image, 0, 0, 0, 0, $value, $value_versus, $this->width, $this->height); break;
case 'height':
imagecopyresampled($image, $this->image, 0, 0, 0, 0, $value_versus, $value, $this->width, $this->height); break;
}
//---Actualizar la imagen y sus dimensiones
$this->image = $image;
}
//---Método de extraer una sección de la imagen sin deformarla
function crop($name, $cwidth, $cheight, $pos = 'center') {
//---Hallar los valores a redimensionar
$new_w = $cwidth;
$new_h = ($cwidth / $this->width) * $this->height;
//---Si la altura es menor recalcular por la altura
if($new_h < $cheight){
$new_h = $cheight;
$new_w = ($cheight / $this->height) * $this->width;
}
$this->resize($new_w, 'width');
//---Crear la imagen tomando la porción del centro de la imagen redimensionada con las dimensiones deseadas
switch($pos){
case 'center':
imagecopyresampled($image, $this->image, 0, 0, abs(($this->width - $cwidth) / 2), abs(($this->height - $cheight) / 2), $cwidth, $cheight, $cwidth, $cheight); break;
case 'left':
imagecopyresampled($image, $this->image, 0, 0, 0, abs(($this->height - $cheight) / 2), $cwidth, $cheight, $cwidth, $cheight); break;
case 'right':
imagecopyresampled($image, $this->image, 0, 0, $this->width - $cwidth, abs(($this->height - $cheight) / 2), $cwidth, $cheight, $cwidth, $cheight); break;
case 'top':
imagecopyresampled($image, $this->image, 0, 0, abs(($this->width - $cwidth) / 2), 0, $cwidth, $cheight, $cwidth, $cheight); break;
case 'bottom':
imagecopyresampled($image, $this->image, 0, 0, abs(($this->width - $cwidth) / 2), $this->height - $cheight, $cwidth, $cheight, $cwidth, $cheight); break;
}
$this->image = $image;
}
}
?>
Y código de show_thumb.php que es la que debería mostrar las miniaturas bien.
Código PHP:
Ver original<?php
$src = $_GET['src'];
$width = $_GET['width'];
include_once('thumb.php');
$image = new thumb();
$image->loadImage($src);
$image->crop($src, $width, $width);
$image->show();
?>
Gracias por su tiempo, espero alguien pueda darme respuestas :(