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
方法。。それとも、多分私のダウンロードが不完全である。
いずれにせよ、私はどこを開始するために理解するライブラリのいずれかを用いて十分に精通していないよ。これで任意の助け
感謝。
nice question。 +1 –
@PinnyM - インストーラを実行し、ImageMagickを 'C:/ myApp/imageMagickHome'ディレクトリにインストールしました。今私は自分のファイルシステムで 'C:/ myApp/imageMagickHome/ImageMagick-6.7.6-Q16 /'を見ています。私はドライバーを走らせて、**同じ**エラーが出ています。この新しい(自動インストールされた)ディレクトリを含めるには、env varまたはappConfig.xmlの設定を変更する必要がありますか? – IAmYourFaja