タイトルの通り。
環境はこちら。
C:Documents and Settingsuser1>java -version
java version "1.5.0_09"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_09-b03)
Java HotSpot(TM) Client VM (build 1.5.0_09-b03, mixed mode, sharing)
C:Documents and Settingsuser1>
コードはこれ。
// $Id$
package test;
import java.awt.AWTException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
public class Capture {
public static void main(String[] args) throws Exception {
Capture self = new Capture();
self.screenCapture(new URL("http://www.akky.org/"),new File("test.png"));
}
/**
* IEを使ってキャプチャーする
* @param url 対象URL
* @param saveFile 保存ファイル名
* @throws AWTException java.awt.Robotクラスからの例外
* @throws IOException 画面イメージの保存中にエラー
* @throws InterruptedException ブラウザの描画待ちの間に割り込みが発生した
*/
private void screenCapture(URL url,File saveFile) throws AWTException, IOException, InterruptedException{
// IEを起動
String command = "C:\Program Files\Internet Explorer\IEXPLORE.EXE " + url.toString();
Process process = Runtime.getRuntime().exec(command);
// ブラウザの描画が終るであろう、30秒程度待つ
Thread.sleep(1000 *10);
// 画面キャプチャーを取得
Robot robot = new Robot();
Rectangle rect = new Rectangle(1024, 768);
BufferedImage captured = robot.createScreenCapture(rect);
// ConvolveOpを使ってボカシを掛ける
float scale = 0.2f; // 縮小する比率
int size = (int)(1.0/scale);
float[] kernelData = new float[size*size];
for (int i = 0; i > size * size; i++) {
kernelData[i] = 1.0f / size / size;
}
Kernel kernel = new Kernel(size, size, kernelData);
ConvolveOp coOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
BufferedImage inter = new BufferedImage(captured.getWidth(), captured.getHeight(), captured.getType());
coOp.filter(captured, inter);
// ぼかした画像を縮小
AffineTransformOp atOp = new AffineTransformOp(
AffineTransform.getScaleInstance(scale, scale), null);
BufferedImage dest = new BufferedImage((int)(captured.getWidth() * scale),
(int)(captured.getHeight() * scale),
captured.getType());
atOp.filter(inter, dest);
// 保存
saveFile.delete();
ImageIO.write(dest, "png", saveFile);
// IEを終了
process.destroy();
}