2010-04-30 18 views
5

Sto costruendo un'applicazione web, in Java, dove voglio l'intero screenshot della pagina web, se do l'URL della pagina web come input.conversione della pagina web in immagine jpeg usando java

L'idea di base che ho è quello di catturare il buffer di visualizzazione del rendering component..I non hanno idea di come farlo .. plz aiuto ..

risposta

3

C'è un piccolo trucco che ho usato per questa applicazione :

count down demo app http://img580.imageshack.us/img580/742/capturadepantalla201004wd.png applicazione Java pagina con blog.stackoverflow.com (clicca sull'immagine per vedere il video demo)

il problema è è necessario disporre di una macchina d evocato a questo.

Quindi, il trucco è abbastanza semplice.

  • creare un'applicazione che prende come argomento l'URL che si desidera recuperare.

  • Quindi aprirlo con Desktop.open(url ) che attiverà l'attuale browser .

  • E infine prendere lo screenshot con java.awt.Robot e salvarlo in diks.

Qualcosa di simile:

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

Questa soluzione è lungi dall'essere perfetto, perché ha bisogno di tutto il sistema operativo, ma se si può avere una VM dedicato a questa applicazione, è possibile craw il web e prendere screenshot di esso abbastanza facile.

Il problema di avere questa app come un'app non intrusiva è che fino a questa data, non c'è un buon motore di rendering HTML per Java.

+0

Si noti che questo non funziona sui server [headless] (http://java.sun.com/javase/6/docs/api/java/awt/HeadlessException.html). – BalusC

+0

@Balusc Yeap, in realtà l'ho eseguito come applicazione standalone. – OscarRyz

3

Per una soluzione pure-java in grado di supportare il rendering simultaneo, è possibile utilizzare un browser Java4/CSS2 java, ad esempio Cobra, che fornisce un componente Swing per la GUI. Quando si crea un'istanza di questo componente, si può chiamare è il metodo paint (Graphics g) per disegnare se stesso in un'immagine off-screen

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

È quindi possibile utilizzare l'API Java immagine per salvare questo come un JPG.

JPEGImageEncoder encoder = JPEGCodec.createEncoder(new FileOutputStream("screen.jpg")); 
enncoder.encode(bi); // encode the buffered image 

I browser basati su Java sono generalmente scarsi rispetto ai browser nativi stabiliti. Tuttavia, poiché il tuo obiettivo sono le immagini statiche e non un browser interattivo, un browser basato su Java potrebbe essere più che adeguato a questo riguardo.