2010-04-30 12 views
5

Estoy construyendo una aplicación web, en Java, donde quiero la captura de pantalla completa de la página web, si doy la URL de la página web como entrada.conversión de página web en imagen jpeg usando java

La idea básica es que tengo para capturar la memoria intermedia de visualización de la representación component..I no tienen idea de cómo hacerlo .. PLZ ayuda ..

Respuesta

3

Hay un pequeño truco que he usado para esta aplicación :

count down demo app http://img580.imageshack.us/img580/742/capturadepantalla201004wd.png páginas con blog.stackoverflow.com aplicación Java (click en la imagen para ver el vídeo de demostración)

el problema es que necesita tener una máquina d evitado a esto.

Entonces, el truco es bastante fácil.

  • crear una aplicación que toma como argumento la URL que se desea obtener.

  • A continuación, ábralo con Desktop.open(url ) que activará el webbrowser actual.

  • Y finalmente tome la captura de pantalla con java.awt.Robot y guárdelo en los diques.

Algo así como:

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

Esta solución está lejos de ser perfecto, ya que necesita el sistema operativo completo, pero si usted puede tener una máquina virtual dedicada a esta aplicación, puede buche la web y tomar capturas de pantalla de ella bastante fácil.

El problema de tener esta aplicación como no intrusiva es que hasta la fecha no hay un buen procesador de motor html para Java.

+0

Tenga en cuenta que esto no funciona en los servidores [headless] (http://java.sun.com/javase/6/docs/api/java/awt/HeadlessException.html). – BalusC

+0

@Balusc Yeap, de hecho lo ejecuté como una aplicación independiente. – OscarRyz

3

Para una solución pura en Java que puede escalar para soportar traducción simultánea, se puede utilizar un navegador HTML 4/CSS2 Java, como Cobra, que proporciona un componente Swing para la interfaz gráfica de usuario. Al crear una instancia de este componente, se puede llamar así es el método paint (Graphics g) a dibujarse a sí mismo en una imagen fuera de la pantalla

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

A continuación, puede utilizar la API de Java imagen a guardar esto como un archivo JPG.

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

Los navegadores basados ​​en Java suelen palidecer en comparación con los navegadores nativos establecidos. Sin embargo, como su objetivo son las imágenes estáticas, y no un navegador interactivo, un navegador basado en Java puede ser más que adecuado en este sentido.

Cuestiones relacionadas