Do You PHP はてな このページをアンテナに追加 RSSフィード Twitter

2007-04-18

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

うわ。これ良い。

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

秋元@サイボウズラボ・プログラマー・ブログ: PHP+Windowsでスクリーンショットやサムネイル作成

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

f:id:shimooka:20070418153633p:image

のような感じで撮れました。サムネイルは実際に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");

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

f:id:shimooka:20070418155901p:image

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

追記

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

f:id:shimooka:20070418234538p:image

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

moriyoshimoriyoshi 2007/04/18 19:29 TBありがといございました。リサイズは ImageCopyResampled() というのもあるみたいですが、どうでしょう?

shimookashimooka 2007/04/18 23:53 moriyoshiさん:こんばんは。ImageCopyResampled、すっぽり頭から抜けてました:-( ありがとうございます。

osewaninarimasuosewaninarimasu 2007/04/30 15:21 どうしても、スクリーンショットが真っ黒の画像になってしまいます。
解決策をご存知ないでしょうか?

shimookashimooka 2007/04/30 21:50 osewaninarimasuさん:このエントリの最初にあるキャプチャのようにCLI版で実行してるでしょうか?私も最初ブラウザからPHPスクリプトを実行していて、真っ黒な画像が生成されてました。。。orz

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証