5

私はJavaでWebアプリケーションを構築しています。ここで、WebページのURLを入力として指定すると、Webページのスクリーンショット全体が必要になります。

私が持っている基本的な考え方は、レンダリングコンポーネントの表示バッファをキャプチャすることです。それを行う方法がわかりません。plzヘルプ。

4

2 に答える 2

3

同時レンダリングをサポートするようにスケーリングできる純粋な Java ソリューションの場合、GUI に Swing コンポーネントを提供するCobraなどの Java HTML4/CSS2 ブラウザを使用できます。このコンポーネントをインスタンス化すると、その paint(Graphics g) メソッドを呼び出して、画面外の画像に自分自身を描画できます

E.g.
Component c = ...; // the browser component
BufferedImage bi = new BufferedImage(c.getWidth(), c.getHeight(), TYPE_INT_RGB)
Graphics2d g = bi.createGraphics();    
c.paint(g);

その後、Java イメージ API を使用して、これを JPG として保存できます。

JPEGImageEncoder encoder = JPEGCodec.createEncoder(new FileOutputStream("screen.jpg"));
enncoder.encode(bi);  // encode the buffered image

Java ベースのブラウザーは、通常、確立されたネイティブ ブラウザーと比較すると見劣りします。ただし、目標は静的な画像であり、インタラクティブなブラウザーではないため、この点に関しては Java ベースのブラウザーで十分です。

于 2010-04-30T22:36:29.300 に答える
3

このアプリで使用した小さなトリックがあります。

カウント ダウン デモ アプリ http://img580.imageshack.us/img580/742/capturadepantalla201004wd.png blog.stackoverflow.com ページをフィーチャーした Java アプリケーション (画像をクリックしてデモ ビデオを表示)

問題は、これ専用のマシンが必要なことです。

だから、トリックは非常に簡単です。

  • 取得する URL を引数として受け取るアプリケーションを作成します。

  • 次に、それを開いてDesktop.open( url ) 、現在の Web ブラウザーをトリガーします。

  • 最後に、java.awt.Robot でスクリーンショットを撮り、diks に保存します。

何かのようなもの:

 class WebScreenShot {
     public static void main( String [] args ) {
         Desktop.getDesktop().open( args[0] );
         Robot robot = new Robot();
         Image image = robot.createScreenCapture( getScreenResolutionSize() );
         saveToDisk( image );
     }
  }

このソリューションは OS 全体を必要とするため、完璧とは言えませんが、このアプリ専用の VM があれば、Web をクロールしてスクリーンショットを簡単に撮ることができます。

このアプリを邪魔にならないアプリとして使用することの問題点は、今日まで、Java 用の適切な HTML エンジン レンダラーがないことです。

于 2010-04-30T17:14:03.450 に答える