Crear un thumbnail de un sitio con C#


Existen varios servicios web que nos ayudan a crear fotos de las páginas web o thumbnails pero la mayoría tienen un costo por el servicio. Si no tenemos dinero o no queremos pagar por el servicio, fácilmente podemos crear nuestro propio generador de thumbnails usando C#. Vamos a ver un ejemplo con el que podemos fácilmente desarrollar este servicio.
Lo primero que vamos hacer es crear un “console application” con el nombre de WebPicture donde vamos a tener nuestro código para las fotos de las páginas web que deseamos.
Teniendo este proyecto listo vamos a crear una clase de nombre PictureCreate
Luego de esto debemos agregar las siguientes referencias
  • using System.Drawing;
  • using System.Windows.Forms;
  • using System.Threading;
Luego de esto vamos a crear unas variables para el tamaño del visualizador del navegador o el tamaño de la página que vamos a inspeccionar. Además de las variables para el tamaño de la imagen que deseamos guardar.
  • private int browserWidth { get; set; }
  • private int browserHeight { get; set; }
  • private int bitmapHeight { get; set; }
  • private int bitmapWidth { get; set; }
Ahora vamos a crear una variable de tipo Bitmap donde se va a guardar la imagen resultado de la captura de  la página web
  • private Bitmap picture { get; set; }
Finalmente vamos a crear una variable que se encargue de almacenar el ULR de la página que deseamos guardar.
  • private string url { get; set; }
Ahora ocupamos un constructor que nos permite obtener la información necesaria para llenar las variables que el sistema requiere.


public PictureCreate(string url, int browserWidth, int browserHeight,
int bitmapWidth, int bitmapHeight)
{
this.url = url;
this.browserWidth = browserWidth;
this.browserHeight = browserHeight;
this.bitmapHeight = bitmapHeight;
this.bitmapWidth = bitmapWidth;
}

Ahora vamos hacer un método de nombre  StartCreatingPicture() el cual va hacer el punto de inicio de nuestra ejecución y creación de la imagen.
El método  StartCreatingPicture() va a tener un hilo que se va a encargar de hacer la tarea de captura de la imagen de la página web. 


public Bitmap StartCreatingPicture()
{
ThreadStart BuildingThread = new ThreadStart(BuildingPicture);
Thread thread = new Thread(BuildingThread);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
return picture;
}
Este hilo se va a encargar de ejecutar la función con nombre  BuildingPicture() la cual se va a encargar de llamar la página que tenemos en nuestro URL. Cuando la página está totalmente cargada vamos a ejecutar un evento que le vamos a llamar Download_Ready.


private void BuildingPicture()
{
WebBrowser browser = new WebBrowser();
browser.ScrollBarsEnabled = false;
browser.Navigate(url);
browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(
Download_Ready);
while (browser.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
browser.Dispose();
}
Cuando el documento está totalmente listo vamos a proceder finalmente a crear la imagen. En el evento que acabamos de hacer vamos a usar el documento o browser que tenemos listo para crear la fotografía usando el método DrawToBitmap del objeto WebBrowser y la almacenamos en la variable picture que tenemos de tipo Bitmap.


private void Download_Ready(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser browser = (WebBrowser)sender;
browser.ClientSize = new Size(this.browserWidth, this.browserHeight);
browser.ScrollBarsEnabled = false;
picture = new Bitmap(browser.Bounds.Width, browser.Bounds.Height);
browser.BringToFront();
browser.DrawToBitmap(picture, browser.Bounds);
if (bitmapWidth != 0 && bitmapHeight != 0)
picture = (Bitmap)picture.GetThumbnailImage(bitmapWidth, bitmapHeight,
null, IntPtr.Zero);
}

Ahora nos vamos al main y creamos un objeto nuevo de nuestra clase PictureCreate y llamamos al método StartCreatingPicture
Debemos almacenar la imagen tomada y la guardamos en el disco duro.


public static void Main(string[] args)
{
PictureCreate picture = new PictureCreate("http://www.google.com",
900, 800, 250, 200);
Bitmap pic = picture.StartCreatingPicture();
pic.Save("C:\Users\Public\Pictures\Sample Pictures\google.bmp");
}
Espero que les  sea de utilidad este ejemplo.  


Related Posts

Leave a Reply

Your email address will not be published.