有時候我們需要將網頁轉成圖片,那么可以使用WebBrowser來生成網頁快照,廢話不多說,代碼如下
1、網頁快照幫助類(如果是BS或控制台需要引用System.Windows.Forms類庫):
1 public class WebSnapshotsHelper 2 { 3 Bitmap m_Bitmap; 4 string m_Url; 5 int m_BrowserWidth, m_BrowserHeight, m_ThumbnailWidth, m_ThumbnailHeight; 6 public WebSnapshotsHelper(string Url, int BrowserWidth, int BrowserHeight, int ThumbnailWidth, int ThumbnailHeight) 7 { 8 m_Url = Url; 9 m_BrowserHeight = BrowserHeight; 10 m_BrowserWidth = BrowserWidth; 11 m_ThumbnailWidth = ThumbnailWidth; 12 m_ThumbnailHeight = ThumbnailHeight; 13 } 14 public static Bitmap GetWebSiteThumbnail(string Url, int BrowserWidth, int BrowserHeight, int ThumbnailWidth, int ThumbnailHeight) 15 { 16 WebSnapshotsHelper thumbnailGenerator = new WebSnapshotsHelper(Url, BrowserWidth, BrowserHeight, ThumbnailWidth, ThumbnailHeight); 17 return thumbnailGenerator.GenerateWebSiteThumbnailImage(); 18 } 19 public Bitmap GenerateWebSiteThumbnailImage() 20 { 21 Thread m_thread = new Thread(new ThreadStart(_GenerateWebSiteThumbnailImage)); 22 m_thread.SetApartmentState(ApartmentState.STA); 23 m_thread.Start(); 24 m_thread.Join(); 25 return m_Bitmap; 26 } 27 private void _GenerateWebSiteThumbnailImage() 28 { 29 WebBrowser m_WebBrowser = new WebBrowser(); 30 m_WebBrowser.ScrollBarsEnabled = false; 31 m_WebBrowser.Navigate(m_Url); 32 m_WebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted); 33 while (m_WebBrowser.ReadyState != WebBrowserReadyState.Complete) 34 Application.DoEvents(); 35 m_WebBrowser.Dispose(); 36 } 37 private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 38 { 39 WebBrowser m_WebBrowser = (WebBrowser)sender; 40 m_WebBrowser.ClientSize = new Size(this.m_BrowserWidth, this.m_BrowserHeight); 41 m_WebBrowser.ScrollBarsEnabled = false; 42 m_Bitmap = new Bitmap(m_WebBrowser.Bounds.Width, m_WebBrowser.Bounds.Height); 43 m_WebBrowser.BringToFront(); 44 m_WebBrowser.DrawToBitmap(m_Bitmap, m_WebBrowser.Bounds); 45 m_Bitmap = (Bitmap)m_Bitmap.GetThumbnailImage(m_ThumbnailWidth, m_ThumbnailHeight, null, IntPtr.Zero); 46 } 47 48 }
2、調用:
1 Bitmap m_Bitmap = WebSnapshotsHelper.GetWebSiteThumbnail("http://www.cnblogs.com/", 800, 1200, 800, 1200); //寬高根據要獲取快照的網頁決定 2 m_Bitmap.Save("render_img.bmp", System.Drawing.Imaging.ImageFormat.Bmp); //圖片格式可以自由控制
3、效果:
這個可以在 html頁面以一張圖片為背景,在其中填空,最后調用此Helper方法來生成圖片。
最后說一下:這個使用的是WebBrowser為核心,所以生成的html會根據IE內核來渲染,如果頁面中使用到了HTML5、CSS3,那推薦部署的服務器裝有IE10及以上瀏覽器,由於是在服務端生成,對客戶端瀏覽器是沒有限制。