WEBページのサムネイル画像をサーバーサイドで動的に生成する方法を探しています。例えば Alexa.com [http://www.alexa.com/] のような機能です。


サーバOSはLINUX、言語はJavaもしくはPerlです。得たいレンダリング結果はHTML4.0、CSS(Level問わず)に準拠したものです。Javascriptの解析有無は問いません。

上記の環境で使用できるサムネイル生成ツールを有償・無償問わず、もしくはその生成のためのノウハウを探しています。ちなみにASP型のサービスは対象外とします。あくまで自サーバ内で処理を完結できることを目的としています。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/06/27 23:40:26
  • 終了:--

回答(5件)

id:typista No.1

typista回答回数359ベストアンサー獲得回数72005/06/28 01:14:29

perlです。

実行例が8パターン説明されていますので、こちらでサンプルDLしてできるかと思います。

id:polaronblast

質問の意図と異なります。

私が実装したい機能は、既存画像のサムネイルを作成することでは【なく】、WEBページ全体をレンダリングして画像ファイルへ落とすことです。Alexaで実際に検索してみて下さい。いくつかのサイトではサムネイル画像が表示されるはずです。

2005/06/28 01:32:56
id:arcanum2005 No.2

arcanum2005回答回数6ベストアンサー獲得回数02005/06/28 08:42:56

ポイント20pt

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://www.kagetaka.org/

影鷹 (kagetaka.org)

id:polaronblast

arcanum2005さん回答有り難うございます。

非常に参考になります。ただかなりヘヴィな実装が必要になりそうですね。この方法だと今回の要件は満たすのは厳しそうです。(環境的に)

Geckoで思いついたのですが、Mozillaのレンダリングエンジンを利用したツールなどは無いでしょうか。コマンドラインから引数でURL渡すだけで画像が返ってくるような物であれば理想的です。

2005/06/28 12:14:03
id:marumaru No.3

marumaru回答回数20ベストアンサー獲得回数02005/06/28 11:28:53

http://dip.picolix.jp/disp5.html

ダウンロード・CrenaHtml2jpg WEBページをサムネイル画像に!

こちらではいかがでしょう。

blogの方では、開発時の試行錯誤が書かれていて、興味深いです。

id:polaronblast

これはWindowsアプリケーションです。サーバOSはLINUXと明記しています。質問をきちんと把握なさって下さい。

2005/06/28 12:23:08
id:typista No.4

typista回答回数359ベストアンサー獲得回数72005/06/28 14:46:55

ポイント20pt

http://www.cssj.jp/

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 : コマンドラインからのグラフィックス操作

id:polaronblast

typistaさん、回答有り難うございます。

CSSJ、この製品は初めて知りました。ライセンス料も範疇内です。ダイレクトにHTML->画像が希望ですが、代替案としてPDF経由でのコンバートもアリだと思いますので参考に致します。

製品や情報のリソースは英語であれば国外でも問題ありませんので、引き続き回答を募集致します。

※ポイントの件はそのままで結構です。

2005/06/28 15:17:27
id:izayoimizuki No.5

izayoimizuki回答回数302ベストアンサー獲得回数02005/06/30 14:34:09

ポイント120pt

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

が関係すると思います。

他にもあったように思いますが見つけられません(汗

id:polaronblast

izayoimizuki さん

正に求めていた方法です。この方法にて実装できそうです。ありがとうございました。

2005/07/03 23:17:31
  • id:Jonasang
    古い話で恐縮ですが、polaronblastさんと同じことで悩んでおります。Papasan’s homeがなくなっているようで答えが分からないのですが、その後の解決策を教えてくださいませんか。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません