ウェブページのサムネイルをWindowsサーバで

以前、ウェブページのサムネイル生成をLinuxサーバ環境で構築する方法をさんざん検討し、なんとか実現できることを確認できた。でも格安レンタルサーバ(もしくはVPS)で構築するのはかなり面倒そう。最近はWindowsのレンタルサーバもたくさん出てきたので、Windowsサーバでウェブページサムネイルを作成する方法を探してみた。あっけなく見つかった。

記事元はサイボウズラボの秋元さんとかDo You PHPの下岡さんとか。さすがに識者だ。以下下岡さんのサイトにあったものを引用。

<?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_yimagesx($im), imagesy($im));
imagepng($newim, "test.png");

imegecopyresizedはimagecopyresampledに変更して使うとのこと。この部分は以前トリミングプログラムを作成したときに把握したところだ。さっそくどこかサーバを借りて試してみたいところではあるけれど・・・。


					

サムネイル生成時の日本語文字化け

ウェブページのサムネイル生成プログラムがうまく動いて気をよくしていたが、新規にインストールしたCentOS4.2環境では日本語(漢字だけ)が文字化けしてしまった。1文字が四角の中にごちゃごちゃと文字がはいっているようなのに置き換わっている。いろいろ調べたら、これは日本語フォントがインストールされていないときにおきる症状とのことがわかった。今回OSのインストールは、サーバ用途のため、すべて英語を使用するという設定でインストールしたことが原因だろう。
調べたらインストール方法があったのでやってみた。

# wget http://www.grass-japan.org/FOSS4G/ipafonts/grass5.0.3_i686-pc-linux-i18n-ipafull-gnu_bin.tar.gz
# wget http://www.grass-japan.org/FOSS4G/ipafonts/grass5_i686-pc-linux-i18n-ipafull-gnu_install.sh
# sh grass5_i686-pc-linux-i18n-ipafull-gnu_install.sh grass5.0.3_i686-pc-linux-i18n-ipafull-gnu_bin.tar.gz /tmp/grass5 /tmp/bin
# mkdir /usr/share/fonts/ja/
# mkdir /usr/share/fonts/ja/TrueType/
# mv /tmp/grass5/fonts/*.ttf /usr/share/fonts/ja/TrueType/
# sh /tmp/bin/grass5uninstall.sh
# mkfontdir
# mkfontscale

まぁ、フォントは何でもよかったのでIPAフォントで。ウェブにあった記事をそのまま参考にして、適当にインストールしたら、なんとなく動いた。これで漢字も文字化けせず、正しくサムネイルが生成されることを確認できた。

今回サーバ用途向けのパッケージングでインストールして、正常に動作させることが出来たので、おそらくVPS環境で問題なく動作させることが出来ると思われる。早速準備して、サービス開始を目指すことにする。

firefoxにFlashプラグインをインストール

だんだんPHPネタからはずれてきたが・・・。

とりあえずウェブサイトのサムネイルを作る準備は整った。ところが、ちょっと試してみて、NGな部分があった。firefoxにはデフォルトでFlashのプラグインが入ってないので、Flashのあるウェブページがうまく表示されないのだ。

GUIがないのにFlashプレーヤーがインストールできるのか・・・。

しかし問題はなかった。
まずはAdobeのサイトからダウンロード。
URLはこちら

ここでtar.gz版をダウンロードし、解凍。解凍後に出来たディレクトリの中にある「flashplayer-installer」を実行すればOK。無事インストールを完了し、Flashページも正常にサムネイル作成ができることを確認した。

ちなみに、このサムネイル作成だが、ちょっと負荷がかかし、時間もかかる。今のところVMWARE上で実行しているためだと思うのだが、サムネイル作成に30秒以上かかる。とりあえずサーバを一台立てて、そこでバッチ処理で流すルーチンを加えて一般公開としたい。バッチの部分とかキャッシュの部分とかそのあたりはやっぱりPHPで書く予定。

いずれにしてもPHPの得意分野ではないような気もするのだが、まぁ、近日中に構築完了してサービスインします。こちらもご期待くださいな。

ウェブページのサムネイルを生成

以前から何とかしたいと思っていたウェブページのサムネイル生成がようやくできるようになった。以前にやろうとしたときは資料も少なくて、散々悩んだ挙句に放置してしまったが、最近はこういうサービスを提供しているところも多いようで、情報も豊富になってきた。今回も検索にて情報を収集し、ようやく実現にこぎつけたので、ここに諸々メモしておく。

環境としては「Linux下での構築を目指す」これだけ。これで普通の安いVPSを使って構築できるからだ。ちなみに今回使用したのはCentOS4.2。

実現方法は仮想フレームバッファを使用。普通サーバとして使う場合にはX Windowシステムはインストールされていないし、その必要もない。ただしこの機能を実現するに当たって「ブラウザからURLを開き、その画面キャプチャをとる」必要があるので、X Windowシステムが必須となる。そこでX Windowsシステムを仮想的に動作させ、そこでブラウザ起動、URLオープン、画面キャプチャ、画像保存、後処理という手順を踏むことになる。

構築の実際は以下のとおり(参考:Linuxサーバー環境でのサイトサムネイル化:PHPで実行)。

(1) 必要なソフトウェアをインストールする。
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
yum install ImageMagick
とりあえず上から実行していく。途中省略できそうな感じだが、とりあえず言われるままに。

(2) 仮想フレームバッファを起動する
シェルプロンプトで以下のコマンドを実行する(要は仮想フレームバッファをディスプレイ番号1、スクリーン番号0、横1024px縦768x色24ビットで起動しろ、ということ)。
/usr/X11R6/bin/Xvfb :1 -screen 0 1024x768x24 > /dev/null &

(3) 使用ディスプレイの設定する
上でX Windowシステムを起動できた(はず)。上記のディスプレイ・スクリーン番号を使用する旨宣言する(同じくシェルプロンプトで)。
export DISPLAY=:1.0

(4) Firefoxのプロファイルを作成する(最初だけ)
以下のコマンドでプロファイルを作成しておく(コレを作っておかないと、仮想画面上では「プロファイルを作成しますか」画面でとまったままの状態になっている)。以下は「scriptという名前のプロファイルを作成し、その保存場所は/tmp/以下にしなさい」という意味。
/usr/bin/firefox -createprofile "script /tmp/"

(5) Firefoxを起動する
以下のコマンドでFirefoxを起動する。このコマンドの意味は「ディスプレイ番号1を使って、横1024px縦800px、プロファイルscriptを使ってFirefoxを起動」となる。
/usr/bin/firefox -display :1 -width 1024 -height 800 -P "script" > /dev/null &

ここまでで、(2)(5)ではフォント関係のエラーが出るかもしれないが、とりあえず放置しても大丈夫そう。おそらく何か足らないだけなので、別途インストールすることにする。Firefoxが無事起動しているかどうかは、動作中のプロセスを見れば一目瞭然だろう(「ps x」とかで)。

(6) 特定のURLを開く。
とりあえずYahooを開いてみよう。
/usr/bin/firefox -display :1 -remote "openurl(http://www.yahoo.co.jp)" &

(7) 画面をキャプチャする。
ウェブページを開いたブラウザの画面をキャプチャして、ファイルに保存する。「-window root」というのは多分X windowのルートっていう意味(かなぁ?)。
/usr/bin/import -display :1 -window root /tmp/img.gif

これで画面がキャプチャできるはずだ。
個人的に一番はまったのは(3)の使用するディスプレイを設定するところ。多分、前回はコレが発見できなかっただけなんだろうと思う。

さて、これをPHPで扱うにはどうするのが一番いいのかちょっと検討。出来次第、サービスとして提供する予定。期待せずに待っててください。

サムネイル生成API

しばらく検討を中断していたウェブサイトのサムネイル。現在はいくつかAPIを供給しているサイトがある。

http://img.simpleapi.net/
http://www.thumbshots.org/

simpleAPIは国産のサムネイル生成API。さすがにこなれていてすばらしいでき。このサイトは開設された当初から見つけていたがずいぶんと進化した感じ。自分がサボっていたのが悪いのだが、先を越された感じだ。しかし時間がないので、開発に取り掛かれないのも事実・・・。幸い、配備していたサーバ群はすべてVPSに置き換えてIPアドレスはあまっている。冬休みの宿題にしようかな。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net