Frage

ich für eine Open-Source-Java-Bibliothek bin auf der Suche Thumbnails für eine bestimmte URL zu generieren. Ich brauche diese Fähigkeit zu bündeln, anstatt rufen an externe Dienste wie Amazon oder websnapr .

http://www.webrenderer.com/ wurde in diesem Beitrag erwähnt: Server generierten Web-Screenshots , aber es ist eine kommerzielle Lösung.

Ich hoffe auf eine Java-basierte Lösung, kann aber in der Ausführung eines externen Prozesses wie khtml2png , oder die Integration von so etwas wie html2ps .

Irgendwelche Vorschläge?

War es hilfreich?

Lösung

Das erste, was in den Sinn kommt AWT wird mit einem Bildschirm greifen zu erfassen (siehe Code unten). Sie könnten bei der Erfassung der JEditorPane , die JDIC WebBrowser Kontrolle oder die SWT Browser (über die AWT Einbettungs Unterstützung ). Die beiden letztgenannten einbetten nativen Browser (IE, Firefox), so einführen Abhängigkeiten; die JEditorPane HTML-Unterstützung hielt an HTML 3.2. Es kann sein, dass keiner von ihnen auf einem System ohne Monitor arbeiten.

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

}

Andere Tipps

Sie fragen im Wesentlichen für eine komplette Rendering-Engine zugänglich von Java. Persönlich würde ich mir die Mühe sparen und rufen zu einem Kind-Prozess.

Ansonsten Ich lief in diesem reinen Java-Browser: Lobo

wurde nicht ein QA / Test Webseite / Dienst, die Sie eine Webseite angeben lassen würden, dass Sie in einem bestimmten Browser (IE, Firefox, Safari Version x, y, z) und sie gemacht werden wollten würden Mail an dem Schnappschuss zu Ihnen zurück. ‚

Ich kann den Dienst nicht mehr erinnern - vielleicht andere Entwickler, die Ajaxian häufig vielleicht daran erinnern

?

Versuchen Sie ImageMagick . Ich weiß, es ist nicht eine Java-Lösung, aber man kann es aus Java aufrufen, und es gibt sogar eine Java-Frontend , obwohl ich weniger Erfolg damit gehabt haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top