2008-10-04 13 views
14

Estoy buscando una biblioteca Java de código abierto para generar miniaturas para una URL determinada. Necesito agrupar esta capacidad, en lugar de llamar a servicios externos, como Amazon o websnapr.Biblioteca Java de código abierto para producir miniaturas de páginas web del lado del servidor

http://www.webrenderer.com/ se mencionó en esta publicación: Server generated web screenshots, pero es una solución comercial.

Espero una solución basada en Java, pero es posible que deba considerar la ejecución de un proceso externo como khtml2png, o integrar algo como html2ps.

¿Alguna sugerencia?

Respuesta

6

Lo primero que se le viene a la mente es utilizar AWT para capturar una captura de pantalla (vea el código a continuación). Podría ver capturar el JEditorPane, el control JDICWebBrowser o el SWTBrowser (a través del AWT embedding support). Los dos últimos incorporan navegadores nativos (IE, Firefox), así que introduce dependencias; el soporte HTML de JEditorPane se detuvo en HTML 3.2. Es posible que ninguno de estos funcione en un sistema sin cabeza.

import java.awt.Component; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.JLabel; 

public class Capture { 

    private static final int WIDTH = 128; 
    private static final int HEIGHT = 128; 

    private BufferedImage image = new BufferedImage(WIDTH, HEIGHT, 
      BufferedImage.TYPE_INT_RGB); 

    public void capture(Component component) { 
     component.setSize(image.getWidth(), image.getHeight()); 

     Graphics2D g = image.createGraphics(); 
     try { 
      component.paint(g); 
     } finally { 
      g.dispose(); 
     } 
    } 

    private BufferedImage getScaledImage(int width, int height) { 
     BufferedImage buffer = new BufferedImage(width, height, 
       BufferedImage.TYPE_INT_RGB); 
     Graphics2D g = buffer.createGraphics(); 
     try { 
      g.drawImage(image, 0, 0, width, height, null); 
     } finally { 
      g.dispose(); 
     } 
     return buffer; 
    } 

    public void save(File png, int width, int height) throws IOException { 
     ImageIO.write(getScaledImage(width, height), "png", png); 
    } 

    public static void main(String[] args) throws IOException { 
     JLabel label = new JLabel(); 
     label.setText("Hello, World!"); 
     label.setOpaque(true); 

     Capture cap = new Capture(); 
     cap.capture(label); 
     cap.save(new File("foo.png"), 64, 64); 
    } 

} 
3

Básicamente está solicitando un motor de renderizado completo al que Java pueda acceder. Personalmente, me ahorraría la molestia y llamaría a un proceso infantil.

De lo contrario, me encontré con este navegador pura de Java: Lobo

0

no estaba allí un QA/sitio web de prueba/servicio que le permitirá especificar una página web que querías ser dictada en un determinado navegador (IE , FIREFOX, SAFARI versión x, y, z) y le enviarían la instantánea por correo. '

No recuerdo el servicio. ¿Quizás otros desarrolladores que frecuentan ajaxian lo recuerden?

0

Probar llamando al ImageMagick. Sé que no es una solución Java, pero puedes llamarla desde Java, e incluso hay una Java front-end, aunque he tenido menos éxito con eso.

Cuestiones relacionadas