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

StackOverflow https://stackoverflow.com/questions/169573

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

Какие-либо предложения?

Это было полезно?

Решение

Первое, что приходит на ум, — это использование AWT для захвата экрана (см. код ниже).Вы можете посмотреть на захват JEditorPane, JDIC Веб-браузер контроль или SWT Браузер (через Поддержка внедрения 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);
    }

}

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top