How to convert a web page to an image?

浪子不回头ぞ 提交于 2019-12-19 08:54:53

问题


I want to convert *.aspx (HTML) page's (User Interface) to Image such as JPEG. I am using below code for that

Protected Sub btnGet_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGet.Click
        saveURLToImage("http://google.co.in")
End Sub

Private Sub saveURLToImage(ByVal url As String)
        If Not String.IsNullOrEmpty(url) Then
            Dim content As String = ""

            Dim webRequest__1 As System.Net.WebRequest = WebRequest.Create(url)
            Dim webResponse As System.Net.WebResponse = webRequest__1.GetResponse()
            Dim sr As System.IO.StreamReader = New StreamReader(webResponse.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8"))
            content = sr.ReadToEnd()
            'save to file
            Dim b As Byte() = Convert.FromBase64String(content)
            Dim ms As New System.IO.MemoryStream(b, 0, b.Length)
            Dim img As System.Drawing.Image = System.Drawing.Image.FromStream(ms)
            img.Save("c:\pic.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)

            img.Dispose()
            ms.Close()
        End If
    End Sub

But I am getting Error as "Invalid character in a Base-64 string" at line Dim b As Byte() = Convert.FromBase64String(content)


回答1:


You are not getting a rendered image of the page using webRequest, you are gettig only the HTML code.

To generate a image follow this code (ripped directly from this post)

public Bitmap GenerateScreenshot(string url)
{
    // This method gets a screenshot of the webpage
    // rendered at its full size (height and width)
    return GenerateScreenshot(url, -1, -1);
}

public Bitmap GenerateScreenshot(string url, int width, int height)
{
    // Load the webpage into a WebBrowser control
    WebBrowser wb = new WebBrowser();
    wb.ScrollBarsEnabled = false;
    wb.ScriptErrorsSuppressed = true;
    wb.Navigate(url);
    while (wb.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); }


    // Set the size of the WebBrowser control
    wb.Width = width;
    wb.Height = height;

    if (width == -1)
    {
        // Take Screenshot of the web pages full width
        wb.Width = wb.Document.Body.ScrollRectangle.Width;
    }

    if (height == -1)
    {
        // Take Screenshot of the web pages full height
        wb.Height = wb.Document.Body.ScrollRectangle.Height;
    }

    // Get a Bitmap representation of the webpage as it's rendered in the WebBrowser control
    Bitmap bitmap = new Bitmap(wb.Width, wb.Height);
    wb.DrawToBitmap(bitmap, new Rectangle(0, 0, wb.Width, wb.Height));
    wb.Dispose();

    return bitmap;
}

Here are some example usages of the above method:

// Generate screenshot of a webpage at 1024x768 resolution
Bitmap screenshot = GenerateScreenshot("http://pietschsoft.com", 1024, 768);

// Generate screenshot of a webpage at the webpage's full size (height and width)
screenshot = GenerateScreenshot("http://pietschsoft.com");

// Display screenshot in PictureBox control
pictureBox1.Image = thumbnail;

/*
// Save screenshot to a File
screenshot.Save("screenshot.png", System.Drawing.Imaging.ImageFormat.Png);
*/


来源:https://stackoverflow.com/questions/3012728/how-to-convert-a-web-page-to-an-image

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!