2010-06-10 10 views
4

Je souhaite convertir les pages * .aspx (HTML) (Interface utilisateur) en Image comme JPEG. J'utilise ci-dessous le code pour queComment convertir une page Web en image?

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 

Mais je reçois erreur comme "caractère non valide dans une chaîne de base-64" à la ligne Dim b As Byte() = Convert.FromBase64String (contenu)

+0

Voulez-vous enregistrer le code html comme jpg ou le rendu html (comme dans ce que vous voyez lorsque vous ouvrez l'URL dans un navigateur)? –

+0

Je demande juste parce que votre code suggère le premier. Et même si vous résolvez votre erreur, cela ne fonctionnera pas. Vous ne pouvez pas simplement prendre une chaîne et l'enregistrer comme un jpeg comme ça. Vous devez utiliser DrawString() sous une forme ou une autre –

Répondre

6

Vous n'obtenez pas une image rendue de la page en utilisant webRequest, vous obtenez uniquement le code HTML.

Pour générer une image suivre ce code (arraché directement à partir 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; 
} 

Voici quelques usages par exemple de la méthode ci-dessus:

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