Heim >Backend-Entwicklung >C++ >Wie konvertiert man Webseiten in ASP.NET in JPG-Bilder ohne Bibliotheken von Drittanbietern?

Wie konvertiert man Webseiten in ASP.NET in JPG-Bilder ohne Bibliotheken von Drittanbietern?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-28 02:09:10559Durchsuche

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

Konvertieren von Webseiten in Bilder in ASP.NET ohne Dienste von Drittanbietern

Herausforderung:
Zu erfüllen Um die Anforderung zu erfüllen, eine Funktion in C# zu erstellen, die eine Webseite in ein JPG-Bild konvertiert, ohne auf externe Dienste angewiesen zu sein, ist es wichtig, die Funktionen von zu nutzen ASP.NET.

Lösung:
Die Lösung nutzt eine Kombination von Techniken und umfasst:

  1. Thread-sicherer Webbrowser: Um in ASP.NET auf die Zielwebseite zuzugreifen, ist die threadsichere Handhabung des WebBrowser-Steuerelements von entscheidender Bedeutung. Dieser Aspekt wird durch die Kombination von Lösungen aus zuverlässigen Quellen angegangen.
  2. Konvertierung von BMP in JPG: Sobald die Webseite gerendert ist, muss die erfasste Bitmap in JPG konvertiert werden. Eine bewährte Lösung hierfür ist in den Code integriert.

Implementierung:
Der bereitgestellte Code umfasst eine neue Klasse, WebsiteToImage.cs, die effektiv Bilder von Webseiten generiert:

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);
            }
        }
    }
}

Erweiterungsmethode zum Speichern von BMP als JPG:
Die folgende Erweiterungsmethode vereinfacht das Speichern einer Bitmap als JPG mit hoher Qualität:

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);
}

Verwendung:
Um die WebsiteToImage-Klasse zu verwenden, erstellen Sie sie einfach eine Instanz und rufen Sie die Generate()-Methode auf, um eine Bitmap zu erhalten:

WebsiteToImage websiteToImage = new WebsiteToImage("https://www.example.com", @"C:\path\to\result.jpg");
Bitmap bitmap = websiteToImage.Generate();

Wichtig Hinweis:
Um sicherzustellen, dass diese Lösung wie vorgesehen funktioniert, fügen Sie einen Verweis auf System.Windows.Forms in Ihrem ASP.NET-Projekt hinzu.

Update:
Der Code wurde verbessert, um die gesamte Webseite zu erfassen, sodass keine spezifischen Anpassungen erforderlich sind, um nur Teile der Seite zu erfassen.

Das obige ist der detaillierte Inhalt vonWie konvertiert man Webseiten in ASP.NET in JPG-Bilder ohne Bibliotheken von Drittanbietern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn