在沒有第三方服務的情況下將網頁轉換為ASP.NET 中的圖像
挑戰:
挑戰: 完成需要在C# 中建立函數,將網頁轉換為JPG影像,而不依賴外部
BMP 到 JPG 轉換:渲染網頁後,需要將捕獲的位圖轉換為 JPG。程式碼中已合併了一個經過驗證的解決方案。
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); } } } }
提供的程式碼包含一個新類別 WebsiteToImage.cs,它可以有效地從網頁產生圖片:
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); }
以下擴展方法簡化了將位圖保存為高品質的JPG:
WebsiteToImage websiteToImage = new WebsiteToImage("https://www.example.com", @"C:\path\to\result.jpg"); Bitmap bitmap = websiteToImage.Generate();
要使用WebsiteToImage類,只需建立一個實例並調用Generate()方法來獲取位圖:
重要提示:
為了確保此解決方案按預期運行,請在ASP 中加入System.Windows.Forms 的參考。 NET 專案。
以上是如何在沒有第三方函式庫的情況下在 ASP.NET 中將網頁轉換為 JPG 影像?的詳細內容。更多資訊請關注PHP中文網其他相關文章!