サーバ処理でwebページをキャプチャし、サムネイル化する方法は最近では珍しくない技術だけど、最近試してみたのでメモ。

キャプチャはImageMagickを使ってスクリーンショットを取るのが王道ですが、今回PageSaverというFireFoxアドオンのキャプチャソフトを使いました。

PageSaverはアドオンながらコマンドラインから実行できる優れ物。

ImageMagickでimportしてゴリゴリ画像加工するのもいいですが、このアドオンを使えば、縮尺、位置指定、画像フォーマット指定、さらにはFTP転送までもがコマンド一発でできちゃいます。

但しコマンドラインからの主要な機能は$15の有償版のみ使用できます。
でも安い。

以下 インストールめも。

前提
OS      CentOS5.2
アーキ i386
Xvfb (仮想フレームバッファ)
firefox 3.0(ブラウザ)
PageSaverPro (firefoxアドオン)

インストール関連

以下、root権限で実行します。
コマンドは#で表してます。

Xvfb インストール
# 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-server-Xvfb
FireFoxのインストール(現在リポジトリは3.0.11になっているようです)
# yum install firefox

・キャプチャ用にプロファイルをカスタムします
~/.mozilla/firefox/xxxxxxx.default/pref.js をエディタで編集します
※xxxxx部分は自動で設定された乱数になります。
以下を追加します

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);

前回の復元やクラッシュレポートのダイアログ等の
邪魔になる部分を設定してます。

pref.jsを編集しましたが、本当はuser.jsを新規作成して
上記を記述する方が望ましいらしいです。

パラメータ等の詳細はこちらを参考
http://firefox.geckodev.org/index.php?user.js

Flashプラグインのインストール
# yum install flash-plugin
PageSaverのイントール
# firefox -install-global-extension  "pagesaverpro-2.1.xpi" 1

構築手順は以上です。

キャプチャ手順 

1. 環境変数を追加

# export DISPLAY=":1.0"

2. Xvfb をデーモンで起動

# /usr/bin/Xvfb :1 -screen 0 1024x1024x24 &

サイズは任意です

3. firefoxをデーモンで起動

# /usr/bin/firefox -display :1 -width 1024 -height 1024  &

サイズは任意です

参考;firefox command line
http://kb.mozillazine.org/Command_line_arguments

4. PageSaverで秘密の花園を盗撮。

# firefox -saveimage http://hogehoge.jp/  -saveas "/tmp/sample.jpg"
-captureflash

URLと保存先は任意の文字列です。

PageSaverのドキュメント
http://pearlcrescent.com/products/pagesaver/doc/
のcommand lineの項を参照

キャプチャ手順は以上

考察 

  • 実際にはキャプチャ手順の1~3を常駐プロセスにさせ、WebAPIとするケースは外部コマンドをキックするモジュールを各Action側でコールする感じかなと。
  • 3について、懸念点があり、4でURLを流し込むとfirefox自体は過去開いたページはそのままに、新しいURLを新規タブで開いているかもしれません。その場合、常駐し続けるとメモリ消費が大きくなる可能性があります。連続でキャプチャし続けてfirefoxプロセスのメモリ状況を監視して確認する必要がありそうです。
  • 上記の場合、キャプチャを取得する度にfirefoxの起動停止が必要かもしれません。
  • PageSaverがキャプチャ後、標準エラー出力にステータスを出力するのでエラーのハンドリングが可能かもしれません。ただ、ステータス出力はコマンドが終了後,遅れて出力されている(コマンド非同期)のでそこら辺はファイルなりにパイプが必要かも。

さっさとWebAPI公開しなきゃ。

次のエントリはPlaggerについて調査してみようと思う

Udemy 独学でのアプリ開発に限界を感じたら

プログラミング初学者の皆さんに、 Udemy を強くお勧めしたいと思います。 Udemy は世界中のトップレベルのプログラミング講師が提供するオンライン講座を取り揃えています。以下は、 Udemy で学ぶことのメリットについての詳細です。

1. Udemy の豊富なコースの選択肢

Udemyには、数千ものコースがあります。初心者から上級者まで、プログラミングのあらゆるレベルを網羅しています。また、様々なプログラミング言語やツールに関するコースも多数あり、希望に合わせたコースを選ぶことができます。

2. 実践的な学習方法

Udemyのコースは、理論だけでなく実践的な学習も行えます。多くのコースには、プログラムの作成や実際のプロジェクトに取り組む演習が含まれています。これにより、理論だけでなく実践的なスキルも身につけることができます。

3. Udemy には質の高い講師陣

Udemyの講師陣には、世界中のトップレベルのプログラマーが多数在籍しています。彼らは、実務での経験を活かして、分かりやすい講義を行っています。

4. 初学者が始めるのにとても手頃な価格

Udemyのコースは、他のオンライン講座と比べて手頃な価格で提供されています。また、一度購入すると、終身アクセスが得られるので、自分のペースで学習することができます。

以上の理由から、プログラミング初学者の方には、Udemyが最適な学習プラットフォームであると考えられます。ぜひ一度、Udemyのコースを体験してみてください。


ウェブ開発の人気オンラインコース


ITとソフトウェアの人気オンラインコース


デザインの人気オンラインコース