Webのサムネイル生成をJavaでやってみる【前編】

ちょっと、仕事でWebページのサムネイル生成プログラムが必要になるかもしれないというわけで、調べてみました。すると、既に色々と調べられている方がいるようです。

[J] 続・サーバー側でWEBサイトのスクリーンキャプチャ、サムネイルを作成する方法 - Jamz (Tech)

しかし、なんか自分にはいまいちマッチするものがなかったのでちょっと作ってみることにしました。

JDKのインストール

まず、Javaの開発に必要なJDKを、Java SE Downloads からダウンロードします。「ダウンロード」ボタンを押すと英語のページに行きますが、acceptというラジオボタンをチェック後、プラットフォームにあったパッケージのリンクをクリックするとダウンロードできます。

私の場合は、Linux rpm を選びましたが、sshからwgetのパラメータとして貼り付けるとファイル名が長すぎるというエラーが出てしまったので、linksでダウンロードしました。

ダウンロードが完了したら、このファイルは自己解凍形式になっているので実行属性をつけた上で実行します。(rpm -Uvh を自動実行するのでスーパーユーザ権限で行います)

  • chmod +x jdk-1_5_0_12-linux-i586-rpm.bin
  • sudo ./jdk-1_5_0_12-linux-i586-rpm.bin

すると、SunのLicense Agreementが出てくるので、読み進めていき、

Do you agree to the above license terms? [yes or no]
yes

と、入力します。あとは自動的に解凍が進み、rpmのインストールも行われます。
試しに、以下のコマンドを入力して正しいバージョンがインストールされているかチェックします。

  • java -version

java version "1.4.2"
gij (GNU libgcj) version 4.1.1 20070105 (Red Hat 4.1.1-52)
 
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

あらら、GNUのJavaインタプリタのようです。さきほどのインストーラを入れただけでは環境変数の設定ができていないようですね。

そこで、JAVA_HOMEとPATH,CLASSPATHの設定を行います。

  • vi /etc/profile

export JAVA_HOME=/usr/java/jdk1.5.0_12
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

  • source /etc/profile

再度、バージョンチェック。

  • java -version

java version "1.5.0_12"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_12-b04)
Java HotSpot(TM) Client VM (build 1.5.0_12-b04, mixed mode, sharing)

これで、うまくいったようです。

XULRunnerの導入

次に、XULRunnerをインストールします。これは、MDCでは以下のように説明されています。

XULRunner とは、Firefox や Thunderbird と同じくらい多機能な XUL+XPCOM アプリケーションをブートストラップするために使われる Mozilla ランタイムパッケージです。インストール、アップグレード、さらにアンインストールを担当します。XULRunner はまた、他のプロジェクトや製品へのMozilla テクノロジーの組み込みを可能にする libxul も提供します。

なんのこっちゃ、っていう感じですが要するに単なるSDKやライブラリではなくもっと巨大な、APIやフレームワーク的な何かのようです。

今回は、1.8.1.5 Nightlyをダウンロードします。あと、Gecko SDKも一緒にダウンロードします。

完了したら解凍後、インストール作業を行う必要があります。

  • tar zxf xulrunner-1.8.1.5pre.en-US.linux-i686.tar.gz
  • mv xulrunner /usr/local/lib
  • cd /usr/local/lib/xulrunner
  • ./xulrunner --register-global

registerって、なんかCOMのサービスの登録みたいですね...。
SDKの方は、解凍したあとのlibの中のファイルを使います。

  • tar zxf xulrunner-1.8.1.5pre.en-US.linux-i686.sdk.tar.gz
  • mv gecko-sdk/lib/MozillaInterfaces.jar /usr/local/lib

最後に、CLASS_PATHにjarファイルを追加します。
追加するのは、xulrunner/javaxpcom.jar と、MozillaInterfaces.jar の2つです。

以上で、JavaXPCOMを使う準備ができました。実際のサムネイル生成にはSWTやそれを用いたATFなんかを使うことになりますが、とりあえず今日はこれでおしまい。

LINEで送る
Pocket

Webのサムネイル生成をJavaでやってみる【前編】」への4件のフィードバック

  1. こんにちわです。
    サムネイル生成で調べていたらこちらのブログにたどり着いて、早速トライしてみました!
    Macで挑戦したところSWTの動きがおかしいんですがとりあえず動きました。
    そこで、Windowsでやりたいことがあり、持って行ったらXULRunnerの設定がおかしいのか、Bufferのところで画像が取得でてないぞ~と怒られてしまいまして…
    もし宜しければWindowsでの環境整備についても教えていただけませんでしょうか。
    簡単にできると思ったんですが苦戦してまして。

  2. こんにちは。
    うーん、Windowsでは確認していないんですよね・・。
    というのも、Windowsの場合は色々ツールが揃ってるんで(^^;
    http://www.forest.impress.co.jp/article/2004/01/27/url2bmp.html

    現在出ているエラーは具体的にはどのようなものですか?
    うまくいかないようでしたら、上のようなツールを使うなど、windowsの場合は選択肢が多いので他の方法も考えてみてください。

  3. お返事ありがとうございます。
    出ているエラーは
    java.lang.IllegalArgumentException: Unknown image type 0
    at java.awt.image.BufferedImage.(BufferedImage.java:492)
    at thumbnail.ImageSaver.run(ImageSaver.java:35)
    となっています。

    ImageServer.javaの方はこちらの一文で止まっているようです。
    BufferedImage simg = new BufferedImage(320, 200, bimg.getType());

    目的としてはブラウザからURLを入力し、サーブレットを用いて
    サーバサイドでサムネイルを生成し、サーバの方に画像を
    蓄えていくものを作ろうと思ってまして。

    SWTは問題なく動き、簡易ブラウザとして起動しているので、
    XULRunnerの導入に失敗していると思います….なので
    WindowsでJavaXPCOMを使える環境になっていないのかと。

    Macの時はインストーラーで一式入ったようです(^^ゞ
    そして、Windowsではパスがうまく通せていないのか
    動かない状況でして…

  4. あ、肝心なことを忘れていました。
    Windowsの場合、SWTのBrowserクラスはIEコンポーネントを使っているようです。
    ですので、既存コードではXULRunnerは全く関係していません。

    上記エラーは、getType()でTYPE_CUSTOMが返ってきているので、
    swt2awtメソッド内でうまく画像の形式変換ができていないのかもしれませんね。これについては、ちょっと原因が分かりません。

    Runtime#execを使って、先ほど紹介した url2bmp などのプログラムを実行させた方がすんなり行くと思いますが、どうでしょうか。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です