如何生成网页的略缩图?

本文介绍了一种使用Windows Forms WebBrowser控件生成网站缩略图的方法。通过将WebBrowser控件配置为指定尺寸并加载目标网址,可以捕获渲染后的页面图像并将其缩放为所需的缩略图大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 关键代码:

using System; using System.Drawing; using System.Windows.Forms; using System.Threading; using System.IO; using System.Reflection; namespace WebsiteThumbnail { public class WebsiteThumbnailImageGenerator { public static Bitmap GetWebSiteThumbnail(string Url, int BrowserWidth, int BrowserHeight, int ThumbnailWidth, int ThumbnailHeight) { WebsiteThumbnailImage thumbnailGenerator = new WebsiteThumbnailImage(Url, BrowserWidth, BrowserHeight, ThumbnailWidth, ThumbnailHeight); return thumbnailGenerator.GenerateWebSiteThumbnailImage(); } private class WebsiteThumbnailImage { public WebsiteThumbnailImage(string Url, int BrowserWidth, int BrowserHeight, int ThumbnailWidth, int ThumbnailHeight) { this.m_Url = Url; this.m_BrowserWidth = BrowserWidth; this.m_BrowserHeight = BrowserHeight; this.m_ThumbnailHeight = ThumbnailHeight; this.m_ThumbnailWidth = ThumbnailWidth; } private string m_Url = null; public string Url { get { return m_Url; } set { m_Url = value; } } private Bitmap m_Bitmap = null; public Bitmap ThumbnailImage { get { return m_Bitmap; } } private int m_ThumbnailWidth; public int ThumbnailWidth { get { return m_ThumbnailWidth; } set { m_ThumbnailWidth = value; } } private int m_ThumbnailHeight; public int ThumbnailHeight { get { return m_ThumbnailHeight; } set { m_ThumbnailHeight = value; } } private int m_BrowserWidth; public int BrowserWidth { get { return m_BrowserWidth; } set { m_BrowserWidth = value; } } private int m_BrowserHeight; public int BrowserHeight { get { return m_BrowserHeight; } set { m_BrowserHeight = value; } } public Bitmap GenerateWebSiteThumbnailImage() { Thread m_thread = new Thread(new ThreadStart(_GenerateWebSiteThumbnailImage)); m_thread.SetApartmentState(ApartmentState.STA); m_thread.Start(); m_thread.Join(); return m_Bitmap; } private void _GenerateWebSiteThumbnailImage() { WebBrowser m_WebBrowser = new WebBrowser(); m_WebBrowser.ScrollBarsEnabled = false; m_WebBrowser.Navigate(m_Url); m_WebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted); while (m_WebBrowser.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents(); m_WebBrowser.Dispose(); } private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { WebBrowser m_WebBrowser = (WebBrowser)sender; m_WebBrowser.ClientSize = new Size(this.m_BrowserWidth, this.m_BrowserHeight); m_WebBrowser.ScrollBarsEnabled = false; m_Bitmap = new Bitmap(m_WebBrowser.Bounds.Width, m_WebBrowser.Bounds.Height); m_WebBrowser.BringToFront(); m_WebBrowser.DrawToBitmap(m_Bitmap, m_WebBrowser.Bounds); m_Bitmap = (Bitmap)m_Bitmap.GetThumbnailImage(m_ThumbnailWidth, m_ThumbnailHeight, null, IntPtr.Zero); } } } }

At any rate, the trick is to use the Windows Forms Webbrowser control. Contrary to what you may or may not have heard, thisdoes nothave to be situated on a container form - it can be used independently with 100% programmatic access. There are a couple of catches: First, being a Windows Form control, this must operate on an STA (Single Threaded Apartment) thread. This means you need to either set the "AspCompat = "true" attribute on the page that uses it, or you need to make the actual Webbrowser Navigate call to the target page on asecondary thread whose state has been set to STA. I chose the latter. The other gotcha is that the Webbrowser control does its navigation on more than one thread. The DocumentCompleted event handler is fired when the browser has fully loaded the target url, and therefore it is in this event that we want to do our business logic.

2. 示例程序下载

下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值