Pergunta

Estou à procura de uma fonte aberta biblioteca Java para gerar thumbnails para uma determinada URL. Eu preciso para agrupar essa capacidade, em vez de chamada para serviços externos, como Amazon ou websnapr .

http://www.webrenderer.com/ foi mencionado neste post: Server screenshots web geradas , mas é uma solução comercial.

Eu estou esperando por uma solução baseada em Java, mas pode precisar de olhar para a execução de um processo externo, como khtml2png , ou integrar algo como html2ps .

Todas as sugestões?

Foi útil?

Solução

A primeira coisa que vem à mente é usando AWT para capturar uma captura de tela (ver código abaixo). Você poderia olhar para capturar a JEditorPane , o JDIC WebBrowser controle ou o SWT navegador (através do AWT incorporar o suporte de ). Os últimos dois incorporar navegadores nativos (IE, Firefox), assim introduzir dependências; o apoio JEditorPane HTML parou em HTML 3.2. Pode ser que nenhum deles vai funcionar em um sistema sem cabeça.

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

}

Outras dicas

Você está essencialmente pedindo um motor de renderização completa acessível por Java. Pessoalmente, eu iria me salvar o aborrecimento e chamar a um processo filho.

Caso contrário, eu corri para este navegador Java puro: Lobo

não estava lá a / website teste / serviço QA que permitem especificar uma página web que você queria ser processado em um determinado navegador (IE, Firefox, Safari versão x, y, z) e que iria enviar o instantâneo de volta para você. '

Não me lembro o serviço? - talvez outros desenvolvedores que freqüentam Ajaxian pode recordá-lo

Tente chamar ImageMagick . Eu sei que não é uma solução Java, mas você pode chamá-lo de Java, e não há sequer um Java front-end , embora eu tenha tido menos sucesso com isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top