Библиотека Java с открытым исходным кодом для создания миниатюр веб-страницы на стороне сервера

Я ищу библиотеку Java с открытым исходным кодом для создания эскизов для заданного URL. Мне нужно связать эту возможность, а не обращаться к внешним службам, таким как Amazon или websnapr.

http://www.webrenderer.com/ упоминалось в этом сообщении: Серверные скриншоты, но это коммерческое решение.

Я надеюсь на решение на базе Java, но, возможно, вам нужно будет изучить внешний процесс, например khtml2png, или интегрируя что-то вроде html2ps.

Любые предложения?

Ответы

Ответ 1

Первое, что приходит на ум, - использовать AWT для захвата захвата экрана (см. код ниже). Вы можете посмотреть на JEditorPane, JDIC WebBrowser или SWT Browser (через поддержка встраивания AWT). Последние два встроенных браузера (IE, Firefox), поэтому вносят зависимости; поддержка HTML JEditorPane была остановлена ​​в HTML 3.2. Может быть, никто из них не будет работать в безголовой системе.

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

}

Ответ 2

В основном вы запрашиваете полный движок рендеринга, доступный Java. Лично я бы избавил себя от хлопот и обратился к дочернему процессу.

В противном случае я столкнулся с этим чистым Java-браузером: Lobo

Ответ 3

не было веб-сайта/службы QA/test, который позволит вам указать веб-страницу, которую вы хотите отобразить в определенном браузере (IE, FIREFOX, версия SAFARI x, y, z), и они отправили бы по почте снимок назад к вам.

Я не помню сервис - возможно, другие разработчики, которые часто посещают аяксиан, могут его запомнить?

Ответ 4

Попробуйте вызвать ImageMagick. Я знаю, что это не Java-решение, но вы можете назвать его с Java, и даже Java front-end, хотя у меня было меньше успеха с этим.