|
IT News > トピックス > Webページサムネイル化 > 保留にしているURL2 Linuxサーバー環境でのサイトサムネイル化:PHPで実行 2006年09月20日 ・・で、どないしてサイトのサムネイル化してんねん?って事ですが、有り難い事に既にネットでも詳しい情報が書かれています。 ウエブサイトの自動スクリーンショット サイトサムネイル化は、Windowsサーバー・Linuxサーバー双方で実現可能ですが、当サイトではLinuxサーバーで実現しています。なので、ここではLinuxサーバーにて実現する方法を記述します。 上記参考サイトからわかるように、サイトサムネイル化の処理の流れは以下のようなイメージになると思います。 1.Xvfb(仮想フレームバッファ)起動 2.firefox(ブラウザ)起動 3.firefox(ブラウザ)でURLにアクセス 4.ImageMagickでスクリーンショットを取る 5.画像保存 6.firefox(ブラウザ)終了 7.Xvfb(仮想フレームバッファ)サーバー終了 要は、自分で1個1個サイトのサムネイルを作成する動き(ブラウザで対象URLにアクセスし、”Print Screen”キーでスクリーンショットを取って画像を保存する)を、Xvfb(仮想フレームバッファ)上でやっている、、それをコマンドで叩いている、だけの事なんですね。 この動きで大事なのが、仮想でGUI環境を作成するXvfb(仮想フレームバッファ)とスクリーンショットを取るImageMagickになります。これらはインストール必須。 →Xvfbインストール yum grouplist yum groupinfo "X Window System" yum upgrade xorg-x11-xfs yum upgrade xorg-x11 yum upgrade xorg-x11-devel yum upgrade xorg-x11-libs yum groupupdate "X Window System" yum upgrade xorg-x11-libs yum install xorg-x11-Xvfb yum install firefox →ImageMagickインストール yum install ImageMagick 長々言葉で書いてもあれなんで、実現コード例を書いてみます。もちろんシェルでやるのが一般的かもですが、画像加工をGDでやりたいんでコマンド発行自体もPHPでやりたいと思います。(PHPのsystem関数でコマンド発行) $command = '/usr/X11R6/bin/Xvfb :1 -screen 0 1024x768x24 > /dev/null &'; $last_line = system($command , $rtn); $command = '/usr/bin/firefox -display :1 -width 1024 -height 800 -P "user" > /dev/null &'; $last_line = system($command , $rtn); sleep(60); $url = 'http://www.res-system.com/weblog/'; $thumbimg = '/thumb/t.gif'; //サムネイル画像 $img = '/img/i.gif'; //サムネイル元画像 $command = '/usr/bin/firefox -display :1 -remote "openurl(' . $url . ')" &'; $last_line = system($command , $rtn); sleep(10); $command = '/usr/bin/import -display :1 -window root ' . $img; $last_line = system($command , $rtn); list($width, $height, $type, $attr) = getimagesize($img); $im = imagecreatefromgif($img); $thumb_im = imagecreatetruecolor(120, 90); imagecopyresampled($thumb_im, $im, 0, 0, 0, 90, 120, 90, $width, $height); imagegif($thumb_im, $thumbimg); $command = 'killall firefox-bin > /dev/null &'; $last_line = system($command , $rtn); $command = 'killall Xvfb > /dev/null &'; $last_line = system($command , $rtn); ※コマンド発行後は、sleep関数である程度待つことも重要ですね。 さて、まあこんな感じで実現はできるんですが、サイトサムネイルという処理自体Linuxでやるものなの?っていう疑問もあると思います。いや、上記でできるんですが、如何せん処理時間が掛かるし、Flash満載のサイトのサムネイルが作成しにくかったりと問題も多く、、つまりWindowsサーバーでやる方がいいのではないかと思っています。(はてなスクリーンショットなんかもサムネイル化はWindowsサーバーのようです) |