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 :
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); } } } }
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); }
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();
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!