サーバOSはLINUX、言語はJavaもしくはPerlです。得たいレンダリング結果はHTML4.0、CSS(Level問わず)に準拠したものです。Javascriptの解析有無は問いません。
上記の環境で使用できるサムネイル生成ツールを有償・無償問わず、もしくはその生成のためのノウハウを探しています。ちなみにASP型のサービスは対象外とします。あくまで自サーバ内で処理を完結できることを目的としています。
mkthum.pl
perlです。
実行例が8パターン説明されていますので、こちらでサンプルDLしてできるかと思います。
http://ja.wikipedia.org/wiki/HTML%E3%83%AC%E3%83%B3%E3%83%80%E3%...
HTMLレンダリングエンジン - Wikipedia
Webのサムネイルを作成するにはまずHTMLを解析してそれをレンダリングしなければならないわけですが、Perlではまずありません。Javaでは以前はSunマイクロシステム社でブラウザ(HTMLレンダリングエンジン)の開発が行われていたようですが、HTMLのバージョンは2.0だったように思えます。
Java以外での現在有効なレンダリングエンジンは IEコンポーネント・Geckoレイアウト・KHTMLがあげれていて、このうちGeckoレイアウト、KHTMLはC/C++のコードが公開されています。
よってJavaやPerlで実現するにはこれらのコードを元にして自作する必要があります。
ちなみにAlexa.comのサムネイルが現在のページの内容ではないことから、バックグランドで走っているアプリケーション(検索用DB作成用デーモン)がレンダリングエンジンを使用してHTMLを描画、その後サムネイル化してDBに登録するという方法を取っていると思われます。これらのアプリケーションはC/C++言語で記述されていることでしょう。
納期によりますが、コードの公開されているHTMLレンダリングエンジンをJavaあるいはPerlに移植した上で、内部でbmp上にHTMLをレンダリングし、そのbmpをサムネイル化して保存という手法をとればリアルタイムなサムネイル化も不可能ではないと考えます。しかしコストを考えると実用的ではありません。
実用に持ち込みたいのであれば、サムネイル画像作成の部分はC/C++でコーディングすることをお勧めします。
参考になればよろしいのですが。
http://java.sun.com/products/archive/hotjava/index.html
HotJava Browser
影鷹 (kagetaka.org)
arcanum2005さん回答有り難うございます。
非常に参考になります。ただかなりヘヴィな実装が必要になりそうですね。この方法だと今回の要件は満たすのは厳しそうです。(環境的に)
Geckoで思いついたのですが、Mozillaのレンダリングエンジンを利用したツールなどは無いでしょうか。コマンドラインから引数でURL渡すだけで画像が返ってくるような物であれば理想的です。
http://dip.picolix.jp/disp5.html
ダウンロード・CrenaHtml2jpg WEBページをサムネイル画像に!
こちらではいかがでしょう。
blogの方では、開発時の試行錯誤が書かれていて、興味深いです。
これはWindowsアプリケーションです。サーバOSはLINUXと明記しています。質問をきちんと把握なさって下さい。
CSSJ でHTML/XMLをPDFに変換する
再回答です。
※1度目は完璧に誤解してました。申し訳ありません。
今回の情報でも要件に合わないようであれば閲覧ポイント(合計40ポイント?)は返却させていただきますので、回答欄にその旨お知らせください。
こういうのはどうでしょう?
HTMLをPDF化(CSSJサーバ)、PDFをJPEG or PNG or GIF化(ImageMagic)。ImageMagicではサムネールも作成可能です。
以下、1つ目はCSSJのページ。
※サーバはJava(Servlet)なので当然Linux動作可能です
(1ヶ月の試用は可能ですが1サーバ7万円のライセンスは少し高めですね。でも有償も問わないとのことなので。)
2つ目はその開発者向けのページ。
この以下引用部分を見るとクライアントへリダイレクトせずに(perlで)ファイル保存してしまえば、PDFをサーバ上に残すことができそうです。
その後、ImageMagicを使って、PDF→(例えば)JPEG&サムネールで良いかと。
ImageMagicのPDF→JPEGについては、4つ目のURL(Windows版の説明ですが)にconvertコマンドのパラメータ(対応フォーマット)説明を参照ください。
サムネールということは複数ページのキャプチャになるのでしょうから、それらをとりまとめるPerlなりは、ごりごり書く必要はありますね。
---------------------
# 本体の送信
$session->start_main(STDOUT, ’file:test.html’, ’text/html’, ’EUC-JP’);
print << ’EOF’;
<html>
<head>
<title>テストドキュメント</title>
<link rel=”StyleSheet” type=”text/css” href=”skin.css”>
</head>
<body>
<p>こんにちは</p>
</body>
</html>
EOF
$session->end_main(STDOUT);
# セッションを閉じる
$session->close();</plaintext>
<p>
start_resource,start_mainにファイルハンドルを渡すと、
それぞれend_resource,end_mainが呼び出されるまで、
ファイルハンドルに出力されたデータをCSSJサーバーに送ります。
その間、ファイルハンドルの本来の機能(STDOUTでは標準出力にデータを送るなど)は使えなくなります。
</p>
---------------------
http://www-6.ibm.com/jp/developerworks/linux/031031/j_l-graf.htm...
dW : Linux : コマンドラインからのグラフィックス操作
typistaさん、回答有り難うございます。
CSSJ、この製品は初めて知りました。ライセンス料も範疇内です。ダイレクトにHTML->画像が希望ですが、代替案としてPDF経由でのコンバートもアリだと思いますので参考に致します。
製品や情報のリソースは英語であれば国外でも問題ありませんので、引き続き回答を募集致します。
※ポイントの件はそのままで結構です。
Papasan’s homeが同じような事をMozillaとLinuxのコマンドでやっています。
たぶん
http://papasan.org/Squishdot/1111501444
http://papasan.org/Squishdot/1111549834
http://papasan.org/Squishdot/1111576504
http://papasan.org/Squishdot/1111798896
http://papasan.org/Squishdot/1112044879
が関係すると思います。
他にもあったように思いますが見つけられません(汗
izayoimizuki さん
正に求めていた方法です。この方法にて実装できそうです。ありがとうございました。
質問の意図と異なります。
私が実装したい機能は、既存画像のサムネイルを作成することでは【なく】、WEBページ全体をレンダリングして画像ファイルへ落とすことです。Alexaで実際に検索してみて下さい。いくつかのサイトではサムネイル画像が表示されるはずです。