2012-04-18 11 views
3

IM4J(ImageMagick用のJavaラッパー)を使用してJPEGのサムネイルを作成しようとしています。これは両方のライブラリで初めての経験です。これは技術リーダーが私に手渡す難しい要件です(IM4J/ImageMagick以外のものを使用することはお勧めしません)。私の手はここの技術選択に結びついています!ImageMagick/IM4J FileNotFoundException

convertコマンドではFileNotFoundExceptionが表示されていますが、これらのライブラリ(またはその両方)のセットアップが正しく行われていないことがわかります。ここに私のコンピュータで

は、私のディレクトリ構造である:私のJavaプロジェクトで

C:/ 
    myApp/ 
     images/    --> where all of my JPEGs are 
     thumbnails/   --> where I want ImageMagick to send the converted thumbnails to 
     imageMagickHome/ --> Where I downloaded the DLL to 
      ImageMagick-6.7.6-1-Q16-windows-dll.exe 
    ... 

、私はIM4JのJAR(im4java-1.2.0.jar)は、実行時にクラスパス上にあることを確認してください。私はIM4Jの1.2.0バージョンを使用する必要がありますが、私はImageMagickの任意のバージョンを使用する自由を持っています。私はこのバージョンを選んだだけです。私のWindows 7(32-bit)マシンのための最新の/安定したバージョンのようだからです。 別のバージョンを使用する必要がある場合は、答えのImageMagickダウンロードページからそのリンクを私に送ってください!のImageMagickについては

、私はちょうどhereからそのEXEをダウンロードし、上記のフォルダに置かれ - 私は任意のインストール、ウィザード、MSI、環境変数の設定をしませんでしたなど

その後、私のJavaコードで:

// In my driver... 
File currentFile = new File("C:/myApp/images/test.jpg"); --> exists and is sitting at this location 
File thumbFile = new File("C:/myApp/thumbnails/test-thumb.jpg"); --> doesnt exist yet! (destination file) 
Thumbnailer myThumbnailer = new Thumbnailer(); 
myThumbnailer.generateThumbnail(currentFile, thumbFile); 

// Then the Thumbnailer: 
public class Thumbnailer 
{ 
    // ... omitted for brevity 

    public void generateThumbnail(File originalFile, File thumbnailFile) 
    { 
     // Reads appConfig.xml from classpath, validates it against a schema, 
     // and reads the contents of an element called <imPath> into this 
     // method's return value. See below 
     String imPath = getIMPathFromAppConfigFile(); 

     org.im4java.core.IMOperation op = new Operation(); 
     op.colorspace(this.colorSpace); 
     op.addImage(originalFile.getAbsolutePath()); 
     op.flatten(); 
     op.addImage(thumbnailFile.getAbsolutePath()); 

     ConvertCmd cmd = new ConvertCmd(); 

     cmd.setSearchPath(imPath); 

     // This next line is what throws the FileNotFoundException 
     cmd.run(op); 
    } 
} 

imPathが含まれている私のappConfig.xmlファイルのセクション:

<imPath>C:/myApp/imageMagickHome</imPath> 

注 - このappConfig.xmlが整形式でないと、スキーマ検証ツールがそれをキャッチします。スキーマの検証エラーは発生していないため、これを原因として判断することができます。 の場合は、ファイルパスの区切り文字に注意してください。彼らはすべてスラッシュです。 Windowsシステムでは、スラッシュはファイルパスを参照して* nixのバックスラッシュと同じように扱われると言われたので、私はこれを行なった。信じられないかもしれませんが、私たちはWindows マシンで開発していますが、Linuxサーバに展開していますので、これは私の解決策でした(もう一度、ではなく私の呼び出しです!)。

IM4Jも、Windowsユーザーが、時には悩みを持っていると、Windowsの開発者は、このライブラリが動作するように取得するIM4JAVA_TOOLPATHのenv VARを設定する必要がありますthis記事で説明できることを認めています。私はこの提案を試み、同じ名前の新しいシステム全体の環境変数を作成し、その値をC:\myApp\imageMagickHomeに設定しました。まだ違いはありません。 ここに注意してください私はバックスラッシュを使用しています。これは、このenv varは私のマシンにとってローカルなのに対し、appConfig.xmlはLinuxサーバに配備されるconfigディスクリプタです。私が言うことができるものから、

は、犯人はおそらく、次のいずれか(またはそれ以上)である:

  • 私が正しくImageMagickのEXE「をインストール」していないと、インストーラ/ MSIを使用している必要があります。または私はImageMagick(IM4Jではない)のために他の環境変数を追加する必要があります
  • IM4Jが正しく設定されておらず、環境変数を追加する必要がありますか?
  • Windows/* nix "/" vs 。「\」私のappConfig.xmlファイルからの問題、私はまた、私は「変換」という名前のファイルにFileNotFoundExceptionを得ている理由として困惑してい

上記のように:

のjava。 io.FileNotFoundException:convert

私はこれがIM4J jarの中のどこかにあるバッチ/シェルファイルだと仮定します(ImageMagickのためにダウンロードしたものはEXEだけだったので)。しかし、私がIM4Jのjarファイルを解凍すると、その中のクラスだけが表示されます。私は "スクリプトジェネレータ"クラスを参照しているので、私はcmd.run(op)コールの前にこれらのキックオフを試して、convertファイルを作成してください、そしておそらくこれは私が逃しているものです(おそらく私はこれらのジェネレータを手動で起動する必要があります。私Thumbnailer方法。。それとも、多分私のダウンロードが不完全である。

いずれにせよ、私はどこを開始するために理解するライブラリのいずれかを用いて十分に精通していないよ。これで任意の助け

感謝。

+0

nice question。 +1 –

+0

@PinnyM - インストーラを実行し、ImageMagickを 'C:/ myApp/imageMagickHome'ディレクトリにインストールしました。今私は自分のファイルシステムで 'C:/ myApp/imageMagickHome/ImageMagick-6.7.6-Q16 /'を見ています。私はドライバーを走らせて、**同じ**エラーが出ています。この新しい(自動インストールされた)ディレクトリを含めるには、env varまたはappConfig.xmlの設定を変更する必要がありますか? – IAmYourFaja

答えて

1

ImageMagickライブラリをインストールするには、最初に 'ImageMagick-6.7.6-1-Q16-windows-dll.exe'インストーラを実行し、環境パスiインストールされているバイナリ( 'convert.exe'、 'mogrify.exe'など)の場所はありません

+0

あなたが気にしないなら、上記の私のコメントを見て、私が今持っているこの2番目の問題にこの答えが対応しているかどうか教えてください。これまでのすべての助けをありがとう! – IAmYourFaja

+0

命の保護人、ありがとう、ありがとう、**ありがとう**。 – IAmYourFaja

+0

上記のように、環境パス(好ましくはシステムパスですが、オプションでユーザーパス)には、imagemagickバイナリディレクトリが含まれていなければなりません。 'C:\ myApp \ imageMagickHome \ ImageMagick-6.7.6-Q16'にする必要があります。 – PinnyM

0

環境変数IM4JAVA_TOOLPATHを設定してください。

enter image description here