2010-06-10 132 views
4

我想将* .aspx(HTML)页面(用户界面)转换为图像,如JPEG。 我使用下面的代码为如何将网页转换为图像?

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 

但是我收到错误为“在碱-64串无效字符”在线 昏暗b以字节()= Convert.FromBase64String(内容)

+0

是否要保存HTML代码为JPG或者呈现的html(就像你在浏览器中打开url时看到的那样)? – 2010-06-10 08:35:27

+0

我只是问,因为你的代码建议第一个。即使你解决了你的错误,它也不会工作。你不能只是拿一个字符串,并保存为一个像这样的jpeg。你必须以某种形式使用DrawString() – 2010-06-10 08:42:45

回答

6

您没有使用webRequest获取页面的渲染图像,只是HTML代码的gettig。

要生成一个图像追随该代码(直接从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; 
} 

以下是上述方法的一些示例用法:

// 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); 
*/