首頁 > 後端開發 > C++ > 如何在沒有第三方函式庫的情況下在 ASP.NET 中將網頁轉換為 JPG 影像?

如何在沒有第三方函式庫的情況下在 ASP.NET 中將網頁轉換為 JPG 影像?

Mary-Kate Olsen
發布: 2024-12-28 02:09:10
原創
559 人瀏覽過

How to Convert Webpages to JPG Images in ASP.NET without Third-Party Libraries?

在沒有第三方服務的情況下將網頁轉換為ASP.NET 中的圖像

挑戰:

挑戰: 完成需要在C# 中建立函數,將網頁轉換為JPG影像,而不依賴外部

    解決方案:
  1. 利用技術組合,解決方案涉及:
  2. 線程安全的Web瀏覽器:要存取ASP.NET中的目標網頁,WebBrowser控制項的執行緒安全處理變得至關重要。透過結合可靠來源的解決方案來解決這個問題。

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);
}
登入後複製
BMP另存為的擴展方法JPG:

以下擴展方法簡化了將位圖保存為高品質的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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板