Created
June 10, 2013 12:20
-
-
Save yemrekeskin/5748330 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Drawing; | |
using System.Text.RegularExpressions; | |
using System.Threading; | |
using System.Windows.Forms; | |
public class WebsiteThumbImage | |
{ | |
public int ThumbWidth { get; set; } | |
public int ThumbHeight { get; set; } | |
public int BrowserWidth { get; set; } | |
public int BrowserHeight { get; set; } | |
public string Url { get; set; } | |
public Bitmap ThumbImage { get; set; } | |
public Bitmap Generate() | |
{ | |
if (ValidationControl()) | |
return null; | |
Thread th = new Thread(new ThreadStart(_Execute)); | |
th.SetApartmentState(ApartmentState.STA); | |
th.Start(); | |
th.Join(); | |
return ThumbImage; | |
} | |
// just operational codes :D | |
public void _Execute() | |
{ | |
WebBrowser browser = new WebBrowser(); | |
browser.ScrollBarsEnabled = false; | |
browser.Navigate(this.Url); | |
browser.DocumentCompleted += browser_DocumentCompleted; | |
while (browser.ReadyState != WebBrowserReadyState.Complete) | |
Application.DoEvents(); | |
browser.Dispose(); | |
} | |
void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) | |
{ | |
WebBrowser WebBrowser = (WebBrowser)sender; | |
WebBrowser.ClientSize = new Size(this.BrowserWidth, this.BrowserHeight); | |
WebBrowser.ScrollBarsEnabled = false; | |
this.ThumbImage = new Bitmap(WebBrowser.Bounds.Width, WebBrowser.Bounds.Height); | |
WebBrowser.BringToFront(); | |
WebBrowser.DrawToBitmap(this.ThumbImage, WebBrowser.Bounds); | |
this.ThumbImage = (Bitmap)this.ThumbImage.GetThumbnailImage(this.ThumbWidth, this.ThumbHeight, null, IntPtr.Zero); | |
} | |
private bool ValidationControl() | |
{ | |
if (String.IsNullOrEmpty(this.Url)) | |
throw new ArgumentNullException(); | |
// for url validation | |
if (!Uri.IsWellFormedUriString(this.Url, UriKind.RelativeOrAbsolute)) | |
throw new Exception(); | |
// another validation method -- using optional | |
if (!IsValidUrl(this.Url)) | |
throw new Exception(); | |
return true; | |
} | |
private bool IsValidUrl(string url) | |
{ | |
return Regex.IsMatch(url, @"(http|https)://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"); | |
} | |
} | |
// Let's use | |
string url = ((string.IsNullOrEmpty(Request.Params["site"])) ? "blog.yemrekeskin.com" : Request.Params["site"]); | |
int width = ((string.IsNullOrEmpty(Request.Params["width"])) ? 1000 : int.Parse(Request.Params["width"])); | |
int height = ((string.IsNullOrEmpty(Request.Params["height"])) ? 940 : int.Parse(Request.Params["height"])); | |
int capWidth = ((string.IsNullOrEmpty(Request.Params["capWidth"])) ? 900 : int.Parse(Request.Params["capWidth"])); | |
int capHeight = ((string.IsNullOrEmpty(Request.Params["capHeight"])) ? 800 : int.Parse(Request.Params["capHeight"])); | |
string address = "http://" + url; | |
Bitmap thumbnail = WebsiteThumbnailImageGenerator.GetWebSiteThumbnail(address, capWidth, capHeight, width, height); | |
Response.ContentType = "image/jpeg"; | |
thumbnail.Save(Response.OutputStream, ImageFormat.Jpeg); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment