|
IT News > トピックス > Webページサムネイル化 ■目次 抜粋URL Linuxサーバー環境でのサイトサムネイル化:PHPで実行 ・・で、どないしてサイトのサムネイル化してんねん?って事ですが、有り難い事に既にネットでも詳しい情報が書かれています。 ウエブサイトの自動スクリーンショット SimpleAPI の仕組みについて考察してみる webnail - webサイトをサムネイル化 サイトサムネイル化は、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 コード例長々言葉で書いてもあれなんで、実現コード例を書いてみます。 //Xvfb(仮想Xサーバー)起動
$command = '/usr/X11R6/bin/Xvfb :1 -screen 0 1024x768x24 > /dev/null &';
// 1024*768のフルカラー(1677万色)のディスプレイをID1で用意するという意味
$last_line = system($command , $rtn);
//firefox起動(プロファイル”user”で起動)
$command = '/usr/bin/firefox -display :1 -width 1024 -height 800 -P "user" > /dev/null &';
$last_line = system($command , $rtn);
//60秒待つ
sleep(60);
$url = 'http://www.res-system.com/weblog/';
//サムネイル画像パス指定
$thumbimg = '/thumb/t.gif'; //サムネイル画像
$img = '/img/i.gif'; //サムネイル元画像
//firefox上でサイト表示
$command = '/usr/bin/firefox -display :1 -remote "openurl(' . $url . ')" &';
$last_line = system($command , $rtn);
//10秒待つ
sleep(10);
//ImageMagickでスクリーンショットを画像に保存
$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);
//firefox終了
$command = 'killall firefox-bin > /dev/null &';
$last_line = system($command , $rtn);
//Xvfb(仮想Xサーバー)終了
$command = 'killall Xvfb > /dev/null &';
$last_line = system($command , $rtn);
※コマンド発行後は、sleep関数である程度待つことも重要ですね。 さて、まあこんな感じで実現はできるんですが、サイトサムネイルという処理自体Linuxでやるものなの?っていう疑問もあると思います。いや、上記でできるんですが、如何せん処理時間が掛かるし、Flash満載のサイトのサムネイルが作成しにくかったりと問題も多く、、つまりWindowsサーバーでやる方がいいのではないかと思っています。(はてなスクリーンショットなんかもサムネイル化はWindowsサーバーのようです) |