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.
Etiquetas: C#