miércoles, 17 de febrero de 2010

Ejemplo ASP.NET . Miniaturas con GetThumbnailImage

El método GetThumbnailImage de la clase bitmap tiene una función muy sencilla, crear una imagen al tamaño que queramos partiendo de la imagen exitente.

Este ejemplo utiliza una técnica un tanto básica, ya que recorre una carpeta con imagenes y crea dentro de una carpeta temporal las miniaturas que despues muestra. Una evolución de este ejemplo es crearnos una galería con las miniaturas sin necesidad de almacenarlas previamente en el disco

En cuanto a la presentación de las miniaturas las vuelca directamente a la página, sin necesidad de ningún control contenedor, únicamente por simplificar el código

Más información sobre este método en http://msdn.microsoft.com/es-es/library/system.drawing.image.getthumbnailimage.aspx

Instrucciones
  1. En un sitio web de asp.net añadir una nueva página (web form) con el nombre GaleriaImagenes
  2. Crear una carpeta con el nombre "imagenes" y dentro de esta carpeta, crear otra con el nombre "tmp"
  3. Colocar algunas fotos en formato jpg dentro de la carpeta "imagenes"
  4. Copiar este código sustituyendo el existente en el archivo GaleriaImagenes.aspx.vb
  5. Ejecutar la página
Código Fuente
Imports System.IO 'espacio de nombres con las clases para recorrer carpetas

Imports System.Drawing ' espacio de nombres con las clases relacionadas con las imagenes

Partial Class GaleriaImagenes
Inherits System.Web.UI.Page

'recorro la carpeta de imagenes creando una miniatura para cada imagen
Protected Function CargarGaleria() As Boolean

'creo un objeto asociado a la carpeta que quiero recorrer
Dim Dinfo As New IO.DirectoryInfo(Server.MapPath("imagenes"))

'creamos un objeto asociado al procedimiento (addressOff) que estamos utilizando para el caso de que se tenga que cancelar la ejecución del método GetThumnail de la imagen
Dim myCallback As Image.GetThumbnailImageAbort = New Image.GetThumbnailImageAbort(AddressOf CargarGaleria)

'para cdad imagen que hay en la carpeta y que sea del tipo jpg creamos un objeto bmp
'y utilizamos despues el método getThumnailImage para crear la miniatura
For Each im As IO.FileInfo In Dinfo.GetFiles("*.jpg")
           Dim bmp As New Bitmap(im.FullName)
           Dim nuevoBmp As Bitmap = bmp.GetThumbnailImage(bmp.Width / 4, bmp.Height / 4, myCallback, IntPtr.Zero)

           'guardo la miniatura en la carpeta temporal y creo un control imagen asociado a la miniatura
           nuevoBmp.Save(MapPath("/imagenes/tmp/" & im.Name), Imaging.ImageFormat.Jpeg)
          Dim mini As New UI.WebControls.HyperLink
          mini.ImageUrl = "~/imagenes/tmp/" & im.Name
          mini.NavigateUrl = "~/imagenes/" & im.Name
          'una vez creado el control lo añado a la galeria de cotroles de la página
          Me.Controls.Add(mini)

         'elimino los controles
          mini.Dispose()
          nuevoBmp.Dispose()
Next

End Function

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
         CargarGaleria()
End Sub
End Class