Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

PHP+Windowsでスクリーンショットやサムネイル作成

うわ。これ良い。


Windowsだけだが、COMで取ったウィンドウハンドルからウィンドウの画像をキャプチャする機能をPHPのGD拡張に追加した、という話が。

で、WindowsXP SP2+IE7なマシンで実際に試してみましたが、スクリーンショット

のような感じで撮れました。サムネイルは実際にIEがポコポコ立ち上がってキャプチャしてるんだ。。。へぇ、、これは楽だ。
ちなみに、フルスクリーンじゃないとウィンドウ枠が残ってしまいますが、解像度によってはでかいpngができてしまうので、キャプチャした画像をリサイズするとなると、こんな感じでしょうか。

<?php
$browser = new COM("InternetExplorer.Application");
$handle = $browser->HWND;

$browser->Visible = true;
$browser->FullScreen = true;
$browser->Navigate("http://www.doyouphp.jp/");

/* Is it completely loaded? (be aware of frames!)*/
while ($browser->Busy) {
    com_message_pump(4000);
}
$im = imagegrabwindow($handle, 0);
$browser->Quit();

$new_x = 320;
$new_y = imagesy($im) * $new_x / imagesx($im);
$newim = imagecreatetruecolor($new_x, $new_y);
imagecopyresized($newim, $im, 0, 0, 0, 0, $new_x, $new_y, imagesx($im), imagesy($im));
imagepng($newim, "test.png");

で、こんな感じになります。

うーん。リサイズはImage magick使った方がヨサゲかも。

追記

id:moriyoshiさんから「imagecopyresampledを使っては?」というコメントを頂いたので、先のコードをs/imagecopyresized/imagecopyresampled/ しただけのコードで試してみました。結果は以下のような感じになります。

ををーっ。これなら良い感じですね。ありがとうございます :-)