首页 > 后端开发 > C++ > 如何在没有第三方库的情况下在 ASP.NET 中将网页转换为 JPG 图像?

如何在没有第三方库的情况下在 ASP.NET 中将网页转换为 JPG 图像?

Mary-Kate Olsen
发布: 2024-12-28 02:09:10
原创
559 人浏览过

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

在没有第三方服务的情况下将网页转换为 ASP.NET 中的图像

挑战:
完成需要在 C# 中创建一个函数,将网页转换为 JPG 图像,而不依赖于外部

解决方案:
利用技术组合,解决方案涉及:

  1. 线程安全的Web浏览器:要访问ASP.NET中的目标网页,WebBrowser控件的线程安全处理变得至关重要。通过结合可靠来源的解决方案来解决这个问题。
  2. BMP 到 JPG 转换:渲染网页后,需要将捕获的位图转换为 JPG。代码中已合并了一个经过验证的解决方案。

实现:
提供的代码包含一个新类 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 项目。

更新:
代码有已增强以捕获整个网页,无需进行特定调整即可仅捕获页面的部分内容。

以上是如何在没有第三方库的情况下在 ASP.NET 中将网页转换为 JPG 图像?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板