在没有第三方服务的情况下将网页转换为 ASP.NET 中的图像
挑战:
完成需要在 C# 中创建一个函数,将网页转换为 JPG 图像,而不依赖于外部
解决方案:
利用技术组合,解决方案涉及:
实现:
提供的代码包含一个新类 WebsiteToImage.cs,它可以有效地从网页生成图像:
public class WebsiteToImage { private Bitmap m_Bitmap; private string m_Url; private string m_FileName = string.Empty; // Constructor with URL only public WebsiteToImage(string url) { m_Url = url; } // Constructor with URL and filename for saving public WebsiteToImage(string url, string fileName) { m_Url = url; m_FileName = fileName; } public Bitmap Generate() { // Start a new thread for WebBrowser operations var m_thread = new Thread(_Generate); m_thread.SetApartmentState(ApartmentState.STA); m_thread.Start(); // Wait for thread to complete and retrieve the bitmap m_thread.Join(); return m_Bitmap; } private void _Generate() { using (var browser = new WebBrowser { ScrollBarsEnabled = false }) { // Navigate to the webpage browser.Navigate(m_Url); // Wait for the document to load while (browser.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } // Capture the webpage as a bitmap browser.ClientSize = new Size(browser.Document.Body.ScrollRectangle.Width, browser.Document.Body.ScrollRectangle.Bottom); m_Bitmap = new Bitmap(browser.Document.Body.ScrollRectangle.Width, browser.Document.Body.ScrollRectangle.Bottom); browser.BringToFront(); browser.DrawToBitmap(m_Bitmap, browser.Bounds); // Save the bitmap to file if a filename was provided if (m_FileName.Length > 0) { // Save as JPG using custom bitmap extension m_Bitmap.SaveJPG100(m_FileName); } } } }
BMP另存为的扩展方法JPG:
以下扩展方法简化了将位图保存为高质量的 JPG:
public static void SaveJPG100(this Bitmap bmp, string filename) { var encoderParameters = new EncoderParameters(1); encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L); bmp.Save(filename, GetEncoder(ImageFormat.Jpeg), encoderParameters); }
用法:
要使用 WebsiteToImage 类,只需创建一个实例并调用Generate()方法来获取位图:
WebsiteToImage websiteToImage = new WebsiteToImage("https://www.example.com", @"C:\path\to\result.jpg"); Bitmap bitmap = websiteToImage.Generate();
重要提示:
为了确保此解决方案按预期运行,请在 ASP 中添加对 System.Windows.Forms 的引用。 NET 项目。
更新:
代码有已增强以捕获整个网页,无需进行特定调整即可仅捕获页面的部分内容。
以上是如何在没有第三方库的情况下在 ASP.NET 中将网页转换为 JPG 图像?的详细内容。更多信息请关注PHP中文网其他相关文章!