サーバー側で Web ページのサムネイルを生成するオープンソース Java ライブラリ [クローズド]

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

  •  05-07-2019
  •  | 
  •  

質問

指定された URL のサムネイルを生成するオープンソース Java ライブラリを探しています。などの外部サービスを呼び出すのではなく、この機能をバンドルする必要があります。 アマゾン または ウェブスナップ.

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

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

助言がありますか?

役に立ちましたか?

解決

最初に思い浮かぶのは、AWT を使用して画面キャプチャをキャプチャすることです (以下のコードを参照)。をキャプチャすることもできます。 JEdi​​torPane, 、 JDIC ウェブブラウザ コントロールまたは 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);
    }

}

他のヒント

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

それ以外の場合、この純粋なJavaブラウザに遭遇しました:ロボ

特定のブラウザ(IE、FIREFOX、SAFARIバージョンx、y、z)でレンダリングしたいWebページを指定できるQA /テストWebサイト/サービスがありませんでした。あなたに戻ってスナップショット。 '

このサービスを覚えていない-おそらく、ajaxianを頻繁に使用する他の開発者がそれを覚えているかもしれませんか?

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top