ホームページ >バックエンド開発 >C++ >サードパーティのライブラリを使用せずに ASP.NET で Web ページを JPG 画像に変換する方法

サードパーティのライブラリを使用せずに ASP.NET で Web ページを JPG 画像に変換する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-28 02:09:10557ブラウズ

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

サードパーティ サービスを使用せずに ASP.NET で Web ページを画像に変換する

課題:
を達成するには外部サービスに依存せずに Web ページを JPG 画像に変換する関数を C# で作成するという要件ASP.NET の機能を利用するために不可欠です。

解決策:
技術の組み合わせを活用する解決策には、次のものが含まれます。

  1. スレッド-セーフ Web ブラウザー: ASP.NET 内のターゲット Web ページにアクセスするには、WebBrowser コントロールのスレッドセーフな処理が必要です。が重要になります。この側面は、信頼できるソースからのソリューションを組み合わせることで解決されます。
  2. BMP から JPG への変換: Web ページがレンダリングされたら、キャプチャされたビットマップを JPG に変換する必要があります。この問題に対する実証済みのソリューションがコードに組み込まれています。

実装:
提供されたコードには、Web ページから画像を効果的に生成する新しいクラス 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 プロジェクト。

更新:
コードが次のように拡張されました。 Web ページ全体をキャプチャするため、ページの一部のみをキャプチャするために特別な調整を行う必要がなくなります。

以上がサードパーティのライブラリを使用せずに ASP.NET で Web ページを JPG 画像に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。