14

特定の URL のサムネイルを生成するオープン ソースの Java ライブラリを探しています。Amazonwebsnaprなどの外部サービスを呼び出すのではなく、この機能をバンドルする必要があります。

http://www.webrenderer.com/は、次の投稿で言及されています:サーバー生成の Web スクリーンショットですが、これは商用ソリューションです。

私はJavaベースのソリューションを望んでいますが、 khtml2png などの外部プロセスの実行、またはhtml2psなどの統合を検討する必要があるかもしれませ

助言がありますか?

4

4 に答える 4

6

最初に頭に浮かぶのは、AWT を使用してスクリーン グラブをキャプチャすることです (以下のコードを参照)。JEdi​​torPaneJDIC WebBrowserコントロール、またはSWT ブラウザ( AWT 埋め込みサポートを介して) のキャプチャを検討できます。後者の 2 つにはネイティブ ブラウザ (IE、Firefox) が組み込まれているため、依存関係が導入されます。JEdi​​torPane HTML サポートは 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);
    }

}
于 2008-10-04T14:12:08.810 に答える
3

あなたは本質的に、Java からアクセスできる完全なレンダリング エンジンを求めています。個人的には、手間を省いて子プロセスを呼び出します。

それ以外の場合は、次の純粋な Java ブラウザーに出くわしました: Lobo

于 2008-10-04T02:18:08.690 に答える
0

特定のブラウザー (IE、FIREFOX、SAFARI バージョン x、y、z) でレンダリングしたい Web ページを指定し、スナップショットをメールで送り返す QA/テスト Web サイト/サービスはありませんでしたか?あなた。'

私はこのサービスを覚えていません。おそらく ajaxian を頻繁に使用する他の開発者はそれを覚えているでしょうか?

于 2008-10-04T02:40:07.083 に答える
0

ImageMagickを呼び出してみてください。Java ソリューションではないことはわかっていますが、Java から呼び出すことができます。Java フロントエンドもありますが、あまり成功していません。

于 2008-10-06T07:41:04.730 に答える