1

私は自分のアプリケーションでimagemagickを使用しています。私たちの開発マシンはWindowsで、ライブサーバーはLinuxです。現在、オンラインではオンラインで正常に機能しています。しかし、開発マシンではありません。Windows用のImagemagick最新リリースをダウンロードしてインストールしました。DOSプロンプトで以下のコマンドを試してみると、正常に動作しています。

convert -sample 100x100 D:\test.jpg D:\test-cropped.jpg

しかし、Javaプログラムでコマンドラインと同じように実行すると、機能せず、エラーも発生しません。私のコードは:

Runtime.getRuntime().exec("convert -sample 250x150 "+pathName+digest+".jpg "+pathName+digest+"_thumb.jpg");

どんな助けも認められます。

4

4 に答える 4

1

convert.exeImageMagickのインストールディレクトリにあります。したがって、環境変数にImageMagickインストールディレクトリを追加する必要がありますpath

別のオプションは、次のような完全なパスを提供することですconvert.exe

Runtime.getRuntime().exec("C:\\program files\\ImageMagick\\convert -sample 250x150 "+pathName+digest+".jpg "+pathName+digest+"_thumb.jpg");
于 2012-10-17T10:02:24.380 に答える
0

試す

  • convert絶対パスを使用して実行
  • input fileパラメータを引用符で囲み、output fileスペースが含まれている場合は
于 2012-10-17T10:02:20.150 に答える
0

問題はパス名のスペースにあると思いますが、解決策はエスケープや引用符を使用しないことです。このexec(String)メソッドは、空白を探すことにより、文字列を完全に単純な方法で「引数」に分割します。引用等には一切注意を払っていません。代わりに、引用符などが埋め込まれたコマンド名と引数になります。

解決策は、そのオーバーロードを使用して、execを取りString[]、引数を自分で分割することです。例えば

    Runtime.getRuntime().exec(new String[]{
         "convert", // or "D:\\Program Files (x86)\\ImageMagick-6.8.0-Q16\\convert\\"
         "-sample", 
         "250x150", 
         pathName + digest + ".jpg",
         pathName + digest + "_thumb.jpg"
    });

他にできることは、プロセスstdoutおよびstderrに書き込まれる出力をキャプチャして印刷することです。

于 2012-10-17T11:02:53.137 に答える
0

compare私の場合、JavaコマンドからRuntime.getRuntime()。exec()を使用して正常に機能していたという問題に直面していましたが、を使用するconvertと、機能せず、終了値が4として返されました。
Compare実行すると終了値0が返されます。正常に実行されたこと。
ImageMagicのインストールディレクトリでsystem path更新しましたが、それでも「convert」exeファイルを選択していませんでした。convert
そこで、 eg: だけを書き込むのではなく、convert.exeファイルの完全なパスを指定し始めましRuntime.getRuntime().exec("C:/Program files/ImageMagic......../convert.exe myImage1 -draw .... myImage2")た。今回は正常に機能しました。システムがアプリケーションを選択できず、フルパスを指定してそれを分類
できなかった方法がいくつかあります。convertこの解決策は、同じタイプの問題に直面している人を助けるかもしれません。

于 2014-07-25T04:38:00.280 に答える