Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menukar Halaman Web kepada Imej JPG dalam ASP.NET tanpa Perpustakaan Pihak Ketiga?

Bagaimana untuk Menukar Halaman Web kepada Imej JPG dalam ASP.NET tanpa Perpustakaan Pihak Ketiga?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-28 02:09:10562semak imbas

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

Menukar Halaman Web kepada Imej dalam ASP.NET tanpa Perkhidmatan Pihak Ketiga

Cabaran:
Untuk memenuhi keperluan untuk mencipta fungsi dalam C# yang menukar halaman web kepada imej JPG tanpa bergantung pada perkhidmatan luaran, ia adalah penting untuk menggunakan keupayaan ASP.NET.

Penyelesaian:
Memanfaatkan gabungan teknik, penyelesaiannya melibatkan:

  1. Thread -Pelayar Web Selamat: Untuk mengakses halaman web sasaran dalam ASP.NET, kawalan WebBrowser pengendalian selamat benang menjadi penting. Aspek ini ditangani dengan menggabungkan penyelesaian daripada sumber yang boleh dipercayai.
  2. Penukaran BMP kepada JPG: Setelah halaman web dipaparkan, peta bit yang ditangkap perlu ditukar kepada JPG. Penyelesaian yang terbukti untuk ini dimasukkan ke dalam kod.

Pelaksanaan:
Kod yang disediakan merangkumi kelas baharu, WebsiteToImage.cs, yang menjana imej daripada halaman web dengan berkesan:

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

Kaedah Sambungan untuk Menyimpan BMP sebagai JPG:
Kaedah sambungan berikut memudahkan menyimpan bitmap sebagai JPG dengan kualiti tinggi:

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

Penggunaan:
Untuk menggunakan kelas WebsiteToImage, cuma buat contoh dan panggil kaedah Generate() untuk mendapatkan a bitmap:

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

Nota Penting:
Untuk memastikan penyelesaian ini berfungsi seperti yang dimaksudkan, tambahkan rujukan kepada System.Windows.Forms dalam ASP anda. Projek NET.

Kemas kini:
Kod telah dipertingkatkan untuk menangkap keseluruhan halaman web, menghapuskan keperluan untuk pelarasan khusus untuk menangkap bahagian halaman sahaja.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Halaman Web kepada Imej JPG dalam ASP.NET tanpa Perpustakaan Pihak Ketiga?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn