サーバーでWEBページのサムネイルを生成する方法

By nakayama - 10/01/26 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

今回はLinuxサーバーでWEBページのサムネイルを取得する方法を紹介します。
 
基本的な考え方は『実際にブラウザを起動してスクリーンショットを取る』です。
 
サーバーにXWindow、Firefoxをインストールするのは何か気持ち悪い気がして、
他の方法で実現出来ないか探ってみたのですが今のところこれがベストです。
 

必要パッケージをインストール(Xvfb + Firefox + ImageMagick)

■CentOS5の場合で紹介します

X Windowインストール

yum -y groupupdate "X Window System"
yum -y install xorg-x11-server-Xvfb

 

Firefoxインストール

yum -y install firefox
yum -y install flash-plugin

そのままの設定だと「killall」でFirefoxを終了させると次に起動した際に「セッション復元」に関するメッセージが表示されたり、ポップアップが出たりとコマンドからサムネイルを生成する場合に邪魔になるものがあります。
 
pref.jsを書き換えてサムネイル生成に不必要な設定を変更。

user_pref("browser.sessionstore.enabled", false);
user_pref("browser.sessionstore.resume_from_crash", false);
user_pref("browser.startup.page", 0);
user_pref("plugin.default_plugin_disabled", false);
user_pref("privacy.popups.disable_from_plugins", 3);
user_pref("alerts.totalOpenTime", 1);
user_pref("security.enable_ssl2", false);
user_pref("security.enable_ssl3", false);

 

ImageMagickインストール

yum -y install ImageMagick

 

ブラウザ起動・スクリーンショットの流れ

 
1.ディスプレイの環境変数設定

# DISPLAY=:1.0
# export DISPLAY

 
2.Xvfbを起動

# Xvfb :1 -screen 0 1024x768x24 > /dev/null &

 
3.URLを指定してFirefox起動

# firefox -width 1024 -height 800 http://plusmb.jp > /dev/null &

 
4.ブラウザ以外の無駄な領域を削ってスクリーンショット

# WINID=`xwininfo -root -tree | grep "Mozilla Firefox" | head -n 1 | sed -e 's/^[  ]*//' | cut -f 1 -d ' '`
# xwd -id $WINID -out thumnail.xwd

 
5.ImageMagickを利用して、サムネイル画像をGIF画像に変換

convert thumnail.xwd thumnail.gif

 
6.Xvfb、Firefoxを終了

killall firefox Xvfb

 

参考サイト

lovebug.jp – Webページのスクリーンショットを撮る方法(Xvfb + Firefox + ImageMagick)
pomo123の日記 – http://d.hatena.ne.jp/pomo123/20080430/1209532590
Drk7jp – SimpleAPI の仕組みについて考察してみる
ワザップ!チームブログ – コマンドでスクリーンショットを撮ってみる – Linux