2010-04-30 6 views
5

Ich baue eine Web-Anwendung, in Java, wo ich will den gesamten Screenshot der Webseite, wenn ich die URL der Webseite als Eingabe geben.Konvertieren von Webseite in JPEG-Bild mit Java

Die Grundidee ich habe, ist der Anzeigepuffer des Rendering component..I zu erfassen haben keine Vorstellung davon, wie es zu tun .. plz help ..

Antwort

3

Es gibt einen kleinen Trick, den ich für diese App verwendet

count down demo app http://img580.imageshack.us/img580/742/capturadepantalla201004wd.png Java-Anwendung mit blog.stackoverflow.com Seite (auf das Bild klicken Sie auf die Demo-Video zu sehen)

das Problem ist, dass Sie eine Maschine d haben müssen: darauf hingewiesen.

So ist der Trick ziemlich einfach.

  • Erstellen Sie eine Anwendung, die die URL, die Sie abrufen möchten als Argument.

  • Dann öffnen Sie es mit Desktop.open(url ), die den aktuellen Webbrowser auslösen wird.

  • Und schließlich den Screenshot mit java.awt.Robot und speichern Sie es in diks.

Etwas wie:

class WebScreenShot { 
    public static void main(String [] args) { 
     Desktop.getDesktop().open(args[0]); 
     Robot robot = new Robot(); 
     Image image = robot.createScreenCapture(getScreenResolutionSize()); 
     saveToDisk(image); 
    } 
    } 

Diese Lösung ist bei weitem nicht perfekt, weil es die ganze OS braucht, aber wenn Sie eine VM gewidmet zu dieser App haben, können Sie die Web-Kropf und nehmen Screenshots davon ganz einfach.

Das Problem mit dieser App als nicht-intrusive App ist, dass es bis zu diesem Datum keinen guten HTML-Engine-Renderer für Java gibt.

+0

Beachten Sie, dass dies auf [headless] (http://java.sun.com/javase/6/docs/api/java/awt/HeadlessException.html) Servern nicht funktioniert. – BalusC

+0

@Balusc Yeap, eigentlich habe ich es als eigenständige Anwendung ausgeführt. – OscarRyz

3

Für eine pure-java-Lösung, die skalieren kann, um gleichzeitiges Rendern zu unterstützen, könnten Sie einen Java HTML4/CSS2-Browser verwenden, z. B. Cobra, der eine Swing-Komponente für die GUI bereitstellt. Wenn Sie diese Komponente instanziiert, können Sie nennen es Farbe (Graphics g) Methode ist selbst Bild in einem Off-Screen kann

E.g. 
Component c = ...; // the browser component 
BufferedImage bi = new BufferedImage(c.getWidth(), c.getHeight(), TYPE_INT_RGB) 
Graphics2d g = bi.createGraphics();  
c.paint(g); 

Sie dann die Java-Bild-API verwenden, zeichnen diese als JPG zu speichern.

Java-basierte Browser bleichen im Vergleich zu den etablierten nativen Browsern in der Regel blass. Da Ihr Ziel jedoch statische Bilder und kein interaktiver Browser ist, kann ein Java-basierter Browser in dieser Hinsicht mehr als ausreichend sein.