Categorías destacadas
programacion php    
Artículo
1
¡votar!

 Generar gráficos utilizando la librería GD


Directorio de imágenes - miniaturas

En las páginas web, a menudo se encuentran miniaturas de imágenes, por lo general representan enlaces a la imagen análoga en alta resolución. La aplicación de las miniaturas como imágenes que dan una vista preliminar tiene muchas ventajas. Es un elemento indispensable en el caso de un directorio de imagenes o galerías de fotografías. Buscar una imagen específica es más sencillo que revisar consecutivamente todas las fotografías en su resolución máxima, especialmente para los usuarios de Internet que utilizan conexión de bajo ancho de banda. En caso de páginas que presentan información, este método permite introducir miniaturas estéticamente en el contenido del servicio, porque tal vez los lectores no esten interesados en las fotografías.

La preparación de gráficos en tamaños alternativos, con ayuda de programas gráficos puede ser muy laborioso, con el uso de la librería GD podemos hacerlo automáticamente. Desde luego, las fotografías pueden tener diferentes proporciones y tamaños.

Nuestro ejemplo esta compuesto de miniaturas de imagenes de tamaños definidos, manteniendo la proporción de las imagenes originales. Tomando los siguientes principios:

  • la escala de la imagen está definida de tal forma que sea toda visible (no puede ser recortada),
  • si la imagen original es menor que el tamaño seleccionado que las miniaturas, en tal caso la imagen no se somete a la conversión de escala (aumentada).
Figura 1: Imagen modificada  – Listado 2
Listado 3: Carga de la imagen inicial sometiéndola a la escala correspondiente – archivo thumb.php
<?php
if($_GET['width'] > 0) {
    $width = $_GET['width'];
} else
{
    $width = 200;
}
if($_GET['height'] > 0) {
    $height = $_GET['height'];
} else
{
    $height = 200;
}
if($_GET['filename']) {
    $filename = $_GET['filename'];
} else
{
    $filename = 'civic.jpg';
}

//imagen desde el archivo jpg
$src_image = imagecreatefromjpeg($filename);

$image = imagecreate($width, $height);

//asignamos los colores que ocuparemos más adelante
$bg = imagecolorallocate($image, 200, 200, 200);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);

$margin_x = 10;
$margin_y = 10;

$w = $width-2*$margin_x;
$h = $height-2*$margin_y;

$src_w = imagesx($src_image);
$src_h = imagesy($src_image);

//¿desplegamos la imagen en la dimensión original?
if(($w > $src_w) && ($h > $src_h)) {
    $dst_w = $src_w;
    $dst_h = $src_h;
} else
//¿o escalamos la imagen de acuerdo a la dimensión horizontal?
if(($w/$h) < ($src_w/$src_h)) {
    $dst_w = $w;
    $dst_h = $w*$src_h/$src_w;
} else
//¿o la escalamos de acuerdo a la dimensión vertical?
{
    $dst_w = $h*$src_w/$src_h;
    $dst_h = $h;
}

imagecopyresized($image, $src_image, ($width-$dst_w)/2, ($height-$dst_h)/2,
  0, 0, $dst_w, $dst_h, $src_w, $src_h);

//colocamos el texto sobre la imagen
imagestring($image, 0, $margin_x, ($height-$margin_y), $filename, $white);

//encabezado correspondiente para los datos de salida
header("Content-type: image/jpeg");

//generamos la imagen
imagejpeg($image);

//liberamos la memoria
imagedestroy($image);
?>

Las funciones imagesx(), imagesy() permiten reconocer la dimensión de la imagen. Luego creamos una imagen nueva cuyas dimensiones corresponderán al gráfico resultante. De acuerdo con la dimensión de la imagen original decidimos si se le aplicará una escala a la imagen, en este caso, se decide de acuerdo con tal dimensión. En el caso de que su ancho y su altura sean menores que el tamaño del campo en el que la imagen será colocada, no escalamos la imagen. En caso contrario, realizando el aumento se crearía un efecto desagradable de pixels enormes. Si estamos hablando de nuestra galería de fotografías, podemos utilizar nuestros conocimientos no sólo para crear las vistas preliminares sino también para simples modificaciones de las imágenes. Podemos crear un patrón según el cual todas las imágenes en nuestro servicio tendrán un marco característico o las marcaremos con nuestro logo. Eso ya puede hacerlo el lector como experimento.

El efecto que podemos apreciar en la Figura 2 es el resultado del funcionamiento de los scripts thumb.php y catalog.php. El script catalog.php. (véase el Listado 5) genera código HTML con una forma para seleccionar el tamaño de las miniaturas además de las vistas preliminares.

Listado 4: Archivo catalog.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE> Images </TITLE></HEAD>
<BODY>
<?php
    //definimos el nombre del script que genera las imagenes
    $image = 'thumb.php';

    //definimos el ancho de las imagenes con base en el parámetro width
    if($_GET['width'] > 0) {
        $width = $_GET['width'];
    } else
    {
        $width = 200;
    }
    //definimos la altura de las imagenes con base en el parámetro height
    if($_GET['height'] > 0) {
        $height = $_GET['height'];
    } else
    {
        $height = 200;
    }

    //generamos el formulario para la selección del tamaño de las vistas preliminares
    echo '<FORM ACTION="'.$_SERVER['SCRIPT_NAME'].'" METHOD="GET">';
    echo '<SELECT NAME="width">';
    echo '<OPTION VALUE="">-- width --</OPTION>';
    for($i=100; $i<700; $i+=100) {
        echo '<OPTION VALUE="'.$i.'"';
        if($i == $width) {
            echo ' SELECTED';
        }
        echo '>'.$i.'</OPTION>';
    }
    echo '</SELECT>';
    echo '<SELECT NAME="height">';
    echo '<OPTION VALUE="">-- height --</OPTION>';
    for($i=100; $i<700; $i+=100) {
        echo '<OPTION VALUE="'.$i.'"';
        if($i == $height) {
            echo ' SELECTED';
        }
        echo '>'.$i.'</OPTION>';
    }
    echo '</SELECT>';
    echo '<INPUT TYPE="SUBMIT" VALUE=" SHOW ">';
    echo '</FORM>';

    //definimos el nombre del directorio en el que se encuentran las imágenes
    $path = 'images/';
    $dir = opendir('images');
    //leeemos el contenido del directorio
    while ($file = readdir($dir)) {
        //seleccionamos sólo los archivos con extensión .jpg
        if(is_file($path.$file) && preg_match("/\.jpg$/i", $file)) {
            //generamos el enlace a la imagen original
            echo '<A HREF="'.$path.$file.'" TARGET="_blank">';
            //colocamos la imagen con ruta al script que genera los gráficos preliminares
            echo '<IMG SRC="'.$image.'?filename='.$path.$file.'&width='.$width.
              '&height='.$height.'" WIDTH="'.$width.'" HEIGHT="'.$height.
              '" BORDER="1" HSPACE="8" VSPACE="8">';
            echo '</A>';
        }
    }
    //cerramos el descriptor
    closedir($dir);
?>
</BODY></HTML>
Publicado por:
Juan Miguel Ballester
Recomendar
a un amigo
Compartir
en redes
 
Comentarios
 
BBDD
Entornos de desarrollo
Entretenimiento
Herramientas
Internet
Lenguajes de script
Lenguajes imperativos
Lenguajes orientados a objeto
Otros lenguajes
Plataformas
Teoría
Varios
Copyright © 1998-2011 Programación en Castellano. Todos los derechos reservados
Datos legales | Politica de privacidad | Contacte con nosotros | Publicidad

Diseño web y desarrollo web. Un proyecto de los hermanos Carrero.

Red internet:
Juegos gratis | Servidores dedicados
Más internet: Password | Directorio de weblogs | Favicon