Posted by
亡命者 in 2006 年 7 月 4 日 8:49 AM
Vine Linux 3.2でwebサイトをサムネイル化。
◆ SimpleAPI その1. ウェブサイトサムネイル作成API β版
基本的な処理は仮想フレームバッファを利用し、ヴァーチャルディスプレイでfirefox(mozilla)を動作させ、 スクリーンショットを撮る、という流れ。主にCGIなどからwebサイトをキャプチャするのに利用されているが、 X上のGUIプログラムの自動キャプチャなどにも応用できそうだ。(コマンドラインからある程度、実行・操作が可能なものに限る)
ただ、他にもいくつか’やり方’はあるようなので、上記サイトは別の方法で実装されているのかもしれない。 web上にもあまり情報がないので、実装に苦労した。
まず、Xvfbとfirefox(通常、インストールされているmozillaでも可)をインストール。
apt-get install Xorg-Xvfb
apt-get install firefox
インストール後、さっそく起動。
xvfb :1 -screen 0 1024×1024x24 &
とするとフォント関係等のエラーが出るも起動。gdmあたりの設定をいじれば直るかもしれないが、 変にいじると今度はネイティブのほうが起動しなくなりそうなので、エラーを無視する。
基本的にずっと起動しときたいので、/etc/init.d/xvfbを作成。下記リンク先サイトををまんま引用。多謝。
#!/bin/bash
#
# chkconfig: - 91 35
# description: Starts and stops XVfb. \
# used to provide virtual frame buffer.
# Source function library.
. /etc/init.d/functions
prog=$"Xvfb"
# Xvfb program
XVFB=/usr/X11R6/bin/Xvfb
start() {
echo -n $"Starting $prog: "
daemon /usr/X11R6/bin/Xvfb :1 -screen 0 1024x1024x24 &
echo
}
stop() {
echo -n $"Shutting down $prog: "
killproc Xvfb
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
で、パーミッションを変更し、起動。
chmod 755 /etc/init.d/xvfb
/etc/init.d/xvfb start
firefoxのプロファイルを作成する必要があるようだ。webshotというプロファイル名で/tmp/webshotに作成。 ディレクトリは勝手に作ってくれるはず。
firefox -createprofile “webshot /tmp/”
Perlからどうしてもfirefoxを起動できなかった(気がする)ので、あらかじめ仮想画面上で起動しっぱなしにしておく。 できれば、Perlで起動から終了までしたいのだが・・・
export DISPLAY=:1.0
firefox -display :1 -P “webshot” &
-heightとか-widthが効かない気がするけど、ご愛嬌。全画面で表示できればいいので無視。 Flashプラグインのインストールや細かい設定はネイティブ側でプロファイルを指定し、実際に起動させて行う。 ウィンドウサイズもネイティブ側でたぶんOK。全部コマンドラインから動けばいいのに。Xを実行できなければ、 firefoxの設定ファイルなどの編集が必要かも。
Perlスクリプトでは以下のように実行。new-windowを付けないと、タブで開く。これも、 ネイティブ側で設定すればなしでいけるかも。
`firefox -display :1 -remote “openurl($url), new-window”`;
あとは、imagemagickで全画面スクリーンショットを保存。
`import -display :1 -window root $img_file`;
タイトルバー、ステータスバーなどは適宜、cropする。
`convert -crop 978×871+0+92 $img_file $img_file`;
下記、papasanのサイトはwebページの大きさに合わせてheightを調整してるものもあるようだ。凄すぎ。
◆ SimpleAPI の仕組みについて考察してみる
◆ ウエブサイトの自動スクリーンショット
◆ サーバー側でWEBサイトのスクリーンキャプチャ、サムネイルを作成する方法