Maison > développement back-end > C++ > Comment convertir des pages Web en images JPG dans ASP.NET sans bibliothèques tierces ?

Comment convertir des pages Web en images JPG dans ASP.NET sans bibliothèques tierces ?

Mary-Kate Olsen
Libérer: 2024-12-28 02:09:10
original
560 Les gens l'ont consulté

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

Conversion de pages Web en images dans ASP.NET sans services tiers

Défi :
À relever l'exigence de créer une fonction en C# qui convertit une page Web en image JPG sans recourir à des services externes, il est essentiel d'utiliser les capacités de ASP.NET.

Solution :
Tirant parti d'une combinaison de techniques, la solution implique :

  1. Navigateur Web Thread-Safe : Pour accéder à la page Web cible dans ASP.NET, la gestion thread-safe du contrôle WebBrowser devient vitale. Cet aspect est abordé en combinant des solutions provenant de sources fiables.
  2. Conversion BMP en JPG : Une fois la page Web rendue, le bitmap capturé doit être converti en JPG. Une solution éprouvée pour cela est incorporée dans le code.

Implémentation :
Le code fourni englobe une nouvelle classe, WebsiteToImage.cs, qui génère efficacement des images à partir de pages Web :

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);
            }
        }
    }
}
Copier après la connexion

Méthode d'extension pour enregistrer BMP au format JPG :
Le La méthode d'extension suivante simplifie l'enregistrement d'un bitmap au format JPG avec une haute qualité :

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);
}
Copier après la connexion

Utilisation :
Pour utiliser la classe WebsiteToImage, créez simplement une instance et appelez la méthode Generate() pour obtenir un bitmap :

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

Remarque importante :
Pour garantir que cette solution fonctionne comme prévu, ajoutez une référence à System.Windows.Forms dans votre projet ASP.NET.

Mise à jour :
Le code a été amélioré pour capturer l'intégralité page Web, éliminant le besoin d'ajustements spécifiques pour capturer uniquement des parties de la page.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal